@kedem/okdb 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +1 -1
  2. package/bin/okdb.js +1 -1
  3. package/okdb-data/default/data.mdb +0 -0
  4. package/okdb-data/default/lock.mdb +0 -0
  5. package/okdb-data/~log/data.mdb +0 -0
  6. package/okdb-data/~log/lock.mdb +0 -0
  7. package/okdb-data/~system/data.mdb +0 -0
  8. package/okdb-data/~system/lock.mdb +0 -0
  9. package/okdb.js +1 -1
  10. package/package.json +1 -1
  11. package/public/admin-app.js +1 -1
  12. package/public/components/admin-route-host.ok.js +1 -1
  13. package/public/components/env-picker.ok.js +1 -1
  14. package/public/components/field-path-input.ok.js +1 -1
  15. package/public/components/geo-map.ok.js +1 -1
  16. package/public/components/ok-cron-input.ok.js +1 -1
  17. package/public/components/ok-dropzone.ok.js +1 -1
  18. package/public/components/ok-js-input.ok.js +1 -1
  19. package/public/components/ok-json-input.ok.js +1 -1
  20. package/public/components/ok-text-monaco-input.ok.js +1 -1
  21. package/public/components/theme-toggle.ok.js +1 -1
  22. package/public/login-app.js +1 -1
  23. package/public/modules/ok.js +1 -1
  24. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  25. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  26. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  27. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  28. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  29. package/public/sections/auth/parts/token-list.ok.js +1 -1
  30. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  31. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  32. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  33. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  34. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  35. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  36. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  37. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  38. package/public/sections/db/parts/db-overview.ok.js +1 -1
  39. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  40. package/public/sections/db/parts/edit-row.ok.js +1 -1
  41. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  42. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  43. package/public/sections/db/parts/type-list.ok.js +1 -1
  44. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  45. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  46. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  47. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  48. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  55. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  56. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  57. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  58. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  59. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  60. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  61. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  62. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  63. package/public/sections/engines/engine-ui-utils.js +1 -1
  64. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  65. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  66. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  67. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  68. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  69. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  70. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  71. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  72. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  73. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  74. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  75. package/public/sections/files/parts/files-overview.ok.js +1 -1
  76. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  77. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  78. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  79. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  80. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  81. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  82. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  83. package/public/sections/license/parts/license-panel.ok.js +1 -1
  84. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  85. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  86. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  87. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  88. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  89. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  90. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  91. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  92. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  93. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  94. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  95. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  96. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  97. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  98. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  99. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  100. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  101. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  102. package/public/sections/system/parts/system-log.ok.js +1 -1
  103. package/public/sections/system/parts/system-status.ok.js +1 -1
  104. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  105. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  106. package/public/sections/views/parts/view-detail.ok.js +1 -1
  107. package/public/sections/views/parts/views-list.ok.js +1 -1
  108. package/public/sections/views/parts/views-overview.ok.js +1 -1
  109. package/public/setup-app.js +1 -1
  110. package/public/stores/auth-store.js +1 -1
  111. package/public/stores/events-store.js +1 -1
  112. package/public/stores/functions-store.js +1 -1
  113. package/public/stores/okdb-store.js +1 -1
  114. package/public/stores/theme-store.js +1 -1
  115. package/public/util/permissions.js +1 -1
  116. package/public/util/sift-schema.js +1 -1
  117. package/public/view-models/type-query-vm.js +1 -1
@@ -1 +1 @@
1
- const _0xef3d27=_0x39df;function _0x39df(_0xddf16b,_0x44d6b2){_0xddf16b=_0xddf16b-0xd2;const _0x2fbf4a=_0x2fbf();let _0x39df60=_0x2fbf4a[_0xddf16b];return _0x39df60;}(function(_0x51d98d,_0x5b3d78){const _0x232818=_0x39df,_0x4f9da0=_0x51d98d();while(!![]){try{const _0x1639b8=-parseInt(_0x232818(0x130))/0x1*(parseInt(_0x232818(0xd5))/0x2)+parseInt(_0x232818(0x105))/0x3+parseInt(_0x232818(0xdc))/0x4+parseInt(_0x232818(0xd8))/0x5+-parseInt(_0x232818(0x127))/0x6*(parseInt(_0x232818(0x10a))/0x7)+-parseInt(_0x232818(0x131))/0x8*(-parseInt(_0x232818(0x134))/0x9)+-parseInt(_0x232818(0x126))/0xa*(parseInt(_0x232818(0x121))/0xb);if(_0x1639b8===_0x5b3d78)break;else _0x4f9da0['push'](_0x4f9da0['shift']());}catch(_0x11c411){_0x4f9da0['push'](_0x4f9da0['shift']());}}}(_0x2fbf,0xd149e));import _0x388d21 from'@toolkit/elements/ok-icon.ok.js';import _0x1bd2e3 from'@toolkit/core/ok-overlay.ok.js';export default{'tag':'create-token-modal','dependencies':[_0x1bd2e3,_0x388d21],'attr':{'modal':{},'onDone':{}},'context':_0x4f6eb4=>({'busy':!0x1,'showToken':!0x1,'createdToken':null,'error':null,'label':'','name':'','password':'','showPassword':!0x1,'expiresAt':'','catalog':null,'catalogError':!0x1,'catalogLoading':!0x1,'godMode':!0x1,'selectedPerms':{},'grants':{},'collapsedScopes':{},'hoveredPerm':null,'hoveredPermOp':null,'tooltipPos':null,'setHover'(_0x42e12b,_0x5a31f5,_0x1a538b){const _0x20cc3c=_0x39df,_0x44fda5=_0x42e12b[_0x20cc3c(0x10b)][_0x20cc3c(0xe7)]();this[_0x20cc3c(0x101)]=_0x5a31f5,this[_0x20cc3c(0xd6)]=_0x1a538b;const _0x52bcd5=_0x44fda5;this[_0x20cc3c(0xef)]={'left':_0x52bcd5[_0x20cc3c(0x12e)],'bottom':_0x52bcd5[_0x20cc3c(0xee)]};},'clearHover'(){const _0x3b336f=_0x39df;this[_0x3b336f(0x101)]=null,this[_0x3b336f(0xd6)]=null,this[_0x3b336f(0xef)]=null;},async 'loadCatalog'(){const _0xa97586=_0x39df;this[_0xa97586(0x119)]=!0x0;try{const _0x1d4f2c=await fetch(__ENV__['ADMIN_API']+_0xa97586(0x109));if(!_0x1d4f2c['ok'])throw new Error(_0xa97586(0x11f));const _0xf85318=await _0x1d4f2c[_0xa97586(0xea)]();this[_0xa97586(0x120)]=_0xf85318['data']??_0xf85318[_0xa97586(0xf4)];}catch{this[_0xa97586(0x138)]=!0x0;}finally{this[_0xa97586(0x119)]=!0x1;}},'togglePerm'(_0x5a0c2c,_0x115e0f,_0x23d222){const _0x58aab8=_0x39df;if(this[_0x58aab8(0x11d)])return;const _0x52ba1b=_0x5a0c2c+':*';if(this['selectedPerms'][_0x52ba1b]){const _0x5dad40={...this['selectedPerms']};delete _0x5dad40[_0x52ba1b];for(const _0x421a00 of _0x23d222)_0x421a00!==_0x115e0f&&(_0x5dad40[_0x5a0c2c+':'+_0x421a00]=!0x0);this[_0x58aab8(0x100)]=_0x5dad40;}else this[_0x58aab8(0x100)]={...this[_0x58aab8(0x100)],[_0x5a0c2c+':'+_0x115e0f]:!this[_0x58aab8(0x100)][_0x5a0c2c+':'+_0x115e0f]};},'toggleGodMode'(){const _0x33e2fd=_0x39df;this['godMode']=!this[_0x33e2fd(0x11d)],this[_0x33e2fd(0x11d)]&&(this[_0x33e2fd(0x100)]={});},'toggleNamespace'(_0x3905ca,_0x53c4a7){const _0x4f9710=_0x39df;if(this[_0x4f9710(0x11d)])return;const _0x4cb0da=_0x3905ca+':*',_0x215944={...this[_0x4f9710(0x100)]};if(_0x215944[_0x4cb0da])delete _0x215944[_0x4cb0da];else{for(const _0xac66ac of _0x53c4a7)delete _0x215944[_0x3905ca+':'+_0xac66ac];_0x215944[_0x4cb0da]=!0x0;}this[_0x4f9710(0x100)]=_0x215944;},'toggleScope'(_0x523d69){const _0x2bed6b=_0x39df;this[_0x2bed6b(0x117)]={...this[_0x2bed6b(0x117)],[_0x523d69]:!this[_0x2bed6b(0x117)][_0x523d69]};},'isCollapsed'(_0x34bd5e){const _0x3c49eb=_0x39df;return!!this[_0x3c49eb(0x117)][_0x34bd5e];},'scopeSelectionCount'(_0x49352f){const _0x5047ec=_0x39df;let _0x440605=0x0,_0x1ec2c2=0x0;for(const _0x52dbab of _0x49352f[_0x5047ec(0x12c)])for(const _0x338b0d of _0x52dbab[_0x5047ec(0xdf)])_0x1ec2c2++,(this[_0x5047ec(0x100)][_0x52dbab['ns']+':'+_0x338b0d]||this['selectedPerms'][_0x52dbab['ns']+':*'])&&_0x440605++;return _0x440605>0x0?_0x440605+'/'+_0x1ec2c2:'';},'addGrantEnv'(_0x1efbc5){const _0x2fe3ab=_0x39df;_0x1efbc5&&!this[_0x2fe3ab(0xfd)][_0x1efbc5]&&(this['grants']={...this['grants'],[_0x1efbc5]:{}});},'removeGrantEnv'(_0x300501){const _0x267b1e=_0x39df,_0x45381b={...this[_0x267b1e(0xfd)]};delete _0x45381b[_0x300501],this[_0x267b1e(0xfd)]=_0x45381b;},'availableGrantEnvs'(){const _0x95caa8=_0x39df;return this['catalog']?.[_0x95caa8(0x133)]?this[_0x95caa8(0x120)][_0x95caa8(0x133)][_0x95caa8(0x112)](_0x3fff21=>!this[_0x95caa8(0xfd)][_0x3fff21]):[];},'getPermSections'(){const _0x5372c3=_0x39df;if(!this[_0x5372c3(0x120)]?.[_0x5372c3(0x12c)])return[];const _0x30730a=this['catalog']['opOrder']||[_0x5372c3(0xd2),_0x5372c3(0xe4),_0x5372c3(0xd4),_0x5372c3(0x124),_0x5372c3(0xd7),'peer'];return[{'scope':_0x5372c3(0x10f),'label':_0x5372c3(0xec)},{'scope':_0x5372c3(0xfb),'label':_0x5372c3(0x11e)},{'scope':_0x5372c3(0xf7),'label':'Gate'}][_0x5372c3(0x12d)](_0x32baf0=>({'scope':_0x32baf0[_0x5372c3(0xf1)],'label':_0x32baf0[_0x5372c3(0xfe)],'namespaces':Object[_0x5372c3(0xf2)](this[_0x5372c3(0x120)][_0x5372c3(0x12c)])[_0x5372c3(0x112)](([,_0x5a6586])=>_0x5a6586[_0x5372c3(0xf1)]===_0x32baf0[_0x5372c3(0xf1)])[_0x5372c3(0x12d)](([_0xe7e311,_0x5a2a28])=>({'ns':_0xe7e311,'nsLabel':_0x5a2a28[_0x5372c3(0xfe)],'nsDescription':_0x5a2a28[_0x5372c3(0xeb)],'operations':Object[_0x5372c3(0xf8)](_0x5a2a28['operations'])[_0x5372c3(0xdd)]((_0x13e855,_0x2ebad9)=>{const _0x2648e9=_0x5372c3,_0x27489c=_0x30730a[_0x2648e9(0xe1)](_0x13e855),_0x5b8561=_0x30730a[_0x2648e9(0xe1)](_0x2ebad9);return-0x1===_0x27489c&&-0x1===_0x5b8561?_0x13e855[_0x2648e9(0x102)](_0x2ebad9):-0x1===_0x27489c?0x1:-0x1===_0x5b8561?-0x1:_0x27489c-_0x5b8561;}),'operationMeta':_0x5a2a28[_0x5372c3(0xdf)]}))}))[_0x5372c3(0x112)](_0x39679b=>_0x39679b[_0x5372c3(0x12c)][_0x5372c3(0xf6)]>0x0);},'getPermOps'(_0x44802a,_0x528672,_0x4d68d6){const _0x4cd9ec=_0x39df;return _0x528672[_0x4cd9ec(0x12d)](_0x10cfed=>{const _0x476e20=_0x4cd9ec,_0x357d14=_0x4d68d6?.[_0x10cfed]||{},_0x3740cc=_0x357d14[_0x476e20(0x11b)]||[];return{'ns':_0x44802a,'op':_0x10cfed,'perm':_0x44802a+':'+_0x10cfed,'summary':_0x357d14[_0x476e20(0xfc)]||'','routes':_0x3740cc,'hasDestructive':_0x3740cc[_0x476e20(0xff)](_0x5e0c5f=>_0x5e0c5f[_0x476e20(0xed)]),'checked':!!this[_0x476e20(0x100)][_0x44802a+':'+_0x10cfed]||!!this[_0x476e20(0x100)][_0x44802a+':*']};});},'getImpliedBy'(_0x8b0319){const _0x2b8332=_0x39df,_0x1b63fc=this[_0x2b8332(0x120)]?.['implies']||{};return Object[_0x2b8332(0xf2)](_0x1b63fc)[_0x2b8332(0x112)](([,_0x3ddedd])=>_0x3ddedd[_0x2b8332(0xfa)](_0x8b0319))[_0x2b8332(0x12d)](([_0x511965])=>_0x511965);},'getGrantEntries'(){const _0x21f94d=_0x39df;if(!this[_0x21f94d(0x120)]?.[_0x21f94d(0x12c)])return[];const _0x354a30=this[_0x21f94d(0x120)]['opOrder']||[_0x21f94d(0xd2),_0x21f94d(0xe4),_0x21f94d(0xd4),_0x21f94d(0x124),_0x21f94d(0xd7),_0x21f94d(0xd9)],_0x1c3db9=Object[_0x21f94d(0xf2)](this[_0x21f94d(0x120)]['namespaces'])[_0x21f94d(0x112)](([,_0x3bf641])=>_0x21f94d(0x10f)===_0x3bf641[_0x21f94d(0xf1)])[_0x21f94d(0x12d)](([_0x19e3c1,_0x296fb7])=>({'ns':_0x19e3c1,'operations':Object[_0x21f94d(0xf8)](_0x296fb7['operations'])[_0x21f94d(0xdd)]((_0x2cf964,_0x4be0fb)=>{const _0x1ccfec=_0x21f94d,_0x17879c=_0x354a30[_0x1ccfec(0xe1)](_0x2cf964),_0x28fd4a=_0x354a30[_0x1ccfec(0xe1)](_0x4be0fb);return-0x1===_0x17879c&&-0x1===_0x28fd4a?_0x2cf964[_0x1ccfec(0x102)](_0x4be0fb):-0x1===_0x17879c?0x1:-0x1===_0x28fd4a?-0x1:_0x17879c-_0x28fd4a;})})),_0x3a7b96=this['selectedPerms'],_0x5ab7e0=this[_0x21f94d(0x11d)];return Object[_0x21f94d(0xf2)](this[_0x21f94d(0xfd)])['map'](([_0x28e2dd,_0x20c8b2])=>({'env':_0x28e2dd,'globalCoverAll':_0x5ab7e0||!!_0x3a7b96['*'],'nGroups':_0x1c3db9[_0x21f94d(0x12d)](({ns:_0x4f5b93,operations:_0x373050})=>({'ns':_0x4f5b93,'ops':_0x373050[_0x21f94d(0x12d)](_0x4394c4=>{const _0x43d4aa=_0x21f94d,_0x1311b2=_0x4f5b93+':'+_0x4394c4,_0x2e351f=!!_0x20c8b2[_0x1311b2]||!!_0x20c8b2[_0x4f5b93+':*']||!!_0x20c8b2['*'],_0x56dca7=!_0x2e351f&&(_0x5ab7e0||!!_0x3a7b96['*']||!!_0x3a7b96[_0x4f5b93+':*']||!!_0x3a7b96[_0x1311b2]),_0x2f03a8=this['catalog'][_0x43d4aa(0x12c)][_0x4f5b93]?.['operations']?.[_0x4394c4]||{};return{'perm':_0x1311b2,'op':_0x4394c4,'summary':_0x2f03a8[_0x43d4aa(0xfc)]||'','routes':_0x2f03a8[_0x43d4aa(0x11b)]||[],'hasDestructive':(_0x2f03a8[_0x43d4aa(0x11b)]||[])[_0x43d4aa(0xff)](_0x33985e=>_0x33985e[_0x43d4aa(0xed)]),'checked':_0x2e351f,'inherited':_0x56dca7};})}))}));},'isNsAllSelected'(_0x6bd696){return!!this['selectedPerms'][_0x6bd696+':*'];},'isEnvAllSelected'(_0x56174c){const _0x1cbb08=_0x39df;return!!this[_0x1cbb08(0xfd)][_0x56174c]?.['*'];},'isEnvWildInherited'(_0x5cb12b){const _0x20b7db=_0x39df;return!this['isEnvAllSelected'](_0x5cb12b)&&(this[_0x20b7db(0x11d)]||!!this[_0x20b7db(0x100)]['*']);},'isNsAllSelectedForGrant'(_0x17f992,_0xbc865b){const _0x136241=_0x39df;return!!this[_0x136241(0xfd)][_0x17f992]?.['*']||!!this[_0x136241(0xfd)][_0x17f992]?.[_0xbc865b+':*'];},'isNsWildInheritedForGrant'(_0x4485a7,_0x2c3cf5){const _0x11c758=_0x39df;return!this[_0x11c758(0x123)](_0x4485a7,_0x2c3cf5)&&(this[_0x11c758(0x11d)]||!!this['selectedPerms']['*']||!!this['selectedPerms'][_0x2c3cf5+':*']);},'toggleGrantPerm'(_0x4ad820,_0x3feec8,_0x338241,_0x42d416){const _0x2aed41=_0x39df,_0xffcaea=_0x3feec8+':'+_0x338241,_0x435b52=_0x3feec8+':*',_0xcabd9a={...this[_0x2aed41(0xfd)][_0x4ad820]||{}};if(_0xcabd9a['*'])delete _0xcabd9a['*'];else{if(_0xcabd9a[_0x435b52]){delete _0xcabd9a[_0x435b52];for(const _0x2d5a48 of _0x42d416)_0x2d5a48!==_0x338241&&(_0xcabd9a[_0x3feec8+':'+_0x2d5a48]=!0x0);}else _0xcabd9a[_0xffcaea]=!_0xcabd9a[_0xffcaea];}this['grants']={...this[_0x2aed41(0xfd)],[_0x4ad820]:_0xcabd9a};},'toggleGrantNamespace'(_0x284855,_0x5cbc84,_0x1eb865){const _0x1e0e16=_0x39df,_0x30a4c5=_0x5cbc84+':*',_0x523ee9={...this[_0x1e0e16(0xfd)][_0x284855]||{}};if(_0x523ee9['*'])delete _0x523ee9['*'];else{if(_0x523ee9[_0x30a4c5])delete _0x523ee9[_0x30a4c5];else{for(const _0x502b5a of _0x1eb865)delete _0x523ee9[_0x502b5a['perm']];_0x523ee9[_0x30a4c5]=!0x0;}}this[_0x1e0e16(0xfd)]={...this[_0x1e0e16(0xfd)],[_0x284855]:_0x523ee9};},'toggleGrantAllPerms'(_0x53ea02){const _0x30e5db=_0x39df,_0x37ec78=this['grants'][_0x53ea02]||{};if(_0x37ec78['*']){const _0x55ee9a={..._0x37ec78};delete _0x55ee9a['*'],this[_0x30e5db(0xfd)]={...this['grants'],[_0x53ea02]:_0x55ee9a};}else this[_0x30e5db(0xfd)]={...this[_0x30e5db(0xfd)],[_0x53ea02]:{'*':!0x0}};},'validateForm'(){const _0x15c411=_0x39df;if(!this[_0x15c411(0xfe)]['trim']())throw new Error(_0x15c411(0x116));return!0x0;},async 'save'(){const _0x169e63=_0x39df;this['error']=null;try{this[_0x169e63(0x111)](),this[_0x169e63(0xf0)]=!0x0;const _0x41345d={'label':this[_0x169e63(0xfe)][_0x169e63(0x139)]()};if(this['expiresAt']){const _0x1276f4=new Date(this[_0x169e63(0xe6)])[_0x169e63(0x137)]();_0x1276f4>Date[_0x169e63(0x103)]()&&(_0x41345d['ttl']=_0x1276f4-Date[_0x169e63(0x103)]());}if(this[_0x169e63(0x11d)])_0x41345d[_0x169e63(0x104)]=['*'];else{if(this[_0x169e63(0x138)]&&void 0x0!==this['selectedPerms']['_fallback']){const _0x5e0756=String(this[_0x169e63(0x100)][_0x169e63(0x12a)]||'')[_0x169e63(0x136)](',')[_0x169e63(0x12d)](_0x2e681e=>_0x2e681e[_0x169e63(0x139)]())['filter'](_0x8af529=>_0x8af529);_0x5e0756[_0x169e63(0xf6)]&&(_0x41345d[_0x169e63(0x104)]=_0x5e0756);}else{const _0xd9c69c=Object['entries'](this[_0x169e63(0x100)])[_0x169e63(0x112)](([_0x377ab9,_0x11c4af])=>_0x11c4af&&_0x169e63(0x12a)!==_0x377ab9)[_0x169e63(0x12d)](([_0x2839ea])=>_0x2839ea);_0xd9c69c[_0x169e63(0xf6)]&&(_0x41345d['permissions']=_0xd9c69c);}}const _0x2f3ed5={};for(const [_0x157908,_0x5b4c3b]of Object[_0x169e63(0xf2)](this[_0x169e63(0xfd)])){const _0x5a78dd=Object[_0x169e63(0xf2)](_0x5b4c3b)[_0x169e63(0x112)](([,_0x5a9d81])=>_0x5a9d81)[_0x169e63(0x12d)](([_0x43ae28])=>_0x43ae28);_0x5a78dd[_0x169e63(0xf6)]&&(_0x2f3ed5[_0x157908]=_0x5a78dd);}Object[_0x169e63(0xf8)](_0x2f3ed5)[_0x169e63(0xf6)]&&(_0x41345d[_0x169e63(0xfd)]=_0x2f3ed5),this[_0x169e63(0x115)][_0x169e63(0x139)]()&&(_0x41345d[_0x169e63(0x115)]=this[_0x169e63(0x115)][_0x169e63(0x139)](),this[_0x169e63(0xf9)]&&(_0x41345d[_0x169e63(0xf9)]=this[_0x169e63(0xf9)]));const _0x91c689=await fetch(__ENV__[_0x169e63(0xf3)]+'/auth/tokens',{'method':_0x169e63(0x106),'headers':{'Content-Type':'application/json'},'body':JSON['stringify'](_0x41345d)});if(!_0x91c689['ok']){const _0x4f00c1=await _0x91c689['json']();throw new Error(_0x4f00c1?.['error']?.[_0x169e63(0x129)]||_0x169e63(0x10c));}const _0x54b74d=await _0x91c689['json']();this[_0x169e63(0x12f)]=_0x54b74d[_0x169e63(0x114)]??_0x54b74d,this[_0x169e63(0xd3)]=!0x0;}catch(_0x42fa7b){this[_0x169e63(0xdb)]=_0x42fa7b?.[_0x169e63(0x129)]||String(_0x42fa7b),_0x4f6eb4[_0x169e63(0x108)][_0x169e63(0x10d)]?.[_0x169e63(0x12b)]?.['error']?.(this[_0x169e63(0xdb)]);}finally{this[_0x169e63(0xf0)]=!0x1;}},'copyToken'(){const _0x3fa4fe=_0x39df;this[_0x3fa4fe(0x12f)]?.[_0x3fa4fe(0x11c)]&&navigator['clipboard']?.[_0x3fa4fe(0x128)](this[_0x3fa4fe(0x12f)][_0x3fa4fe(0x11c)])['then'](()=>{const _0x4ec321=_0x3fa4fe;_0x4f6eb4[_0x4ec321(0x108)][_0x4ec321(0x10d)]?.[_0x4ec321(0x12b)]?.[_0x4ec321(0x10e)]?.(_0x4ec321(0xf5));})[_0x3fa4fe(0xda)](()=>{const _0x2f8972=_0x3fa4fe;_0x4f6eb4[_0x2f8972(0x108)]['shared']?.[_0x2f8972(0x12b)]?.[_0x2f8972(0xdb)]?.('Failed\x20to\x20copy\x20token');});},'dismissToken'(){const _0x42dea4=_0x39df;_0x4f6eb4[_0x42dea4(0x135)][_0x42dea4(0xde)][_0x42dea4(0xe0)](),_0x4f6eb4[_0x42dea4(0x135)]['onDone']?.(this[_0x42dea4(0x12f)]);},'cancel'(){const _0x4de17d=_0x39df;_0x4f6eb4[_0x4de17d(0x135)][_0x4de17d(0xde)][_0x4de17d(0xe0)]();},'passwordStrength'(_0xff9032){const _0x150375=_0x39df;if(!_0xff9032)return 0x0;let _0x55a349=0x0;return _0xff9032['length']>=0x8&&_0x55a349++,_0xff9032[_0x150375(0xf6)]>=0xe&&_0x55a349++,/[A-Z]/[_0x150375(0x110)](_0xff9032)&&_0x55a349++,/[0-9]/[_0x150375(0x110)](_0xff9032)&&_0x55a349++,/[^A-Za-z0-9]/[_0x150375(0x110)](_0xff9032)&&_0x55a349++,_0x55a349;},'passwordStrengthLabel'(_0x1c01db){const _0x38a039=_0x39df,_0x5eeaf1=this[_0x38a039(0xe3)](_0x1c01db);return _0x1c01db?_0x5eeaf1<=0x1?_0x38a039(0x11a):_0x5eeaf1<=0x3?_0x38a039(0x125):_0x38a039(0xe2):'';},'passwordStrengthColor'(_0x306131){const _0x3b3a56=_0x39df,_0xae17d1=this[_0x3b3a56(0xe3)](_0x306131);return _0x306131?_0xae17d1<=0x1?_0x3b3a56(0xe9):_0xae17d1<=0x3?_0x3b3a56(0x132):_0x3b3a56(0x107):_0x3b3a56(0x122);},'toggleShowPassword'(){const _0x3c31b8=_0x39df;this['showPassword']=!this[_0x3c31b8(0x118)];}}),'mount'(_0x5d2741){const _0x517777=_0x39df;this[_0x517777(0xe8)]();},'style':_0xef3d27(0x113),'template':_0xef3d27(0xe5)};function _0x2fbf(){const _0x5110d4=['collapsedScopes','showPassword','catalogLoading','weak','routes','token','godMode','System','Failed','catalog','9427RVFkOq','transparent','isNsAllSelectedForGrant','write','fair','17410zVXhoR','146274vNRiWD','writeText','message','_fallback','toast','namespaces','map','left','createdToken','2ufyaDK','40qbcTiQ','var(--okdb-warning)','envs','1249515emcrpG','$attr','split','getTime','catalogError','trim','read','showToken','run','1129966jwODAC','hoveredPermOp','work','6023240vrMbVf','peer','catch','error','6134256ONECir','sort','modal','operations','close','indexOf','strong','passwordStrength','query','<div\x20class=\x22tf-root\x22><if\x20:=\x22busy\x20&&\x20!showToken\x22><ok-overlay><div\x20class=\x22loader-center\x22><ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:28px;height:28px;\x22/></div></ok-overlay></if><if\x20:=\x22showToken\x20&&\x20createdToken\x22><div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x22><div\x20style=\x22font-size:13px;\x20font-weight:600;\x20color:var(--okdb-success);\x22>✓\x20Token\x20Created</div><div\x20class=\x22tf-token-box\x22><div\x20class=\x22tf-token-warn\x22>⚠\x20Copy\x20this\x20token\x20now\x20—\x20it\x20will\x20not\x20be\x20shown\x20again.</div><div\x20class=\x22tf-token-value\x22>{{\x20createdToken.token\x20||\x20createdToken.value\x20||\x20createdToken\x20}}</div><div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x22>{{\x20createdToken.label\x20||\x20\x27Unnamed\x27\x20}}</div></div><div\x20class=\x22tf-actions\x22><button\x20class=\x22tf-btn\x20tf-btn--primary\x22\x20@click=\x22copyToken()\x22>Copy\x20token</button>\x20<button\x20class=\x22tf-btn\x20tf-btn--secondary\x22\x20@click=\x22dismissToken()\x22>Done</button></div></div></if><if\x20:=\x22!showToken\x22><div\x20class=\x22tf-header-fields\x22><div\x20class=\x22tf-header-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:2;\x22><span\x20class=\x22tf-label\x22>Label</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22e.g.,\x20API\x20Client\x22\x20:value=\x22label\x22\x20@input=\x22label\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1.5;\x22><span\x20class=\x22tf-label\x22>Expires\x20<span\x20style=\x22opacity:.4;\x22>(optional)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22datetime-local\x22\x20:value=\x22expiresAt\x22\x20@input=\x22expiresAt\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div></div><div\x20class=\x22tf-creds-section\x22><div><div\x20class=\x22tf-creds-label\x22>Login\x20credentials\x20<span\x20style=\x22opacity:.4;\x20text-transform:none;\x20font-weight:400;\x20letter-spacing:0;\x22>(optional)</span></div><div\x20class=\x22tf-creds-hint\x22>If\x20set,\x20this\x20token\x20can\x20also\x20be\x20used\x20via\x20username\x20+\x20password\x20authentication.</div></div><div\x20class=\x22tf-creds-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Username</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22leave\x20blank\x20for\x20token-only\x22\x20:value=\x22name\x22\x20@input=\x22name\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22\x20autocomplete=\x22off\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Password</span><div\x20class=\x22tf-pw-wrap\x22><input\x20class=\x22tf-input\x22\x20:type=\x22showPassword\x20?\x20\x27text\x27\x20:\x20\x27password\x27\x22\x20placeholder=\x22required\x20if\x20username\x20is\x20set\x22\x20:value=\x22password\x22\x20@input=\x22password\x20=\x20$el.value\x22\x20:disabled=\x22busy\x20||\x20!name\x22\x20autocomplete=\x22new-password\x22>\x20<button\x20class=\x22tf-pw-eye\x22\x20@click=\x22toggleShowPassword()\x22\x20type=\x22button\x22\x20tabindex=\x22-1\x22>{{\x20showPassword\x20?\x20\x27🙈\x27\x20:\x20\x27👁\x27\x20}}</button></div><if\x20:=\x22password\x22><div\x20class=\x22tf-strength-bar\x22><div\x20class=\x22tf-strength-fill\x22\x20:style=\x22\x27width:\x27\x20+\x20(passwordStrength(password)/5*100)\x20+\x20\x27%;\x20background:\x27\x20+\x20passwordStrengthColor(password)\x22/></div><div\x20class=\x22tf-strength-text\x22\x20:style=\x22\x27color:\x27\x20+\x20passwordStrengthColor(password)\x22>{{\x20passwordStrengthLabel(password)\x20}}</div></if></div></div></div></div><div\x20class=\x22tf-divider\x22/><if\x20:=\x22catalogLoading\x22><div\x20class=\x22tf-hint\x22\x20style=\x22padding-bottom:12px;\x22>Loading\x20permissions…</div></if><if\x20:=\x22catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22><span\x20class=\x22tf-label\x22>Permissions\x20<span\x20style=\x22color:var(--okdb-danger);\x22>(fallback)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22data:read,\x20data:write\x22\x20:value=\x22selectedPerms._fallback\x20||\x20\x27\x27\x22\x20@input=\x22selectedPerms\x20=\x20{\x20_fallback:\x20$el.value\x20}\x22\x20:disabled=\x22busy\x22>\x20<span\x20class=\x22tf-hint\x22>Comma-separated\x20permission\x20strings</span></div></if><if\x20:=\x22catalog\x20&&\x20!catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22\x20style=\x22gap:4px;\x22><div\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--full\x27,\x20godMode\x20?\x20\x27tf-pill--full-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGodMode()\x22\x20style=\x22width:fit-content;\x22>★\x20&nbsp;Full\x20access\x20—\x20all\x20permissions</div></div><if\x20:=\x22!godMode\x22><each\x20:of=\x22getPermSections()\x22\x20let:item=\x22section\x22><div\x20class=\x22tf-section\x22><div\x20class=\x22tf-scope-header\x22\x20@click=\x22toggleScope(section.scope)\x22><span\x20class=\x22tf-scope-name\x22>{{\x20section.label\x20}}</span><if\x20:=\x22scopeSelectionCount(section)\x22><span\x20class=\x22tf-scope-count\x22>{{\x20scopeSelectionCount(section)\x20}}</span></if><span\x20class=\x22tf-scope-chevron\x22>{{\x20isCollapsed(section.scope)\x20?\x20\x27▸\x27\x20:\x20\x27▾\x27\x20}}</span></div><if\x20:=\x22!isCollapsed(section.scope)\x22><each\x20:of=\x22section.namespaces\x22\x20let:item=\x22nsEntry\x22><div\x20class=\x22tf-ns-block\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsEntry.nsLabel\x20||\x20nsEntry.ns\x20}}</span><if\x20:=\x22nsEntry.nsDescription\x22><span\x20class=\x22tf-ns-desc\x22>{{\x20nsEntry.nsDescription\x20}}</span></if></div><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22getPermOps(nsEntry.ns,\x20nsEntry.operations,\x20nsEntry.operationMeta)\x22\x20let:item=\x22permOp\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20permOp.perm,\x20permOp)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20permOp.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20\x27\x27,\x20permOp.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22togglePerm(permOp.ns,\x20permOp.op,\x20nsEntry.operations)\x22>{{\x20permOp.op\x20}}<if\x20:=\x22permOp.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></if></div></each><if\x20:=\x22catalog.envs\x20&&\x20catalog.envs.length\x20>\x200\x22><div\x20class=\x22tf-divider\x22/><div\x20class=\x22tf-section\x22\x20style=\x22gap:8px;\x22><div\x20class=\x22tf-scope-header\x22\x20style=\x22cursor:default;\x20pointer-events:none;\x22><span\x20class=\x22tf-scope-name\x22>Per-env\x20grants</span>\x20<span\x20class=\x22tf-hint\x22\x20style=\x22margin-left:6px;\x22>extra\x20permissions\x20for\x20a\x20specific\x20environment</span></div><if\x20:=\x22availableGrantEnvs().length\x20>\x200\x22><div\x20class=\x22tf-pills\x22><each\x20:of=\x22availableGrantEnvs()\x22\x20let:item=\x22envName\x22><span\x20class=\x22tf-pill\x20tf-pill--add\x22\x20@click=\x22addGrantEnv(envName)\x22>+\x20{{\x20envName\x20}}</span></each></div></if><each\x20:of=\x22getGrantEntries()\x22\x20let:item=\x22grantEntry\x22><div\x20class=\x22tf-env-row\x22><div\x20class=\x22tf-env-row-header\x22><div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22><span\x20class=\x22tf-env-name\x22>{{\x20grantEntry.env\x20}}</span>\x20<span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isEnvAllSelected(grantEntry.env)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isEnvWildInherited(grantEntry.env)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantAllPerms(grantEntry.env)\x22\x20title=\x22*\x20—\x20all\x20permissions\x20for\x20this\x20env\x22\x20style=\x22font-size:11px;\x20padding:1px\x206px;\x22>*</span><if\x20:=\x22grantEntry.globalCoverAll\x22><span\x20class=\x22tf-hint\x22\x20style=\x22color:rgba(79,193,255,.35);\x22\x20title=\x22All\x20permissions\x20already\x20covered\x20by\x20global\x20*\x20or\x20god\x20mode\x22>inherited</span></if></div><span\x20class=\x22tf-env-remove\x22\x20@click=\x22removeGrantEnv(grantEntry.env)\x22>✕\x20remove</span></div><each\x20:of=\x22grantEntry.nGroups\x22\x20let:item=\x22nsGroup\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsGroup.ns\x20}}</span><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isNsWildInheritedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22nsGroup.ops\x22\x20let:item=\x22grantPerm\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20grantPerm.perm,\x20grantPerm)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20grantPerm.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20grantPerm.inherited\x20?\x20\x27tf-pill--inherited\x27\x20:\x20\x27\x27,\x20grantPerm.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantPerm(grantEntry.env,\x20nsGroup.ns,\x20grantPerm.op,\x20nsGroup.ops.map(o\x20=>\x20o.op))\x22>{{\x20grantPerm.op\x20}}<if\x20:=\x22grantPerm.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></div></each></div></if></if></if><if\x20:=\x22error\x22><div\x20class=\x22tf-error\x22>{{\x20error\x20}}</div></if><div\x20class=\x22tf-actions\x22><button\x20class=\x22tf-btn\x20tf-btn--secondary\x22\x20@click=\x22cancel()\x22\x20:disabled=\x22busy\x22>Cancel</button>\x20<button\x20class=\x22tf-btn\x20tf-btn--primary\x22\x20@click=\x22save()\x22\x20:disabled=\x22busy\x20||\x20!label.trim()\x22>Create\x20Token</button></div></if><if\x20:=\x22hoveredPermOp\x20&&\x20tooltipPos\x22><div\x20class=\x22tf-pip\x22\x20:style=\x22\x27left:\x27\x20+\x20tooltipPos.left\x20+\x20\x27px;\x20top:\x27\x20+\x20(tooltipPos.bottom\x20+\x204)\x20+\x20\x27px;\x27\x22><div\x20class=\x22tf-pip-perm\x22>{{\x20hoveredPermOp.perm\x20||\x20hoveredPerm\x20}}</div><if\x20:=\x22hoveredPermOp.summary\x22><div\x20class=\x22tf-pip-summary\x22>{{\x20hoveredPermOp.summary\x20}}</div></if><if\x20:=\x22hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length\x22><div\x20class=\x22tf-pip-routes-hd\x22>Routes\x20({{\x20hoveredPermOp.routes.length\x20}})</div><each\x20:of=\x22hoveredPermOp.routes\x22\x20let:item=\x22r\x22><div\x20class=\x22tf-pip-route\x22><span\x20class=\x22tf-pip-method\x22>{{\x20r.method\x20}}</span>\x20<span\x20class=\x22tf-pip-path\x22>{{\x20r.path\x20}}</span><if\x20:=\x22r.destructive\x22><span\x20class=\x22tf-pip-bd\x22>destructive</span></if><if\x20:=\x22r.longRunning\x22><span\x20class=\x22tf-pip-lr\x22>long</span></if></div><if\x20:=\x22r.summary\x22><div\x20class=\x22tf-pip-route-desc\x22>{{\x20r.summary\x20}}</div></if></each></if><if\x20:=\x22!(hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length)\x22><div\x20class=\x22tf-pip-gate\x22>Gate\x20—\x20combine\x20with\x20underlying\x20namespace\x20permissions.</div></if><if\x20:=\x22getImpliedBy(hoveredPerm).length\x22><div\x20class=\x22tf-pip-implied\x22>Implied\x20by:\x20{{\x20getImpliedBy(hoveredPerm).join(\x27,\x20\x27)\x20}}</div></if></div></if></div>','expiresAt','getBoundingClientRect','loadCatalog','var(--okdb-danger)','json','description','Environment','destructive','bottom','tooltipPos','busy','scope','entries','API','result','Token\x20copied\x20to\x20clipboard','length','gate','keys','password','includes','system','summary','grants','label','some','selectedPerms','hoveredPerm','localeCompare','now','permissions','1676463iVAVOi','POST','var(--okdb-success)','$ok','/auth/permissions','147YyNdvM','currentTarget','Failed\x20to\x20create\x20token','shared','success','env','test','validateForm','filter','.tf-header-fields,.tf-root,create-token-modal{display:flex;flex-direction:column}.tf-root{gap:0;width:520px;max-width:88vw;position:relative}.tf-header-fields{gap:12px;padding-bottom:16px}.tf-field,.tf-header-row{display:flex;gap:10px}.tf-field{flex-direction:column;gap:4px;min-width:0}.tf-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-section{display:flex;flex-direction:column;gap:8px;padding:10px\x2012px;border:1px\x20solid\x20var(--okdb-app-surface);border-radius:6px;background:rgba(0,0,0,.15)}.tf-creds-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4;margin-top:-4px}.tf-creds-row{display:flex;gap:10px}.tf-pw-wrap{position:relative;display:flex;align-items:center}.tf-pw-wrap\x20.tf-input{padding-right:30px}.tf-pw-eye{position:absolute;right:7px;background:0\x200;border:0;color:var(--okdb-app-fg-subtle);cursor:pointer;font-size:12px;padding:0;line-height:1;user-select:none}.tf-pw-eye:hover,.tf-scope-header:hover\x20.tf-scope-name{color:var(--okdb-accent-muted)}.tf-strength-bar{height:2px;border-radius:1px;background:var(--okdb-app-surface);margin-top:3px;overflow:hidden}.tf-strength-fill{height:100%;border-radius:1px;transition:width\x20.2s,background-color\x20.2s}.tf-strength-text{font-size:9px;margin-top:2px;text-transform:uppercase;letter-spacing:.05em}.tf-input{padding:6px\x208px;border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:4px;background:0\x200;color:var(--okdb-app-fg-strong);font-size:12px;font-family:monospace;width:100%;box-sizing:border-box}.tf-input:focus{outline:0;border-color:rgba(79,193,255,.4)}.tf-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-divider{height:1px;background:var(--okdb-app-surface);margin-bottom:12px}.tf-section{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.tf-scope-header{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none;padding:2px\x200}.tf-scope-name{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--okdb-app-fg-muted);font-weight:600;transition:color\x20.1s}.tf-scope-count{font-size:10px;color:var(--okdb-accent);opacity:.8}.tf-scope-chevron{margin-left:auto;font-size:10px;color:var(--okdb-app-fg-subtle)}.tf-ns-block{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.tf-ns-row{display:flex;align-items:baseline;gap:8px}.tf-ns-label{font-size:11px;color:var(--okdb-app-fg-subtle);font-family:monospace;flex-shrink:0;cursor:pointer;user-select:none;transition:color\x20.1s;font-weight:600}.tf-ns-label:hover{color:var(--okdb-accent-muted)}.tf-ns-label--on{color:var(--okdb-accent)}.tf-ns-desc{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-pills{display:flex;flex-wrap:wrap;gap:4px;padding-left:4px}.tf-pill-wrap{display:inline-flex}.tf-pill-warn{font-size:7px;color:rgba(215,150,60,.85);vertical-align:super;margin-left:1px;line-height:0}.tf-pill--destructive{border-color:rgba(200,140,60,.35)}.tf-pill--destructive:hover{border-color:rgba(200,140,60,.6)}.tf-pill{display:inline-flex;align-items:center;padding:2px\x208px;border-radius:4px;font-size:11px;font-family:monospace;border:1px\x20solid\x20var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;transition:background\x20.1s,border-color\x20.1s,color\x20.1s;white-space:nowrap}.tf-pill:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-pill--on{background:rgba(79,193,255,.1);border-color:rgba(79,193,255,.35);color:var(--okdb-accent)}.tf-pill--on:hover{background:rgba(79,193,255,.15)}.tf-pill--full{border-color:rgba(251,191,36,.2);color:#5a4a20}.tf-pill--full-on,.tf-pill--full:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--full-on{background:rgba(251,191,36,.1)}.tf-pill--full-on:hover{background:rgba(251,191,36,.16)}.tf-pill--add{border-style:dashed;border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-pill--add:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted);border-style:solid}.tf-pill--wild{border-color:rgba(251,191,36,.2);color:#5a4a20;font-weight:700}.tf-pill--wild-on,.tf-pill--wild:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--wild-on{background:rgba(251,191,36,.1);font-weight:700}.tf-pill--wild-on:hover{background:rgba(251,191,36,.16)}.tf-pill--wild-inherited{border-style:dashed;border-color:rgba(251,191,36,.45);color:rgba(251,191,36,.6);background:rgba(251,191,36,.05);font-weight:700}.tf-pill--wild-inherited:hover{border-color:rgba(251,191,36,.65);color:rgba(251,191,36,.8);background:rgba(251,191,36,.09)}.tf-pill--inherited{border-style:dashed;border-color:rgba(79,193,255,.5);color:rgba(79,193,255,.65);background:rgba(79,193,255,.06)}.tf-pill--inherited:hover{border-color:rgba(79,193,255,.7);color:rgba(79,193,255,.85);background:rgba(79,193,255,.1)}.tf-env-row{display:flex;flex-direction:column;gap:6px;padding:8px\x200\x2010px;border-top:1px\x20solid\x20var(--okdb-app-bg)}.tf-env-row-header{display:flex;align-items:center;justify-content:space-between}.tf-env-name{font-size:11px;font-weight:600;color:var(--okdb-app-fg-muted);font-family:monospace}.tf-env-all,.tf-env-remove{font-size:10px;color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;padding:1px\x204px;transition:color\x20.1s}.tf-env-remove:hover{color:var(--okdb-danger)}.tf-env-all:hover{color:var(--okdb-accent-muted)}.tf-env-all--on{color:var(--okdb-warning-text)}.tf-env-all--on:hover{color:var(--okdb-warning)}.tf-token-box{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px\x20solid\x20rgba(79,193,255,.2);border-radius:6px;background:rgba(79,193,255,.03)}.tf-token-warn{font-size:11px;color:var(--okdb-warning-text);line-height:1.5}.tf-token-value{font-family:monospace;font-size:11px;color:var(--okdb-accent);word-break:break-all;padding:8px;background:rgba(0,0,0,.3);border-radius:4px;border:1px\x20solid\x20rgba(79,193,255,.15);cursor:text;user-select:all}.tf-error{font-size:11px;color:var(--okdb-danger);padding:6px\x200\x200}.tf-actions{display:flex;gap:8px;justify-content:flex-end;padding-top:14px;margin-top:4px;border-top:1px\x20solid\x20var(--okdb-app-surface)}.tf-btn{padding:5px\x2012px;border-radius:5px;font-size:12px;border:1px\x20solid;background:0\x200;cursor:pointer;transition:background\x20.12s,color\x20.12s}.tf-btn:disabled{opacity:.4;cursor:not-allowed}.tf-btn--primary{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-btn--primary:not(:disabled):hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border);color:var(--okdb-sky)}.tf-btn--secondary{border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-btn--secondary:hover{background:var(--okdb-app-bg)}.tf-pip{position:fixed;z-index:9999;min-width:260px;max-width:460px;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:5px;padding:8px\x2010px;box-shadow:0\x204px\x2018px\x20rgba(0,0,0,.75);pointer-events:none;white-space:normal;font-size:11px}.tf-pip-perm{font-family:monospace;font-size:10px;color:var(--okdb-accent);margin-bottom:3px}.tf-pip-summary{color:var(--okdb-accent-muted);line-height:1.4;margin-bottom:5px}.tf-pip-routes-hd{font-size:9px;color:var(--okdb-app-fg-subtle);text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}.tf-pip-route{display:flex;align-items:baseline;gap:5px;padding:1px\x200}.tf-pip-method{font-family:monospace;font-size:9px;color:var(--okdb-accent);width:34px;flex-shrink:0}.tf-pip-path{font-family:monospace;font-size:10px;color:var(--okdb-accent-muted);word-break:break-all}.tf-pip-bd,.tf-pip-lr{font-size:8px;border-radius:2px;padding:0\x203px;flex-shrink:0}.tf-pip-bd{color:var(--okdb-danger);background:rgba(180,50,40,.15)}.tf-pip-lr{color:var(--okdb-app-fg-muted);background:rgba(100,100,100,.12)}.tf-pip-route-desc{font-size:9px;color:var(--okdb-app-fg-subtle);padding-left:39px;margin-bottom:1px}.tf-pip-gate,.tf-pip-implied{color:var(--okdb-app-fg-subtle);font-size:10px}.tf-pip-implied{margin-top:5px;font-size:9px;font-family:monospace}','data','name','Token\x20label\x20is\x20required'];_0x2fbf=function(){return _0x5110d4;};return _0x2fbf();}
1
+ const _0x4cef19=_0x52b1;function _0x4e57(){const _0x3b27ce=['10016QzZiIU','label','collapsedScopes','/auth/tokens','token','work','namespaces','test','length','611394SZALEO','indexOf','env','26776FkxTXc','application/json','catalogError','sort','success','clipboard','ADMIN_API','ttl','opOrder','query','1325286JaTkzi','run','var(--okdb-warning)','weak','Failed\x20to\x20create\x20token','isNsAllSelectedForGrant','165ewaeUb','operations','result','var(--okdb-danger)','close','validateForm','selectedPerms','write','godMode','shared','Gate','json','permissions','gate','grants','keys','map','showToken','System','<div\x20class=\x22tf-root\x22><if\x20:=\x22busy\x20&&\x20!showToken\x22><ok-overlay><div\x20class=\x22loader-center\x22><ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:28px;height:28px;\x22/></div></ok-overlay></if><if\x20:=\x22showToken\x20&&\x20createdToken\x22><div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:12px;\x22><div\x20style=\x22font-size:13px;\x20font-weight:600;\x20color:var(--okdb-success);\x22>✓\x20Token\x20Created</div><div\x20class=\x22tf-token-box\x22><div\x20class=\x22tf-token-warn\x22>⚠\x20Copy\x20this\x20token\x20now\x20—\x20it\x20will\x20not\x20be\x20shown\x20again.</div><div\x20class=\x22tf-token-value\x22>{{\x20createdToken.token\x20||\x20createdToken.value\x20||\x20createdToken\x20}}</div><div\x20style=\x22font-size:11px;\x20color:var(--okdb-app-fg-muted);\x22>{{\x20createdToken.label\x20||\x20\x27Unnamed\x27\x20}}</div></div><div\x20class=\x22tf-actions\x22><button\x20class=\x22tf-btn\x20tf-btn--primary\x22\x20@click=\x22copyToken()\x22>Copy\x20token</button>\x20<button\x20class=\x22tf-btn\x20tf-btn--secondary\x22\x20@click=\x22dismissToken()\x22>Done</button></div></div></if><if\x20:=\x22!showToken\x22><div\x20class=\x22tf-header-fields\x22><div\x20class=\x22tf-header-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:2;\x22><span\x20class=\x22tf-label\x22>Label</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22e.g.,\x20API\x20Client\x22\x20:value=\x22label\x22\x20@input=\x22label\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1.5;\x22><span\x20class=\x22tf-label\x22>Expires\x20<span\x20style=\x22opacity:.4;\x22>(optional)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22datetime-local\x22\x20:value=\x22expiresAt\x22\x20@input=\x22expiresAt\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div></div><div\x20class=\x22tf-creds-section\x22><div><div\x20class=\x22tf-creds-label\x22>Login\x20credentials\x20<span\x20style=\x22opacity:.4;\x20text-transform:none;\x20font-weight:400;\x20letter-spacing:0;\x22>(optional)</span></div><div\x20class=\x22tf-creds-hint\x22>If\x20set,\x20this\x20token\x20can\x20also\x20be\x20used\x20via\x20username\x20+\x20password\x20authentication.</div></div><div\x20class=\x22tf-creds-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Username</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22leave\x20blank\x20for\x20token-only\x22\x20:value=\x22name\x22\x20@input=\x22name\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22\x20autocomplete=\x22off\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Password</span><div\x20class=\x22tf-pw-wrap\x22><input\x20class=\x22tf-input\x22\x20:type=\x22showPassword\x20?\x20\x27text\x27\x20:\x20\x27password\x27\x22\x20placeholder=\x22required\x20if\x20username\x20is\x20set\x22\x20:value=\x22password\x22\x20@input=\x22password\x20=\x20$el.value\x22\x20:disabled=\x22busy\x20||\x20!name\x22\x20autocomplete=\x22new-password\x22>\x20<button\x20class=\x22tf-pw-eye\x22\x20@click=\x22toggleShowPassword()\x22\x20type=\x22button\x22\x20tabindex=\x22-1\x22>{{\x20showPassword\x20?\x20\x27🙈\x27\x20:\x20\x27👁\x27\x20}}</button></div><if\x20:=\x22password\x22><div\x20class=\x22tf-strength-bar\x22><div\x20class=\x22tf-strength-fill\x22\x20:style=\x22\x27width:\x27\x20+\x20(passwordStrength(password)/5*100)\x20+\x20\x27%;\x20background:\x27\x20+\x20passwordStrengthColor(password)\x22/></div><div\x20class=\x22tf-strength-text\x22\x20:style=\x22\x27color:\x27\x20+\x20passwordStrengthColor(password)\x22>{{\x20passwordStrengthLabel(password)\x20}}</div></if></div></div></div></div><div\x20class=\x22tf-divider\x22/><if\x20:=\x22catalogLoading\x22><div\x20class=\x22tf-hint\x22\x20style=\x22padding-bottom:12px;\x22>Loading\x20permissions…</div></if><if\x20:=\x22catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22><span\x20class=\x22tf-label\x22>Permissions\x20<span\x20style=\x22color:var(--okdb-danger);\x22>(fallback)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22data:read,\x20data:write\x22\x20:value=\x22selectedPerms._fallback\x20||\x20\x27\x27\x22\x20@input=\x22selectedPerms\x20=\x20{\x20_fallback:\x20$el.value\x20}\x22\x20:disabled=\x22busy\x22>\x20<span\x20class=\x22tf-hint\x22>Comma-separated\x20permission\x20strings</span></div></if><if\x20:=\x22catalog\x20&&\x20!catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22\x20style=\x22gap:4px;\x22><div\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--full\x27,\x20godMode\x20?\x20\x27tf-pill--full-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGodMode()\x22\x20style=\x22width:fit-content;\x22>★\x20&nbsp;Full\x20access\x20—\x20all\x20permissions</div></div><if\x20:=\x22!godMode\x22><each\x20:of=\x22getPermSections()\x22\x20let:item=\x22section\x22><div\x20class=\x22tf-section\x22><div\x20class=\x22tf-scope-header\x22\x20@click=\x22toggleScope(section.scope)\x22><span\x20class=\x22tf-scope-name\x22>{{\x20section.label\x20}}</span><if\x20:=\x22scopeSelectionCount(section)\x22><span\x20class=\x22tf-scope-count\x22>{{\x20scopeSelectionCount(section)\x20}}</span></if><span\x20class=\x22tf-scope-chevron\x22>{{\x20isCollapsed(section.scope)\x20?\x20\x27▸\x27\x20:\x20\x27▾\x27\x20}}</span></div><if\x20:=\x22!isCollapsed(section.scope)\x22><each\x20:of=\x22section.namespaces\x22\x20let:item=\x22nsEntry\x22><div\x20class=\x22tf-ns-block\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsEntry.nsLabel\x20||\x20nsEntry.ns\x20}}</span><if\x20:=\x22nsEntry.nsDescription\x22><span\x20class=\x22tf-ns-desc\x22>{{\x20nsEntry.nsDescription\x20}}</span></if></div><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22getPermOps(nsEntry.ns,\x20nsEntry.operations,\x20nsEntry.operationMeta)\x22\x20let:item=\x22permOp\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20permOp.perm,\x20permOp)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20permOp.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20\x27\x27,\x20permOp.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22togglePerm(permOp.ns,\x20permOp.op,\x20nsEntry.operations)\x22>{{\x20permOp.op\x20}}<if\x20:=\x22permOp.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></if></div></each><if\x20:=\x22catalog.envs\x20&&\x20catalog.envs.length\x20>\x200\x22><div\x20class=\x22tf-divider\x22/><div\x20class=\x22tf-section\x22\x20style=\x22gap:8px;\x22><div\x20class=\x22tf-scope-header\x22\x20style=\x22cursor:default;\x20pointer-events:none;\x22><span\x20class=\x22tf-scope-name\x22>Per-env\x20grants</span>\x20<span\x20class=\x22tf-hint\x22\x20style=\x22margin-left:6px;\x22>extra\x20permissions\x20for\x20a\x20specific\x20environment</span></div><if\x20:=\x22availableGrantEnvs().length\x20>\x200\x22><div\x20class=\x22tf-pills\x22><each\x20:of=\x22availableGrantEnvs()\x22\x20let:item=\x22envName\x22><span\x20class=\x22tf-pill\x20tf-pill--add\x22\x20@click=\x22addGrantEnv(envName)\x22>+\x20{{\x20envName\x20}}</span></each></div></if><each\x20:of=\x22getGrantEntries()\x22\x20let:item=\x22grantEntry\x22><div\x20class=\x22tf-env-row\x22><div\x20class=\x22tf-env-row-header\x22><div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22><span\x20class=\x22tf-env-name\x22>{{\x20grantEntry.env\x20}}</span>\x20<span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isEnvAllSelected(grantEntry.env)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isEnvWildInherited(grantEntry.env)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantAllPerms(grantEntry.env)\x22\x20title=\x22*\x20—\x20all\x20permissions\x20for\x20this\x20env\x22\x20style=\x22font-size:11px;\x20padding:1px\x206px;\x22>*</span><if\x20:=\x22grantEntry.globalCoverAll\x22><span\x20class=\x22tf-hint\x22\x20style=\x22color:rgba(79,193,255,.35);\x22\x20title=\x22All\x20permissions\x20already\x20covered\x20by\x20global\x20*\x20or\x20god\x20mode\x22>inherited</span></if></div><span\x20class=\x22tf-env-remove\x22\x20@click=\x22removeGrantEnv(grantEntry.env)\x22>✕\x20remove</span></div><each\x20:of=\x22grantEntry.nGroups\x22\x20let:item=\x22nsGroup\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsGroup.ns\x20}}</span><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isNsWildInheritedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22nsGroup.ops\x22\x20let:item=\x22grantPerm\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20grantPerm.perm,\x20grantPerm)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20grantPerm.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20grantPerm.inherited\x20?\x20\x27tf-pill--inherited\x27\x20:\x20\x27\x27,\x20grantPerm.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantPerm(grantEntry.env,\x20nsGroup.ns,\x20grantPerm.op,\x20nsGroup.ops.map(o\x20=>\x20o.op))\x22>{{\x20grantPerm.op\x20}}<if\x20:=\x22grantPerm.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></div></each></div></if></if></if><if\x20:=\x22error\x22><div\x20class=\x22tf-error\x22>{{\x20error\x20}}</div></if><div\x20class=\x22tf-actions\x22><button\x20class=\x22tf-btn\x20tf-btn--secondary\x22\x20@click=\x22cancel()\x22\x20:disabled=\x22busy\x22>Cancel</button>\x20<button\x20class=\x22tf-btn\x20tf-btn--primary\x22\x20@click=\x22save()\x22\x20:disabled=\x22busy\x20||\x20!label.trim()\x22>Create\x20Token</button></div></if><if\x20:=\x22hoveredPermOp\x20&&\x20tooltipPos\x22><div\x20class=\x22tf-pip\x22\x20:style=\x22\x27left:\x27\x20+\x20tooltipPos.left\x20+\x20\x27px;\x20top:\x27\x20+\x20(tooltipPos.bottom\x20+\x204)\x20+\x20\x27px;\x27\x22><div\x20class=\x22tf-pip-perm\x22>{{\x20hoveredPermOp.perm\x20||\x20hoveredPerm\x20}}</div><if\x20:=\x22hoveredPermOp.summary\x22><div\x20class=\x22tf-pip-summary\x22>{{\x20hoveredPermOp.summary\x20}}</div></if><if\x20:=\x22hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length\x22><div\x20class=\x22tf-pip-routes-hd\x22>Routes\x20({{\x20hoveredPermOp.routes.length\x20}})</div><each\x20:of=\x22hoveredPermOp.routes\x22\x20let:item=\x22r\x22><div\x20class=\x22tf-pip-route\x22><span\x20class=\x22tf-pip-method\x22>{{\x20r.method\x20}}</span>\x20<span\x20class=\x22tf-pip-path\x22>{{\x20r.path\x20}}</span><if\x20:=\x22r.destructive\x22><span\x20class=\x22tf-pip-bd\x22>destructive</span></if><if\x20:=\x22r.longRunning\x22><span\x20class=\x22tf-pip-lr\x22>long</span></if></div><if\x20:=\x22r.summary\x22><div\x20class=\x22tf-pip-route-desc\x22>{{\x20r.summary\x20}}</div></if></each></if><if\x20:=\x22!(hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length)\x22><div\x20class=\x22tf-pip-gate\x22>Gate\x20—\x20combine\x20with\x20underlying\x20namespace\x20permissions.</div></if><if\x20:=\x22getImpliedBy(hoveredPerm).length\x22><div\x20class=\x22tf-pip-implied\x22>Implied\x20by:\x20{{\x20getImpliedBy(hoveredPerm).join(\x27,\x20\x27)\x20}}</div></if></div></if></div>','fair','password','message','catalog','132668mEoKhF','error','stringify','split','tooltipPos','hoveredPermOp','$ok','destructive','busy','read','bottom','createdToken','routes','expiresAt','POST','data','959BLAPba','API','localeCompare','system','1790604jaiQgq','now','Token\x20label\x20is\x20required','filter','loadCatalog','showPassword','modal','getBoundingClientRect','then','transparent','trim','envs','_fallback','hoveredPerm','onDone','strong','scope','$attr','catch','Token\x20copied\x20to\x20clipboard','entries','includes','currentTarget','isEnvAllSelected','left','toast','some','332469nPNXmj','getTime','passwordStrength','catalogLoading','name','writeText'];_0x4e57=function(){return _0x3b27ce;};return _0x4e57();}(function(_0x2625e8,_0x2d0d87){const _0x82c656=_0x52b1,_0x19b077=_0x2625e8();while(!![]){try{const _0x7219b3=parseInt(_0x82c656(0xdb))/0x1+parseInt(_0x82c656(0xac))/0x2+-parseInt(_0x82c656(0x81))/0x3+parseInt(_0x82c656(0x84))/0x4*(-parseInt(_0x82c656(0x94))/0x5)+parseInt(_0x82c656(0x8e))/0x6+parseInt(_0x82c656(0xbc))/0x7*(parseInt(_0x82c656(0xe1))/0x8)+-parseInt(_0x82c656(0xc0))/0x9;if(_0x7219b3===_0x2d0d87)break;else _0x19b077['push'](_0x19b077['shift']());}catch(_0x377b92){_0x19b077['push'](_0x19b077['shift']());}}}(_0x4e57,0x28e80));import _0x1b9311 from'@toolkit/elements/ok-icon.ok.js';import _0x548e06 from'@toolkit/core/ok-overlay.ok.js';function _0x52b1(_0x21b160,_0x4ebf17){_0x21b160=_0x21b160-0x7a;const _0x4e5726=_0x4e57();let _0x52b1a2=_0x4e5726[_0x21b160];return _0x52b1a2;}export default{'tag':'create-token-modal','dependencies':[_0x548e06,_0x1b9311],'attr':{'modal':{},'onDone':{}},'context':_0x57fb72=>({'busy':!0x1,'showToken':!0x1,'createdToken':null,'error':null,'label':'','name':'','password':'','showPassword':!0x1,'expiresAt':'','catalog':null,'catalogError':!0x1,'catalogLoading':!0x1,'godMode':!0x1,'selectedPerms':{},'grants':{},'collapsedScopes':{},'hoveredPerm':null,'hoveredPermOp':null,'tooltipPos':null,'setHover'(_0x351e7a,_0x8bbe49,_0x1f3939){const _0x4e5b9a=_0x52b1,_0x57ce52=_0x351e7a[_0x4e5b9a(0xd6)][_0x4e5b9a(0xc7)]();this[_0x4e5b9a(0xcd)]=_0x8bbe49,this[_0x4e5b9a(0xb1)]=_0x1f3939;const _0x46ae2a=_0x57ce52;this[_0x4e5b9a(0xb0)]={'left':_0x46ae2a[_0x4e5b9a(0xd8)],'bottom':_0x46ae2a[_0x4e5b9a(0xb6)]};},'clearHover'(){const _0x2ba152=_0x52b1;this[_0x2ba152(0xcd)]=null,this[_0x2ba152(0xb1)]=null,this['tooltipPos']=null;},async 'loadCatalog'(){const _0x3ab83b=_0x52b1;this[_0x3ab83b(0xde)]=!0x0;try{const _0x5c6ee5=await fetch(__ENV__[_0x3ab83b(0x8a)]+'/auth/permissions');if(!_0x5c6ee5['ok'])throw new Error('Failed');const _0x450ce6=await _0x5c6ee5['json']();this[_0x3ab83b(0xab)]=_0x450ce6[_0x3ab83b(0xbb)]??_0x450ce6[_0x3ab83b(0x96)];}catch{this[_0x3ab83b(0x86)]=!0x0;}finally{this[_0x3ab83b(0xde)]=!0x1;}},'togglePerm'(_0xadf08d,_0x306730,_0x19ce8a){const _0x25d7f5=_0x52b1;if(this[_0x25d7f5(0x9c)])return;const _0x4490e9=_0xadf08d+':*';if(this[_0x25d7f5(0x9a)][_0x4490e9]){const _0x511352={...this['selectedPerms']};delete _0x511352[_0x4490e9];for(const _0x3bd3cc of _0x19ce8a)_0x3bd3cc!==_0x306730&&(_0x511352[_0xadf08d+':'+_0x3bd3cc]=!0x0);this[_0x25d7f5(0x9a)]=_0x511352;}else this[_0x25d7f5(0x9a)]={...this['selectedPerms'],[_0xadf08d+':'+_0x306730]:!this[_0x25d7f5(0x9a)][_0xadf08d+':'+_0x306730]};},'toggleGodMode'(){const _0x33b571=_0x52b1;this[_0x33b571(0x9c)]=!this[_0x33b571(0x9c)],this[_0x33b571(0x9c)]&&(this[_0x33b571(0x9a)]={});},'toggleNamespace'(_0x596379,_0x4ffb11){const _0x17292a=_0x52b1;if(this[_0x17292a(0x9c)])return;const _0x394ec3=_0x596379+':*',_0x60be4b={...this[_0x17292a(0x9a)]};if(_0x60be4b[_0x394ec3])delete _0x60be4b[_0x394ec3];else{for(const _0xd6091e of _0x4ffb11)delete _0x60be4b[_0x596379+':'+_0xd6091e];_0x60be4b[_0x394ec3]=!0x0;}this['selectedPerms']=_0x60be4b;},'toggleScope'(_0x57b5bd){const _0x522824=_0x52b1;this[_0x522824(0x7a)]={...this[_0x522824(0x7a)],[_0x57b5bd]:!this[_0x522824(0x7a)][_0x57b5bd]};},'isCollapsed'(_0x36e278){const _0x1359cb=_0x52b1;return!!this[_0x1359cb(0x7a)][_0x36e278];},'scopeSelectionCount'(_0x300d73){const _0x121ddd=_0x52b1;let _0x28a25f=0x0,_0x50ac38=0x0;for(const _0x2e66f8 of _0x300d73[_0x121ddd(0x7e)])for(const _0x58161e of _0x2e66f8[_0x121ddd(0x95)])_0x50ac38++,(this['selectedPerms'][_0x2e66f8['ns']+':'+_0x58161e]||this['selectedPerms'][_0x2e66f8['ns']+':*'])&&_0x28a25f++;return _0x28a25f>0x0?_0x28a25f+'/'+_0x50ac38:'';},'addGrantEnv'(_0x2d445f){const _0x470cd5=_0x52b1;_0x2d445f&&!this[_0x470cd5(0xa2)][_0x2d445f]&&(this[_0x470cd5(0xa2)]={...this[_0x470cd5(0xa2)],[_0x2d445f]:{}});},'removeGrantEnv'(_0x45fe16){const _0x4c7cd1=_0x52b1,_0x28be73={...this[_0x4c7cd1(0xa2)]};delete _0x28be73[_0x45fe16],this[_0x4c7cd1(0xa2)]=_0x28be73;},'availableGrantEnvs'(){const _0x3c17ac=_0x52b1;return this['catalog']?.['envs']?this[_0x3c17ac(0xab)][_0x3c17ac(0xcb)][_0x3c17ac(0xc3)](_0x4c6cf2=>!this[_0x3c17ac(0xa2)][_0x4c6cf2]):[];},'getPermSections'(){const _0xb00013=_0x52b1;if(!this['catalog']?.[_0xb00013(0x7e)])return[];const _0x58675b=this['catalog'][_0xb00013(0x8c)]||[_0xb00013(0xb5),'query','run','write',_0xb00013(0x7d),'peer'];return[{'scope':_0xb00013(0x83),'label':'Environment'},{'scope':_0xb00013(0xbf),'label':_0xb00013(0xa6)},{'scope':_0xb00013(0xa1),'label':_0xb00013(0x9e)}]['map'](_0x9a09d5=>({'scope':_0x9a09d5['scope'],'label':_0x9a09d5[_0xb00013(0xe2)],'namespaces':Object[_0xb00013(0xd4)](this[_0xb00013(0xab)]['namespaces'])['filter'](([,_0x550e05])=>_0x550e05[_0xb00013(0xd0)]===_0x9a09d5[_0xb00013(0xd0)])[_0xb00013(0xa4)](([_0x265be6,_0x600701])=>({'ns':_0x265be6,'nsLabel':_0x600701[_0xb00013(0xe2)],'nsDescription':_0x600701['description'],'operations':Object['keys'](_0x600701[_0xb00013(0x95)])[_0xb00013(0x87)]((_0x4db96e,_0x1e2c3c)=>{const _0xcdc768=_0xb00013,_0x1c8689=_0x58675b[_0xcdc768(0x82)](_0x4db96e),_0x2cdb7d=_0x58675b['indexOf'](_0x1e2c3c);return-0x1===_0x1c8689&&-0x1===_0x2cdb7d?_0x4db96e['localeCompare'](_0x1e2c3c):-0x1===_0x1c8689?0x1:-0x1===_0x2cdb7d?-0x1:_0x1c8689-_0x2cdb7d;}),'operationMeta':_0x600701[_0xb00013(0x95)]}))}))[_0xb00013(0xc3)](_0x3445f4=>_0x3445f4['namespaces']['length']>0x0);},'getPermOps'(_0x4ba369,_0x3ce660,_0x370813){const _0x5f0e9e=_0x52b1;return _0x3ce660[_0x5f0e9e(0xa4)](_0x44524e=>{const _0xccc341=_0x5f0e9e,_0x38b0cd=_0x370813?.[_0x44524e]||{},_0x53346b=_0x38b0cd[_0xccc341(0xb8)]||[];return{'ns':_0x4ba369,'op':_0x44524e,'perm':_0x4ba369+':'+_0x44524e,'summary':_0x38b0cd['summary']||'','routes':_0x53346b,'hasDestructive':_0x53346b[_0xccc341(0xda)](_0x4d05fb=>_0x4d05fb[_0xccc341(0xb3)]),'checked':!!this[_0xccc341(0x9a)][_0x4ba369+':'+_0x44524e]||!!this[_0xccc341(0x9a)][_0x4ba369+':*']};});},'getImpliedBy'(_0xe0bf42){const _0x8fcf37=_0x52b1,_0x8e0aa6=this[_0x8fcf37(0xab)]?.['implies']||{};return Object[_0x8fcf37(0xd4)](_0x8e0aa6)[_0x8fcf37(0xc3)](([,_0x13a81b])=>_0x13a81b[_0x8fcf37(0xd5)](_0xe0bf42))['map'](([_0x39b417])=>_0x39b417);},'getGrantEntries'(){const _0x2b8b75=_0x52b1;if(!this[_0x2b8b75(0xab)]?.[_0x2b8b75(0x7e)])return[];const _0x1d7e4d=this[_0x2b8b75(0xab)][_0x2b8b75(0x8c)]||[_0x2b8b75(0xb5),_0x2b8b75(0x8d),_0x2b8b75(0x8f),_0x2b8b75(0x9b),_0x2b8b75(0x7d),'peer'],_0x4fdab8=Object[_0x2b8b75(0xd4)](this['catalog'][_0x2b8b75(0x7e)])['filter'](([,_0x594e82])=>'env'===_0x594e82[_0x2b8b75(0xd0)])[_0x2b8b75(0xa4)](([_0x1d4568,_0x57ad3d])=>({'ns':_0x1d4568,'operations':Object[_0x2b8b75(0xa3)](_0x57ad3d[_0x2b8b75(0x95)])[_0x2b8b75(0x87)]((_0x4b7538,_0x2d670b)=>{const _0x5b372c=_0x2b8b75,_0x3a3c6d=_0x1d7e4d[_0x5b372c(0x82)](_0x4b7538),_0x257528=_0x1d7e4d['indexOf'](_0x2d670b);return-0x1===_0x3a3c6d&&-0x1===_0x257528?_0x4b7538[_0x5b372c(0xbe)](_0x2d670b):-0x1===_0x3a3c6d?0x1:-0x1===_0x257528?-0x1:_0x3a3c6d-_0x257528;})})),_0x4a6cfb=this['selectedPerms'],_0xc85fd1=this[_0x2b8b75(0x9c)];return Object[_0x2b8b75(0xd4)](this[_0x2b8b75(0xa2)])[_0x2b8b75(0xa4)](([_0x15304b,_0x59bfe7])=>({'env':_0x15304b,'globalCoverAll':_0xc85fd1||!!_0x4a6cfb['*'],'nGroups':_0x4fdab8[_0x2b8b75(0xa4)](({ns:_0x51e59e,operations:_0x37b24b})=>({'ns':_0x51e59e,'ops':_0x37b24b[_0x2b8b75(0xa4)](_0x37f66b=>{const _0x41fe13=_0x2b8b75,_0xeae53f=_0x51e59e+':'+_0x37f66b,_0x5ad7b5=!!_0x59bfe7[_0xeae53f]||!!_0x59bfe7[_0x51e59e+':*']||!!_0x59bfe7['*'],_0x4e3fce=!_0x5ad7b5&&(_0xc85fd1||!!_0x4a6cfb['*']||!!_0x4a6cfb[_0x51e59e+':*']||!!_0x4a6cfb[_0xeae53f]),_0x29fd97=this[_0x41fe13(0xab)]['namespaces'][_0x51e59e]?.['operations']?.[_0x37f66b]||{};return{'perm':_0xeae53f,'op':_0x37f66b,'summary':_0x29fd97['summary']||'','routes':_0x29fd97[_0x41fe13(0xb8)]||[],'hasDestructive':(_0x29fd97[_0x41fe13(0xb8)]||[])[_0x41fe13(0xda)](_0x10b2dd=>_0x10b2dd[_0x41fe13(0xb3)]),'checked':_0x5ad7b5,'inherited':_0x4e3fce};})}))}));},'isNsAllSelected'(_0x5f1bb){const _0x531d01=_0x52b1;return!!this[_0x531d01(0x9a)][_0x5f1bb+':*'];},'isEnvAllSelected'(_0x6fbe48){const _0x14a15f=_0x52b1;return!!this[_0x14a15f(0xa2)][_0x6fbe48]?.['*'];},'isEnvWildInherited'(_0x141741){const _0x3f2ce0=_0x52b1;return!this[_0x3f2ce0(0xd7)](_0x141741)&&(this[_0x3f2ce0(0x9c)]||!!this[_0x3f2ce0(0x9a)]['*']);},'isNsAllSelectedForGrant'(_0x46f8e8,_0x6f481c){const _0x21f3eb=_0x52b1;return!!this[_0x21f3eb(0xa2)][_0x46f8e8]?.['*']||!!this[_0x21f3eb(0xa2)][_0x46f8e8]?.[_0x6f481c+':*'];},'isNsWildInheritedForGrant'(_0x224544,_0x11eb50){const _0x608d=_0x52b1;return!this[_0x608d(0x93)](_0x224544,_0x11eb50)&&(this[_0x608d(0x9c)]||!!this[_0x608d(0x9a)]['*']||!!this[_0x608d(0x9a)][_0x11eb50+':*']);},'toggleGrantPerm'(_0x3d7b9b,_0x496064,_0x38ba5c,_0x506f1f){const _0x28f0de=_0x52b1,_0x2b2e6f=_0x496064+':'+_0x38ba5c,_0x2e1b8e=_0x496064+':*',_0x41ea94={...this['grants'][_0x3d7b9b]||{}};if(_0x41ea94['*'])delete _0x41ea94['*'];else{if(_0x41ea94[_0x2e1b8e]){delete _0x41ea94[_0x2e1b8e];for(const _0xbe6865 of _0x506f1f)_0xbe6865!==_0x38ba5c&&(_0x41ea94[_0x496064+':'+_0xbe6865]=!0x0);}else _0x41ea94[_0x2b2e6f]=!_0x41ea94[_0x2b2e6f];}this[_0x28f0de(0xa2)]={...this[_0x28f0de(0xa2)],[_0x3d7b9b]:_0x41ea94};},'toggleGrantNamespace'(_0x7a69fc,_0x216b3b,_0x140631){const _0x338080=_0x52b1,_0x3c0f09=_0x216b3b+':*',_0x5dcc8b={...this['grants'][_0x7a69fc]||{}};if(_0x5dcc8b['*'])delete _0x5dcc8b['*'];else{if(_0x5dcc8b[_0x3c0f09])delete _0x5dcc8b[_0x3c0f09];else{for(const _0x27bd01 of _0x140631)delete _0x5dcc8b[_0x27bd01['perm']];_0x5dcc8b[_0x3c0f09]=!0x0;}}this[_0x338080(0xa2)]={...this[_0x338080(0xa2)],[_0x7a69fc]:_0x5dcc8b};},'toggleGrantAllPerms'(_0x4d1bc8){const _0x57eaad=_0x52b1,_0x4dd9a7=this[_0x57eaad(0xa2)][_0x4d1bc8]||{};if(_0x4dd9a7['*']){const _0xa7ddd3={..._0x4dd9a7};delete _0xa7ddd3['*'],this[_0x57eaad(0xa2)]={...this[_0x57eaad(0xa2)],[_0x4d1bc8]:_0xa7ddd3};}else this['grants']={...this[_0x57eaad(0xa2)],[_0x4d1bc8]:{'*':!0x0}};},'validateForm'(){const _0x4d3108=_0x52b1;if(!this[_0x4d3108(0xe2)][_0x4d3108(0xca)]())throw new Error(_0x4d3108(0xc2));return!0x0;},async 'save'(){const _0x15b4da=_0x52b1;this[_0x15b4da(0xad)]=null;try{this[_0x15b4da(0x99)](),this['busy']=!0x0;const _0x54e74e={'label':this['label']['trim']()};if(this[_0x15b4da(0xb9)]){const _0x3a1006=new Date(this[_0x15b4da(0xb9)])[_0x15b4da(0xdc)]();_0x3a1006>Date[_0x15b4da(0xc1)]()&&(_0x54e74e[_0x15b4da(0x8b)]=_0x3a1006-Date['now']());}if(this[_0x15b4da(0x9c)])_0x54e74e[_0x15b4da(0xa0)]=['*'];else{if(this[_0x15b4da(0x86)]&&void 0x0!==this[_0x15b4da(0x9a)][_0x15b4da(0xcc)]){const _0x59c012=String(this[_0x15b4da(0x9a)]['_fallback']||'')[_0x15b4da(0xaf)](',')[_0x15b4da(0xa4)](_0x45ab76=>_0x45ab76[_0x15b4da(0xca)]())[_0x15b4da(0xc3)](_0x5599bd=>_0x5599bd);_0x59c012['length']&&(_0x54e74e['permissions']=_0x59c012);}else{const _0x290a57=Object[_0x15b4da(0xd4)](this[_0x15b4da(0x9a)])[_0x15b4da(0xc3)](([_0x2af830,_0x11d4e6])=>_0x11d4e6&&_0x15b4da(0xcc)!==_0x2af830)['map'](([_0x138553])=>_0x138553);_0x290a57['length']&&(_0x54e74e[_0x15b4da(0xa0)]=_0x290a57);}}const _0x4dab0f={};for(const [_0x39d7d5,_0x172ff8]of Object['entries'](this['grants'])){const _0x23af2d=Object[_0x15b4da(0xd4)](_0x172ff8)['filter'](([,_0x164a1d])=>_0x164a1d)[_0x15b4da(0xa4)](([_0x3c9e9e])=>_0x3c9e9e);_0x23af2d['length']&&(_0x4dab0f[_0x39d7d5]=_0x23af2d);}Object[_0x15b4da(0xa3)](_0x4dab0f)[_0x15b4da(0x80)]&&(_0x54e74e[_0x15b4da(0xa2)]=_0x4dab0f),this[_0x15b4da(0xdf)][_0x15b4da(0xca)]()&&(_0x54e74e[_0x15b4da(0xdf)]=this['name'][_0x15b4da(0xca)](),this[_0x15b4da(0xa9)]&&(_0x54e74e[_0x15b4da(0xa9)]=this['password']));const _0x1eaabe=await fetch(__ENV__[_0x15b4da(0xbd)]+_0x15b4da(0x7b),{'method':_0x15b4da(0xba),'headers':{'Content-Type':_0x15b4da(0x85)},'body':JSON[_0x15b4da(0xae)](_0x54e74e)});if(!_0x1eaabe['ok']){const _0x13dacf=await _0x1eaabe[_0x15b4da(0x9f)]();throw new Error(_0x13dacf?.[_0x15b4da(0xad)]?.['message']||_0x15b4da(0x92));}const _0x21c3a3=await _0x1eaabe['json']();this['createdToken']=_0x21c3a3[_0x15b4da(0xbb)]??_0x21c3a3,this[_0x15b4da(0xa5)]=!0x0;}catch(_0x3cc314){this[_0x15b4da(0xad)]=_0x3cc314?.[_0x15b4da(0xaa)]||String(_0x3cc314),_0x57fb72['$ok'][_0x15b4da(0x9d)]?.[_0x15b4da(0xd9)]?.[_0x15b4da(0xad)]?.(this[_0x15b4da(0xad)]);}finally{this[_0x15b4da(0xb4)]=!0x1;}},'copyToken'(){const _0x553d5e=_0x52b1;this['createdToken']?.['token']&&navigator[_0x553d5e(0x89)]?.[_0x553d5e(0xe0)](this[_0x553d5e(0xb7)][_0x553d5e(0x7c)])[_0x553d5e(0xc8)](()=>{const _0x3a8649=_0x553d5e;_0x57fb72[_0x3a8649(0xb2)][_0x3a8649(0x9d)]?.['toast']?.[_0x3a8649(0x88)]?.(_0x3a8649(0xd3));})[_0x553d5e(0xd2)](()=>{const _0x40dcdb=_0x553d5e;_0x57fb72[_0x40dcdb(0xb2)][_0x40dcdb(0x9d)]?.['toast']?.[_0x40dcdb(0xad)]?.('Failed\x20to\x20copy\x20token');});},'dismissToken'(){const _0x556826=_0x52b1;_0x57fb72[_0x556826(0xd1)][_0x556826(0xc6)][_0x556826(0x98)](),_0x57fb72[_0x556826(0xd1)][_0x556826(0xce)]?.(this[_0x556826(0xb7)]);},'cancel'(){const _0x10f4bd=_0x52b1;_0x57fb72['$attr'][_0x10f4bd(0xc6)]['close']();},'passwordStrength'(_0x442d65){const _0x4c3301=_0x52b1;if(!_0x442d65)return 0x0;let _0x29c7e9=0x0;return _0x442d65[_0x4c3301(0x80)]>=0x8&&_0x29c7e9++,_0x442d65[_0x4c3301(0x80)]>=0xe&&_0x29c7e9++,/[A-Z]/[_0x4c3301(0x7f)](_0x442d65)&&_0x29c7e9++,/[0-9]/[_0x4c3301(0x7f)](_0x442d65)&&_0x29c7e9++,/[^A-Za-z0-9]/['test'](_0x442d65)&&_0x29c7e9++,_0x29c7e9;},'passwordStrengthLabel'(_0x44b617){const _0x5e8eb3=_0x52b1,_0x1dbfd5=this[_0x5e8eb3(0xdd)](_0x44b617);return _0x44b617?_0x1dbfd5<=0x1?_0x5e8eb3(0x91):_0x1dbfd5<=0x3?_0x5e8eb3(0xa8):_0x5e8eb3(0xcf):'';},'passwordStrengthColor'(_0x100e8f){const _0x3d8167=_0x52b1,_0x35979a=this[_0x3d8167(0xdd)](_0x100e8f);return _0x100e8f?_0x35979a<=0x1?_0x3d8167(0x97):_0x35979a<=0x3?_0x3d8167(0x90):'var(--okdb-success)':_0x3d8167(0xc9);},'toggleShowPassword'(){const _0x26e414=_0x52b1;this[_0x26e414(0xc5)]=!this[_0x26e414(0xc5)];}}),'mount'(_0x33ce42){const _0x4970e4=_0x52b1;this[_0x4970e4(0xc4)]();},'style':'.tf-header-fields,.tf-root,create-token-modal{display:flex;flex-direction:column}.tf-root{gap:0;width:520px;max-width:88vw;position:relative}.tf-header-fields{gap:12px;padding-bottom:16px}.tf-field,.tf-header-row{display:flex;gap:10px}.tf-field{flex-direction:column;gap:4px;min-width:0}.tf-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-section{display:flex;flex-direction:column;gap:8px;padding:10px\x2012px;border:1px\x20solid\x20var(--okdb-app-surface);border-radius:6px;background:rgba(0,0,0,.15)}.tf-creds-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4;margin-top:-4px}.tf-creds-row{display:flex;gap:10px}.tf-pw-wrap{position:relative;display:flex;align-items:center}.tf-pw-wrap\x20.tf-input{padding-right:30px}.tf-pw-eye{position:absolute;right:7px;background:0\x200;border:0;color:var(--okdb-app-fg-subtle);cursor:pointer;font-size:12px;padding:0;line-height:1;user-select:none}.tf-pw-eye:hover,.tf-scope-header:hover\x20.tf-scope-name{color:var(--okdb-accent-muted)}.tf-strength-bar{height:2px;border-radius:1px;background:var(--okdb-app-surface);margin-top:3px;overflow:hidden}.tf-strength-fill{height:100%;border-radius:1px;transition:width\x20.2s,background-color\x20.2s}.tf-strength-text{font-size:9px;margin-top:2px;text-transform:uppercase;letter-spacing:.05em}.tf-input{padding:6px\x208px;border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:4px;background:0\x200;color:var(--okdb-app-fg-strong);font-size:12px;font-family:monospace;width:100%;box-sizing:border-box}.tf-input:focus{outline:0;border-color:rgba(79,193,255,.4)}.tf-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-divider{height:1px;background:var(--okdb-app-surface);margin-bottom:12px}.tf-section{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.tf-scope-header{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none;padding:2px\x200}.tf-scope-name{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--okdb-app-fg-muted);font-weight:600;transition:color\x20.1s}.tf-scope-count{font-size:10px;color:var(--okdb-accent);opacity:.8}.tf-scope-chevron{margin-left:auto;font-size:10px;color:var(--okdb-app-fg-subtle)}.tf-ns-block{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.tf-ns-row{display:flex;align-items:baseline;gap:8px}.tf-ns-label{font-size:11px;color:var(--okdb-app-fg-subtle);font-family:monospace;flex-shrink:0;cursor:pointer;user-select:none;transition:color\x20.1s;font-weight:600}.tf-ns-label:hover{color:var(--okdb-accent-muted)}.tf-ns-label--on{color:var(--okdb-accent)}.tf-ns-desc{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-pills{display:flex;flex-wrap:wrap;gap:4px;padding-left:4px}.tf-pill-wrap{display:inline-flex}.tf-pill-warn{font-size:7px;color:rgba(215,150,60,.85);vertical-align:super;margin-left:1px;line-height:0}.tf-pill--destructive{border-color:rgba(200,140,60,.35)}.tf-pill--destructive:hover{border-color:rgba(200,140,60,.6)}.tf-pill{display:inline-flex;align-items:center;padding:2px\x208px;border-radius:4px;font-size:11px;font-family:monospace;border:1px\x20solid\x20var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;transition:background\x20.1s,border-color\x20.1s,color\x20.1s;white-space:nowrap}.tf-pill:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-pill--on{background:rgba(79,193,255,.1);border-color:rgba(79,193,255,.35);color:var(--okdb-accent)}.tf-pill--on:hover{background:rgba(79,193,255,.15)}.tf-pill--full{border-color:rgba(251,191,36,.2);color:#5a4a20}.tf-pill--full-on,.tf-pill--full:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--full-on{background:rgba(251,191,36,.1)}.tf-pill--full-on:hover{background:rgba(251,191,36,.16)}.tf-pill--add{border-style:dashed;border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-pill--add:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted);border-style:solid}.tf-pill--wild{border-color:rgba(251,191,36,.2);color:#5a4a20;font-weight:700}.tf-pill--wild-on,.tf-pill--wild:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--wild-on{background:rgba(251,191,36,.1);font-weight:700}.tf-pill--wild-on:hover{background:rgba(251,191,36,.16)}.tf-pill--wild-inherited{border-style:dashed;border-color:rgba(251,191,36,.45);color:rgba(251,191,36,.6);background:rgba(251,191,36,.05);font-weight:700}.tf-pill--wild-inherited:hover{border-color:rgba(251,191,36,.65);color:rgba(251,191,36,.8);background:rgba(251,191,36,.09)}.tf-pill--inherited{border-style:dashed;border-color:rgba(79,193,255,.5);color:rgba(79,193,255,.65);background:rgba(79,193,255,.06)}.tf-pill--inherited:hover{border-color:rgba(79,193,255,.7);color:rgba(79,193,255,.85);background:rgba(79,193,255,.1)}.tf-env-row{display:flex;flex-direction:column;gap:6px;padding:8px\x200\x2010px;border-top:1px\x20solid\x20var(--okdb-app-bg)}.tf-env-row-header{display:flex;align-items:center;justify-content:space-between}.tf-env-name{font-size:11px;font-weight:600;color:var(--okdb-app-fg-muted);font-family:monospace}.tf-env-all,.tf-env-remove{font-size:10px;color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;padding:1px\x204px;transition:color\x20.1s}.tf-env-remove:hover{color:var(--okdb-danger)}.tf-env-all:hover{color:var(--okdb-accent-muted)}.tf-env-all--on{color:var(--okdb-warning-text)}.tf-env-all--on:hover{color:var(--okdb-warning)}.tf-token-box{display:flex;flex-direction:column;gap:10px;padding:14px;border:1px\x20solid\x20rgba(79,193,255,.2);border-radius:6px;background:rgba(79,193,255,.03)}.tf-token-warn{font-size:11px;color:var(--okdb-warning-text);line-height:1.5}.tf-token-value{font-family:monospace;font-size:11px;color:var(--okdb-accent);word-break:break-all;padding:8px;background:rgba(0,0,0,.3);border-radius:4px;border:1px\x20solid\x20rgba(79,193,255,.15);cursor:text;user-select:all}.tf-error{font-size:11px;color:var(--okdb-danger);padding:6px\x200\x200}.tf-actions{display:flex;gap:8px;justify-content:flex-end;padding-top:14px;margin-top:4px;border-top:1px\x20solid\x20var(--okdb-app-surface)}.tf-btn{padding:5px\x2012px;border-radius:5px;font-size:12px;border:1px\x20solid;background:0\x200;cursor:pointer;transition:background\x20.12s,color\x20.12s}.tf-btn:disabled{opacity:.4;cursor:not-allowed}.tf-btn--primary{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-btn--primary:not(:disabled):hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border);color:var(--okdb-sky)}.tf-btn--secondary{border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-btn--secondary:hover{background:var(--okdb-app-bg)}.tf-pip{position:fixed;z-index:9999;min-width:260px;max-width:460px;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:5px;padding:8px\x2010px;box-shadow:0\x204px\x2018px\x20rgba(0,0,0,.75);pointer-events:none;white-space:normal;font-size:11px}.tf-pip-perm{font-family:monospace;font-size:10px;color:var(--okdb-accent);margin-bottom:3px}.tf-pip-summary{color:var(--okdb-accent-muted);line-height:1.4;margin-bottom:5px}.tf-pip-routes-hd{font-size:9px;color:var(--okdb-app-fg-subtle);text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}.tf-pip-route{display:flex;align-items:baseline;gap:5px;padding:1px\x200}.tf-pip-method{font-family:monospace;font-size:9px;color:var(--okdb-accent);width:34px;flex-shrink:0}.tf-pip-path{font-family:monospace;font-size:10px;color:var(--okdb-accent-muted);word-break:break-all}.tf-pip-bd,.tf-pip-lr{font-size:8px;border-radius:2px;padding:0\x203px;flex-shrink:0}.tf-pip-bd{color:var(--okdb-danger);background:rgba(180,50,40,.15)}.tf-pip-lr{color:var(--okdb-app-fg-muted);background:rgba(100,100,100,.12)}.tf-pip-route-desc{font-size:9px;color:var(--okdb-app-fg-subtle);padding-left:39px;margin-bottom:1px}.tf-pip-gate,.tf-pip-implied{color:var(--okdb-app-fg-subtle);font-size:10px}.tf-pip-implied{margin-top:5px;font-size:9px;font-family:monospace}','template':_0x4cef19(0xa7)};
@@ -1 +1 @@
1
- function _0x1e7e(_0x9aa2a,_0x9b10fb){_0x9aa2a=_0x9aa2a-0xcc;const _0x3678aa=_0x3678();let _0x1e7e1e=_0x3678aa[_0x9aa2a];return _0x1e7e1e;}function _0x3678(){const _0x42055b=['success','/auth/permissions','token','trim','password','work','fair','var(--okdb-danger)','summary','localeCompare','filter','getTime','22381640WUwieV','6942xnISzA','close','sort','448EWfhWf','shared','routes','implies','test','godMode','ADMIN_API','Failed','1502557RkbzDc','entries','collapsedScopes','System','validateForm','Gate','catalogLoading','$ok','hoveredPerm','json','keys','length','namespaces','error','isArray','177642LtiSEK','map','Failed\x20to\x20update\x20token','indexOf','PATCH','application/json','data','5zfxHqD','edit-token-modal','hoveredAnchor','Token\x20label\x20is\x20required','system','.tf-header-fields,.tf-root,edit-token-modal{display:flex;flex-direction:column}.tf-root{gap:0;width:520px;max-width:88vw;position:relative}.tf-header-fields{gap:12px;padding-bottom:16px}.tf-field,.tf-header-row{display:flex;gap:10px}.tf-field{flex-direction:column;gap:4px;min-width:0}.tf-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-section{display:flex;flex-direction:column;gap:8px;padding:10px\x2012px;border:1px\x20solid\x20var(--okdb-app-surface);border-radius:6px;background:rgba(0,0,0,.15)}.tf-creds-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4;margin-top:-4px}.tf-creds-row{display:flex;gap:10px}.tf-pw-wrap{position:relative;display:flex;align-items:center}.tf-pw-wrap\x20.tf-input{padding-right:30px}.tf-pw-eye{position:absolute;right:7px;background:0\x200;border:0;color:var(--okdb-app-fg-subtle);cursor:pointer;font-size:12px;padding:0;line-height:1;user-select:none}.tf-pw-eye:hover,.tf-scope-header:hover\x20.tf-scope-name{color:var(--okdb-accent-muted)}.tf-strength-bar{height:2px;border-radius:1px;background:var(--okdb-app-surface);margin-top:3px;overflow:hidden}.tf-strength-fill{height:100%;border-radius:1px;transition:width\x20.2s,background-color\x20.2s}.tf-strength-text{font-size:9px;margin-top:2px;text-transform:uppercase;letter-spacing:.05em}.tf-input{padding:6px\x208px;border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:4px;background:0\x200;color:var(--okdb-app-fg-strong);font-size:12px;font-family:monospace;width:100%;box-sizing:border-box}.tf-input:focus{outline:0;border-color:rgba(79,193,255,.4)}.tf-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-divider{height:1px;background:var(--okdb-app-surface);margin-bottom:12px}.tf-section{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.tf-scope-header{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none;padding:2px\x200}.tf-scope-name{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--okdb-app-fg-muted);font-weight:600;transition:color\x20.1s}.tf-scope-count{font-size:10px;color:var(--okdb-accent);opacity:.8}.tf-scope-chevron{margin-left:auto;font-size:10px;color:var(--okdb-app-fg-subtle)}.tf-ns-block{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.tf-ns-row{display:flex;align-items:baseline;gap:8px}.tf-ns-label{font-size:11px;color:var(--okdb-app-fg-subtle);font-family:monospace;flex-shrink:0;cursor:pointer;user-select:none;transition:color\x20.1s;font-weight:600}.tf-ns-label:hover{color:var(--okdb-accent-muted)}.tf-ns-label--on{color:var(--okdb-accent)}.tf-ns-desc{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-pills{display:flex;flex-wrap:wrap;gap:4px;padding-left:4px}.tf-pill-wrap{display:inline-flex}.tf-pill-warn{font-size:7px;color:rgba(215,150,60,.85);vertical-align:super;margin-left:1px;line-height:0}.tf-pill--destructive{border-color:rgba(200,140,60,.35)}.tf-pill--destructive:hover{border-color:rgba(200,140,60,.6)}.tf-pill{display:inline-flex;align-items:center;padding:2px\x208px;border-radius:4px;font-size:11px;font-family:monospace;border:1px\x20solid\x20var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;transition:background\x20.1s,border-color\x20.1s,color\x20.1s;white-space:nowrap}.tf-pill:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-pill--on{background:rgba(79,193,255,.1);border-color:rgba(79,193,255,.35);color:var(--okdb-accent)}.tf-pill--on:hover{background:rgba(79,193,255,.15)}.tf-pill--full{border-color:rgba(251,191,36,.2);color:#5a4a20}.tf-pill--full-on,.tf-pill--full:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--full-on{background:rgba(251,191,36,.1)}.tf-pill--full-on:hover{background:rgba(251,191,36,.16)}.tf-pill--add{border-style:dashed;border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-pill--add:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted);border-style:solid}.tf-pill--wild{border-color:rgba(251,191,36,.2);color:#5a4a20;font-weight:700}.tf-pill--wild-on,.tf-pill--wild:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--wild-on{background:rgba(251,191,36,.1);font-weight:700}.tf-pill--wild-on:hover{background:rgba(251,191,36,.16)}.tf-pill--wild-inherited{border-style:dashed;border-color:rgba(251,191,36,.45);color:rgba(251,191,36,.6);background:rgba(251,191,36,.05);font-weight:700}.tf-pill--wild-inherited:hover{border-color:rgba(251,191,36,.65);color:rgba(251,191,36,.8);background:rgba(251,191,36,.09)}.tf-pill--inherited{border-style:dashed;border-color:rgba(79,193,255,.5);color:rgba(79,193,255,.65);background:rgba(79,193,255,.06)}.tf-pill--inherited:hover{border-color:rgba(79,193,255,.7);color:rgba(79,193,255,.85);background:rgba(79,193,255,.1)}.tf-env-row{display:flex;flex-direction:column;gap:6px;padding:8px\x200\x2010px;border-top:1px\x20solid\x20var(--okdb-app-bg)}.tf-env-row-header{display:flex;align-items:center;justify-content:space-between}.tf-env-name{font-size:11px;font-weight:600;color:var(--okdb-app-fg-muted);font-family:monospace}.tf-env-all,.tf-env-remove{font-size:10px;color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;padding:1px\x204px;transition:color\x20.1s}.tf-env-remove:hover{color:var(--okdb-danger)}.tf-env-all:hover{color:var(--okdb-accent-muted)}.tf-env-all--on{color:var(--okdb-warning-text)}.tf-env-all--on:hover{color:var(--okdb-warning)}.tf-error{font-size:11px;color:var(--okdb-danger);padding:6px\x200\x200}.tf-actions{display:flex;gap:8px;justify-content:flex-end;padding-top:14px;margin-top:4px;border-top:1px\x20solid\x20var(--okdb-app-surface)}.tf-btn{padding:5px\x2012px;border-radius:5px;font-size:12px;border:1px\x20solid;background:0\x200;cursor:pointer;transition:background\x20.12s,color\x20.12s}.tf-btn:disabled{opacity:.4;cursor:not-allowed}.tf-btn--primary{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-btn--primary:not(:disabled):hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border);color:var(--okdb-sky)}.tf-btn--secondary{border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-btn--secondary:hover{background:var(--okdb-app-bg)}.tf-pip{min-width:260px;max-width:460px;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:5px;padding:8px\x2010px;box-shadow:0\x204px\x2018px\x20rgba(0,0,0,.75);pointer-events:none;white-space:normal;font-size:11px}.tf-pip-perm{font-family:monospace;font-size:10px;color:var(--okdb-accent);margin-bottom:3px}.tf-pip-summary{color:var(--okdb-accent-muted);line-height:1.4;margin-bottom:5px}.tf-pip-routes-hd{font-size:9px;color:var(--okdb-app-fg-subtle);text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}.tf-pip-route{display:flex;align-items:baseline;gap:5px;padding:1px\x200}.tf-pip-method{font-family:monospace;font-size:9px;color:var(--okdb-accent);width:34px;flex-shrink:0}.tf-pip-path{font-family:monospace;font-size:10px;color:var(--okdb-accent-muted);word-break:break-all}.tf-pip-bd,.tf-pip-lr{font-size:8px;border-radius:2px;padding:0\x203px;flex-shrink:0}.tf-pip-bd{color:var(--okdb-danger);background:rgba(180,50,40,.15)}.tf-pip-lr{color:var(--okdb-app-fg-muted);background:rgba(100,100,100,.12)}.tf-pip-route-desc{font-size:9px;color:var(--okdb-app-fg-subtle);padding-left:39px;margin-bottom:1px}.tf-pip-gate,.tf-pip-implied{color:var(--okdb-app-fg-subtle);font-size:10px}.tf-pip-implied{margin-top:5px;font-size:9px;font-family:monospace}','opOrder','name','catalog','loadCatalog','1268oRDOZJ','slice','3958829Amljnj','<div\x20class=\x22tf-root\x22><if\x20:=\x22busy\x22><ok-overlay><div\x20class=\x22loader-center\x22><ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:28px;height:28px;\x22/></div></ok-overlay></if><div\x20class=\x22tf-header-fields\x22><div\x20class=\x22tf-header-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:2;\x22><span\x20class=\x22tf-label\x22>Label</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22e.g.,\x20API\x20Client\x22\x20:value=\x22label\x22\x20@input=\x22label\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1.5;\x22><span\x20class=\x22tf-label\x22>Expires\x20<span\x20style=\x22opacity:.4;\x22>(optional)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22datetime-local\x22\x20:value=\x22expiresAt\x22\x20@input=\x22expiresAt\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div></div><div\x20class=\x22tf-creds-section\x22><div><div\x20class=\x22tf-creds-label\x22>Login\x20credentials\x20<span\x20style=\x22opacity:.4;\x20text-transform:none;\x20font-weight:400;\x20letter-spacing:0;\x22>(optional)</span></div><div\x20class=\x22tf-creds-hint\x22>If\x20set,\x20this\x20token\x20can\x20also\x20be\x20used\x20via\x20username\x20+\x20password\x20authentication.</div></div><div\x20class=\x22tf-creds-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Username</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22leave\x20blank\x20for\x20token-only\x22\x20:value=\x22name\x22\x20@input=\x22name\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22\x20autocomplete=\x22off\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Password\x20<span\x20style=\x22opacity:.4;\x22>(new)</span></span><div\x20class=\x22tf-pw-wrap\x22><input\x20class=\x22tf-input\x22\x20:type=\x22showPassword\x20?\x20\x27text\x27\x20:\x20\x27password\x27\x22\x20placeholder=\x22leave\x20blank\x20to\x20keep\x22\x20:value=\x22password\x22\x20@input=\x22password\x20=\x20$el.value\x22\x20:disabled=\x22busy\x20||\x20!name\x22\x20autocomplete=\x22new-password\x22>\x20<button\x20class=\x22tf-pw-eye\x22\x20@click=\x22toggleShowPassword()\x22\x20type=\x22button\x22\x20tabindex=\x22-1\x22>{{\x20showPassword\x20?\x20\x27🙈\x27\x20:\x20\x27👁\x27\x20}}</button></div><if\x20:=\x22password\x22><div\x20class=\x22tf-strength-bar\x22><div\x20class=\x22tf-strength-fill\x22\x20:style=\x22\x27width:\x27\x20+\x20(passwordStrength(password)/5*100)\x20+\x20\x27%;\x20background:\x27\x20+\x20passwordStrengthColor(password)\x22/></div><div\x20class=\x22tf-strength-text\x22\x20:style=\x22\x27color:\x27\x20+\x20passwordStrengthColor(password)\x22>{{\x20passwordStrengthLabel(password)\x20}}</div></if></div></div></div></div><div\x20class=\x22tf-divider\x22/><if\x20:=\x22catalogLoading\x22><div\x20class=\x22tf-hint\x22\x20style=\x22padding-bottom:12px;\x22>Loading\x20permissions…</div></if><if\x20:=\x22catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22><span\x20class=\x22tf-label\x22>Permissions\x20<span\x20style=\x22color:var(--okdb-danger);\x22>(fallback)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22data:read,\x20data:write\x22\x20:value=\x22selectedPerms._fallback\x20||\x20\x27\x27\x22\x20@input=\x22selectedPerms\x20=\x20{\x20_fallback:\x20$el.value\x20}\x22\x20:disabled=\x22busy\x22>\x20<span\x20class=\x22tf-hint\x22>Comma-separated\x20permission\x20strings</span></div></if><if\x20:=\x22catalog\x20&&\x20!catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22\x20style=\x22gap:4px;\x22><div\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--full\x27,\x20godMode\x20?\x20\x27tf-pill--full-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGodMode()\x22\x20style=\x22width:fit-content;\x22>★\x20&nbsp;Full\x20access\x20—\x20all\x20permissions</div></div><if\x20:=\x22!godMode\x22><each\x20:of=\x22getPermSections()\x22\x20let:item=\x22section\x22><div\x20class=\x22tf-section\x22><div\x20class=\x22tf-scope-header\x22\x20@click=\x22toggleScope(section.scope)\x22><span\x20class=\x22tf-scope-name\x22>{{\x20section.label\x20}}</span><if\x20:=\x22scopeSelectionCount(section)\x22><span\x20class=\x22tf-scope-count\x22>{{\x20scopeSelectionCount(section)\x20}}</span></if><span\x20class=\x22tf-scope-chevron\x22>{{\x20isCollapsed(section.scope)\x20?\x20\x27▸\x27\x20:\x20\x27▾\x27\x20}}</span></div><if\x20:=\x22!isCollapsed(section.scope)\x22><each\x20:of=\x22section.namespaces\x22\x20let:item=\x22nsEntry\x22><div\x20class=\x22tf-ns-block\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsEntry.nsLabel\x20||\x20nsEntry.ns\x20}}</span><if\x20:=\x22nsEntry.nsDescription\x22><span\x20class=\x22tf-ns-desc\x22>{{\x20nsEntry.nsDescription\x20}}</span></if></div><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22getPermOps(nsEntry.ns,\x20nsEntry.operations,\x20nsEntry.operationMeta)\x22\x20let:item=\x22permOp\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20permOp.perm,\x20permOp)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20permOp.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20\x27\x27,\x20permOp.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22togglePerm(permOp.ns,\x20permOp.op,\x20nsEntry.operations)\x22>{{\x20permOp.op\x20}}<if\x20:=\x22permOp.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></if></div></each><if\x20:=\x22catalog.envs\x20&&\x20catalog.envs.length\x20>\x200\x22><div\x20class=\x22tf-divider\x22/><div\x20class=\x22tf-section\x22\x20style=\x22gap:8px;\x22><div\x20class=\x22tf-scope-header\x22\x20style=\x22cursor:default;\x20pointer-events:none;\x22><span\x20class=\x22tf-scope-name\x22>Per-env\x20grants</span>\x20<span\x20class=\x22tf-hint\x22\x20style=\x22margin-left:6px;\x22>extra\x20permissions\x20for\x20a\x20specific\x20environment</span></div><if\x20:=\x22availableGrantEnvs().length\x20>\x200\x22><div\x20class=\x22tf-pills\x22><each\x20:of=\x22availableGrantEnvs()\x22\x20let:item=\x22envName\x22><span\x20class=\x22tf-pill\x20tf-pill--add\x22\x20@click=\x22addGrantEnv(envName)\x22>+\x20{{\x20envName\x20}}</span></each></div></if><each\x20:of=\x22getGrantEntries()\x22\x20let:item=\x22grantEntry\x22><div\x20class=\x22tf-env-row\x22><div\x20class=\x22tf-env-row-header\x22><div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22><span\x20class=\x22tf-env-name\x22>{{\x20grantEntry.env\x20}}</span>\x20<span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isEnvAllSelected(grantEntry.env)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isEnvWildInherited(grantEntry.env)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantAllPerms(grantEntry.env)\x22\x20title=\x22*\x20—\x20all\x20permissions\x20for\x20this\x20env\x22\x20style=\x22font-size:11px;\x20padding:1px\x206px;\x22>*</span><if\x20:=\x22grantEntry.globalCoverAll\x22><span\x20class=\x22tf-hint\x22\x20style=\x22color:rgba(79,193,255,.35);\x22\x20title=\x22All\x20permissions\x20already\x20covered\x20by\x20global\x20*\x20or\x20god\x20mode\x22>inherited</span></if></div><span\x20class=\x22tf-env-remove\x22\x20@click=\x22removeGrantEnv(grantEntry.env)\x22>✕\x20remove</span></div><each\x20:of=\x22grantEntry.nGroups\x22\x20let:item=\x22nsGroup\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsGroup.ns\x20}}</span><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isNsWildInheritedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22nsGroup.ops\x22\x20let:item=\x22grantPerm\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20grantPerm.perm,\x20grantPerm)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20grantPerm.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20grantPerm.inherited\x20?\x20\x27tf-pill--inherited\x27\x20:\x20\x27\x27,\x20grantPerm.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantPerm(grantEntry.env,\x20nsGroup.ns,\x20grantPerm.op,\x20nsGroup.ops.map(o\x20=>\x20o.op))\x22>{{\x20grantPerm.op\x20}}<if\x20:=\x22grantPerm.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></div></each></div></if></if></if><if\x20:=\x22error\x22><div\x20class=\x22tf-error\x22>{{\x20error\x20}}</div></if><div\x20class=\x22tf-actions\x22><button\x20class=\x22tf-btn\x20tf-btn--secondary\x22\x20@click=\x22cancel()\x22\x20:disabled=\x22busy\x22>Cancel</button>\x20<button\x20class=\x22tf-btn\x20tf-btn--primary\x22\x20@click=\x22save()\x22\x20:disabled=\x22busy\x20||\x20!label.trim()\x22>Save\x20Changes</button></div><ok-flyover\x20:open=\x22hoveredPermOp\x20!=\x20null\x22\x20:anchor=\x22hoveredAnchor\x22\x20placement=\x22bottom-start\x22\x20:gap=\x224\x22\x20style=\x22--ok-flyover-bg:transparent;\x20--ok-flyover-border:none;\x20--ok-flyover-shadow:none;\x20--ok-flyover-radius:0;\x22><if\x20:=\x22hoveredPermOp\x22><div\x20class=\x22tf-pip\x22><div\x20class=\x22tf-pip-perm\x22>{{\x20hoveredPermOp.perm\x20||\x20hoveredPerm\x20}}</div><if\x20:=\x22hoveredPermOp.summary\x22><div\x20class=\x22tf-pip-summary\x22>{{\x20hoveredPermOp.summary\x20}}</div></if><if\x20:=\x22hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length\x22><div\x20class=\x22tf-pip-routes-hd\x22>Routes\x20({{\x20hoveredPermOp.routes.length\x20}})</div><each\x20:of=\x22hoveredPermOp.routes\x22\x20let:item=\x22r\x22><div\x20class=\x22tf-pip-route\x22><span\x20class=\x22tf-pip-method\x22>{{\x20r.method\x20}}</span>\x20<span\x20class=\x22tf-pip-path\x22>{{\x20r.path\x20}}</span><if\x20:=\x22r.destructive\x22><span\x20class=\x22tf-pip-bd\x22>destructive</span></if><if\x20:=\x22r.longRunning\x22><span\x20class=\x22tf-pip-lr\x22>long</span></if></div><if\x20:=\x22r.summary\x22><div\x20class=\x22tf-pip-route-desc\x22>{{\x20r.summary\x20}}</div></if></each></if><if\x20:=\x22!(hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length)\x22><div\x20class=\x22tf-pip-gate\x22>Gate\x20—\x20combine\x20with\x20underlying\x20namespace\x20permissions.</div></if><if\x20:=\x22getImpliedBy(hoveredPerm).length\x22><div\x20class=\x22tf-pip-implied\x22>Implied\x20by:\x20{{\x20getImpliedBy(hoveredPerm).join(\x27,\x20\x27)\x20}}</div></if></div></if></ok-flyover></div>','scope','query','env','result','7418238EIchHo','envs','toast','busy','operations','destructive','weak','/auth/tokens/','grants','showPassword','strong','split','read','passwordStrength','peer','message','permissions','isNsAllSelectedForGrant','Token\x20updated','expiresAt','some','includes','catalogError','onDone','API','2936448pYSVmt','var(--okdb-warning)','toISOString','hoveredPermOp','var(--okdb-success)','perm','selectedPerms','isEnvAllSelected','currentTarget','_fallback','write','label','$attr','run'];_0x3678=function(){return _0x42055b;};return _0x3678();}const _0x4ad938=_0x1e7e;(function(_0xf6f0bc,_0x42467a){const _0x5d3047=_0x1e7e,_0x5b0c2f=_0xf6f0bc();while(!![]){try{const _0x8dab4e=-parseInt(_0x5d3047(0xde))/0x1+parseInt(_0x5d3047(0x11f))/0x2+parseInt(_0x5d3047(0xd3))/0x3*(-parseInt(_0x5d3047(0xfe))/0x4)+parseInt(_0x5d3047(0xf4))/0x5*(-parseInt(_0x5d3047(0x106))/0x6)+-parseInt(_0x5d3047(0x100))/0x7+-parseInt(_0x5d3047(0xd6))/0x8*(-parseInt(_0x5d3047(0xed))/0x9)+parseInt(_0x5d3047(0xd2))/0xa;if(_0x8dab4e===_0x42467a)break;else _0x5b0c2f['push'](_0x5b0c2f['shift']());}catch(_0x377e38){_0x5b0c2f['push'](_0x5b0c2f['shift']());}}}(_0x3678,0xbce45));import _0x6eb1e9 from'@toolkit/elements/ok-icon.ok.js';import _0x4189cb from'@toolkit/core/ok-overlay.ok.js';import _0x10ec29 from'@toolkit/interaction/ok-flyover.ok.js';export default{'tag':_0x4ad938(0xf5),'dependencies':[_0x4189cb,_0x6eb1e9,_0x10ec29],'attr':{'modal':{},'token':{},'onDone':{}},'context'(_0x59b551){const _0x3040b0=_0x4ad938,_0x1e77f1=_0x59b551[_0x3040b0(0x12b)]['token']?.[_0x3040b0(0x116)]||[],_0x366ec6=_0x1e77f1[_0x3040b0(0x11b)]('*'),_0x1c5406={};if(!_0x366ec6){for(const _0x2d1746 of _0x1e77f1)_0x1c5406[_0x2d1746]=!0x0;}const _0x2355b0={},_0x475717=_0x59b551[_0x3040b0(0x12b)][_0x3040b0(0x12f)]?.[_0x3040b0(0x10e)]||{};for(const [_0x1e2875,_0x43bde3]of Object[_0x3040b0(0xdf)](_0x475717)){_0x2355b0[_0x1e2875]={};for(const _0x434c28 of Array[_0x3040b0(0xec)](_0x43bde3)?_0x43bde3:[])_0x2355b0[_0x1e2875][_0x434c28]=!0x0;}return{'busy':!0x1,'error':null,'label':_0x59b551['$attr'][_0x3040b0(0x12f)]?.[_0x3040b0(0x12a)]||'','name':_0x59b551[_0x3040b0(0x12b)][_0x3040b0(0x12f)]?.[_0x3040b0(0xfb)]||'','password':'','showPassword':!0x1,'expiresAt':_0x59b551[_0x3040b0(0x12b)][_0x3040b0(0x12f)]?.[_0x3040b0(0x119)]?new Date(_0x59b551['$attr'][_0x3040b0(0x12f)][_0x3040b0(0x119)])[_0x3040b0(0x121)]()[_0x3040b0(0xff)](0x0,0x10):'','catalog':null,'catalogError':!0x1,'catalogLoading':!0x1,'godMode':_0x366ec6,'selectedPerms':_0x1c5406,'grants':_0x2355b0,'collapsedScopes':{},'hoveredPerm':null,'hoveredPermOp':null,'hoveredAnchor':null,'setHover'(_0x41623a,_0x7e68fc,_0x599374){const _0x4f6286=_0x3040b0;this[_0x4f6286(0xe6)]=_0x7e68fc,this['hoveredPermOp']=_0x599374,this[_0x4f6286(0xf6)]=_0x41623a[_0x4f6286(0x127)];},'clearHover'(){const _0x2a40a1=_0x3040b0;this[_0x2a40a1(0xe6)]=null,this[_0x2a40a1(0x122)]=null,this[_0x2a40a1(0xf6)]=null;},async 'loadCatalog'(){const _0x102c9d=_0x3040b0;this[_0x102c9d(0xe4)]=!0x0;try{const _0x3d1586=await fetch(__ENV__[_0x102c9d(0xdc)]+_0x102c9d(0x12e));if(!_0x3d1586['ok'])throw new Error(_0x102c9d(0xdd));const _0x3f442a=await _0x3d1586[_0x102c9d(0xe7)]();this[_0x102c9d(0xfc)]=_0x3f442a[_0x102c9d(0xf3)]??_0x3f442a[_0x102c9d(0x105)];}catch{this[_0x102c9d(0x11c)]=!0x0;}finally{this[_0x102c9d(0xe4)]=!0x1;}},'togglePerm'(_0xcacc4f,_0x5a3988,_0x500976){const _0xad84e1=_0x3040b0;if(this[_0xad84e1(0xdb)])return;const _0x416c57=_0xcacc4f+':*';if(this['selectedPerms'][_0x416c57]){const _0x197965={...this[_0xad84e1(0x125)]};delete _0x197965[_0x416c57];for(const _0x2bbae3 of _0x500976)_0x2bbae3!==_0x5a3988&&(_0x197965[_0xcacc4f+':'+_0x2bbae3]=!0x0);this[_0xad84e1(0x125)]=_0x197965;}else this[_0xad84e1(0x125)]={...this[_0xad84e1(0x125)],[_0xcacc4f+':'+_0x5a3988]:!this[_0xad84e1(0x125)][_0xcacc4f+':'+_0x5a3988]};},'toggleNamespace'(_0x7ac75a,_0x22afdf){const _0x1e7873=_0x3040b0;if(this[_0x1e7873(0xdb)])return;const _0x1742ca=_0x7ac75a+':*',_0x354465={...this[_0x1e7873(0x125)]};if(_0x354465[_0x1742ca])delete _0x354465[_0x1742ca];else{for(const _0x374d1d of _0x22afdf)delete _0x354465[_0x7ac75a+':'+_0x374d1d];_0x354465[_0x1742ca]=!0x0;}this[_0x1e7873(0x125)]=_0x354465;},'toggleGodMode'(){const _0x4a8ff7=_0x3040b0;this[_0x4a8ff7(0xdb)]=!this[_0x4a8ff7(0xdb)],this['godMode']&&(this[_0x4a8ff7(0x125)]={});},'toggleScope'(_0x294bc8){const _0x2d01a8=_0x3040b0;this[_0x2d01a8(0xe0)]={...this['collapsedScopes'],[_0x294bc8]:!this[_0x2d01a8(0xe0)][_0x294bc8]};},'isCollapsed'(_0x5d1b4f){const _0x51f78f=_0x3040b0;return!!this[_0x51f78f(0xe0)][_0x5d1b4f];},'scopeSelectionCount'(_0x297997){const _0x2de301=_0x3040b0;let _0x5ef0b1=0x0,_0x9e0c87=0x0;for(const _0x168a3f of _0x297997[_0x2de301(0xea)])for(const _0x30c1bb of _0x168a3f[_0x2de301(0x10a)])_0x9e0c87++,(this[_0x2de301(0x125)][_0x168a3f['ns']+':'+_0x30c1bb]||this[_0x2de301(0x125)][_0x168a3f['ns']+':*'])&&_0x5ef0b1++;return _0x5ef0b1>0x0?_0x5ef0b1+'/'+_0x9e0c87:'';},'addGrantEnv'(_0x69a3f7){const _0xf6ef5f=_0x3040b0;_0x69a3f7&&!this[_0xf6ef5f(0x10e)][_0x69a3f7]&&(this[_0xf6ef5f(0x10e)]={...this[_0xf6ef5f(0x10e)],[_0x69a3f7]:{}});},'removeGrantEnv'(_0x1113d6){const _0x9be914=_0x3040b0,_0x2413b5={...this['grants']};delete _0x2413b5[_0x1113d6],this[_0x9be914(0x10e)]=_0x2413b5;},'availableGrantEnvs'(){const _0x512ba7=_0x3040b0;return this['catalog']?.[_0x512ba7(0x107)]?this[_0x512ba7(0xfc)][_0x512ba7(0x107)]['filter'](_0x228166=>!this[_0x512ba7(0x10e)][_0x228166]):[];},'getPermSections'(){const _0xd51479=_0x3040b0;if(!this['catalog']?.[_0xd51479(0xea)])return[];const _0x1dcafc=this[_0xd51479(0xfc)][_0xd51479(0xfa)]||[_0xd51479(0x112),_0xd51479(0x103),_0xd51479(0x12c),_0xd51479(0x129),_0xd51479(0x132),_0xd51479(0x114)];return[{'scope':_0xd51479(0x104),'label':'Environment'},{'scope':_0xd51479(0xf8),'label':_0xd51479(0xe1)},{'scope':'gate','label':_0xd51479(0xe3)}][_0xd51479(0xee)](_0x4a03ff=>({'scope':_0x4a03ff['scope'],'label':_0x4a03ff[_0xd51479(0x12a)],'namespaces':Object[_0xd51479(0xdf)](this[_0xd51479(0xfc)][_0xd51479(0xea)])[_0xd51479(0xd0)](([,_0x55729d])=>_0x55729d[_0xd51479(0x102)]===_0x4a03ff['scope'])[_0xd51479(0xee)](([_0x28ad6b,_0x2b6a3f])=>({'ns':_0x28ad6b,'nsLabel':_0x2b6a3f['label'],'nsDescription':_0x2b6a3f['description'],'operations':Object[_0xd51479(0xe8)](_0x2b6a3f['operations'])[_0xd51479(0xd5)]((_0x26f299,_0x2d3a85)=>{const _0x1eea10=_0xd51479,_0x2d9388=_0x1dcafc['indexOf'](_0x26f299),_0x31620c=_0x1dcafc[_0x1eea10(0xf0)](_0x2d3a85);return-0x1===_0x2d9388&&-0x1===_0x31620c?_0x26f299[_0x1eea10(0xcf)](_0x2d3a85):-0x1===_0x2d9388?0x1:-0x1===_0x31620c?-0x1:_0x2d9388-_0x31620c;}),'operationMeta':_0x2b6a3f[_0xd51479(0x10a)]}))}))[_0xd51479(0xd0)](_0x1616f7=>_0x1616f7[_0xd51479(0xea)][_0xd51479(0xe9)]>0x0);},'getPermOps'(_0x4dbe42,_0x4897b2,_0x1a1ee2){const _0x54bdeb=_0x3040b0;return _0x4897b2[_0x54bdeb(0xee)](_0x46d7fe=>{const _0x223232=_0x54bdeb,_0x3a5ca9=_0x1a1ee2?.[_0x46d7fe]||{},_0x47e589=_0x3a5ca9['routes']||[];return{'ns':_0x4dbe42,'op':_0x46d7fe,'perm':_0x4dbe42+':'+_0x46d7fe,'summary':_0x3a5ca9[_0x223232(0xce)]||'','routes':_0x47e589,'hasDestructive':_0x47e589['some'](_0x257bce=>_0x257bce['destructive']),'checked':!!this['selectedPerms'][_0x4dbe42+':'+_0x46d7fe]||!!this[_0x223232(0x125)][_0x4dbe42+':*']};});},'getImpliedBy'(_0x9ab941){const _0x356429=_0x3040b0,_0xc2e1eb=this[_0x356429(0xfc)]?.[_0x356429(0xd9)]||{};return Object[_0x356429(0xdf)](_0xc2e1eb)[_0x356429(0xd0)](([,_0x4cd238])=>_0x4cd238[_0x356429(0x11b)](_0x9ab941))[_0x356429(0xee)](([_0x3e9863])=>_0x3e9863);},'isNsAllSelected'(_0x46f2b0){const _0x2e06ee=_0x3040b0;return!!this[_0x2e06ee(0x125)][_0x46f2b0+':*'];},'isEnvAllSelected'(_0x5b63d9){return!!this['grants'][_0x5b63d9]?.['*'];},'isEnvWildInherited'(_0x1a3485){const _0x27d05e=_0x3040b0;return!this[_0x27d05e(0x126)](_0x1a3485)&&(this[_0x27d05e(0xdb)]||!!this[_0x27d05e(0x125)]['*']);},'isNsAllSelectedForGrant'(_0xe4eab4,_0x181a31){const _0x973e8a=_0x3040b0;return!!this[_0x973e8a(0x10e)][_0xe4eab4]?.['*']||!!this[_0x973e8a(0x10e)][_0xe4eab4]?.[_0x181a31+':*'];},'isNsWildInheritedForGrant'(_0x4619f8,_0x5e8ca3){const _0x18ea27=_0x3040b0;return!this[_0x18ea27(0x117)](_0x4619f8,_0x5e8ca3)&&(this['godMode']||!!this[_0x18ea27(0x125)]['*']||!!this[_0x18ea27(0x125)][_0x5e8ca3+':*']);},'toggleGrantPerm'(_0x2a4592,_0x41efbe,_0x41bc84,_0x4c56ac){const _0x1e18b6=_0x3040b0,_0x1ef98d=_0x41efbe+':'+_0x41bc84,_0x5dbc0d=_0x41efbe+':*',_0x2e28d4={...this[_0x1e18b6(0x10e)][_0x2a4592]||{}};if(_0x2e28d4['*'])delete _0x2e28d4['*'];else{if(_0x2e28d4[_0x5dbc0d]){delete _0x2e28d4[_0x5dbc0d];for(const _0x350d2e of _0x4c56ac)_0x350d2e!==_0x41bc84&&(_0x2e28d4[_0x41efbe+':'+_0x350d2e]=!0x0);}else _0x2e28d4[_0x1ef98d]=!_0x2e28d4[_0x1ef98d];}this[_0x1e18b6(0x10e)]={...this[_0x1e18b6(0x10e)],[_0x2a4592]:_0x2e28d4};},'toggleGrantNamespace'(_0x219d99,_0x5eacfd,_0x13ccd5){const _0x11a262=_0x3040b0,_0x21d44d=_0x5eacfd+':*',_0x29cf5b={...this[_0x11a262(0x10e)][_0x219d99]||{}};if(_0x29cf5b['*'])delete _0x29cf5b['*'];else{if(_0x29cf5b[_0x21d44d])delete _0x29cf5b[_0x21d44d];else{for(const _0x1f4bce of _0x13ccd5)delete _0x29cf5b[_0x1f4bce[_0x11a262(0x124)]];_0x29cf5b[_0x21d44d]=!0x0;}}this[_0x11a262(0x10e)]={...this[_0x11a262(0x10e)],[_0x219d99]:_0x29cf5b};},'toggleGrantAllPerms'(_0x42734d){const _0x252e9d=_0x3040b0,_0x5c69d4=this[_0x252e9d(0x10e)][_0x42734d]||{};if(_0x5c69d4['*']){const _0x4eac6c={..._0x5c69d4};delete _0x4eac6c['*'],this[_0x252e9d(0x10e)]={...this[_0x252e9d(0x10e)],[_0x42734d]:_0x4eac6c};}else this[_0x252e9d(0x10e)]={...this[_0x252e9d(0x10e)],[_0x42734d]:{'*':!0x0}};},'getGrantEntries'(){const _0x4c9b56=_0x3040b0;if(!this[_0x4c9b56(0xfc)]?.['namespaces'])return[];const _0x48840f=this[_0x4c9b56(0xfc)][_0x4c9b56(0xfa)]||[_0x4c9b56(0x112),_0x4c9b56(0x103),'run',_0x4c9b56(0x129),_0x4c9b56(0x132),_0x4c9b56(0x114)],_0x26d53a=Object[_0x4c9b56(0xdf)](this['catalog'][_0x4c9b56(0xea)])[_0x4c9b56(0xd0)](([,_0x36839c])=>_0x4c9b56(0x104)===_0x36839c[_0x4c9b56(0x102)])[_0x4c9b56(0xee)](([_0x5096d2,_0x326ab4])=>({'ns':_0x5096d2,'operations':Object['keys'](_0x326ab4[_0x4c9b56(0x10a)])['sort']((_0x8a93ea,_0x38acce)=>{const _0x26b3ad=_0x4c9b56,_0x6df04f=_0x48840f['indexOf'](_0x8a93ea),_0x971da8=_0x48840f['indexOf'](_0x38acce);return-0x1===_0x6df04f&&-0x1===_0x971da8?_0x8a93ea[_0x26b3ad(0xcf)](_0x38acce):-0x1===_0x6df04f?0x1:-0x1===_0x971da8?-0x1:_0x6df04f-_0x971da8;})})),_0x49b8a5=this['selectedPerms'],_0x4d6c64=this[_0x4c9b56(0xdb)];return Object[_0x4c9b56(0xdf)](this[_0x4c9b56(0x10e)])[_0x4c9b56(0xee)](([_0x18120c,_0x5b2577])=>({'env':_0x18120c,'globalCoverAll':_0x4d6c64||!!_0x49b8a5['*'],'nGroups':_0x26d53a[_0x4c9b56(0xee)](({ns:_0x5f55fa,operations:_0x5e6973})=>({'ns':_0x5f55fa,'ops':_0x5e6973[_0x4c9b56(0xee)](_0x3d10df=>{const _0x5c73db=_0x4c9b56,_0x1159d7=_0x5f55fa+':'+_0x3d10df,_0x69cb05=!!_0x5b2577[_0x1159d7]||!!_0x5b2577[_0x5f55fa+':*']||!!_0x5b2577['*'],_0x10d70c=!_0x69cb05&&(_0x4d6c64||!!_0x49b8a5['*']||!!_0x49b8a5[_0x5f55fa+':*']||!!_0x49b8a5[_0x1159d7]),_0x48b2ef=this[_0x5c73db(0xfc)][_0x5c73db(0xea)][_0x5f55fa]?.['operations']?.[_0x3d10df]||{};return{'perm':_0x1159d7,'op':_0x3d10df,'summary':_0x48b2ef[_0x5c73db(0xce)]||'','routes':_0x48b2ef[_0x5c73db(0xd8)]||[],'hasDestructive':(_0x48b2ef[_0x5c73db(0xd8)]||[])[_0x5c73db(0x11a)](_0x365a0f=>_0x365a0f[_0x5c73db(0x10b)]),'checked':_0x69cb05,'inherited':_0x10d70c};})}))}));},'validateForm'(){const _0x58311b=_0x3040b0;if(!this[_0x58311b(0x12a)][_0x58311b(0x130)]())throw new Error(_0x58311b(0xf7));return!0x0;},async 'save'(){const _0x4411db=_0x3040b0;this[_0x4411db(0xeb)]=null;try{this[_0x4411db(0xe2)](),this[_0x4411db(0x109)]=!0x0;const _0x30cb2={'label':this[_0x4411db(0x12a)][_0x4411db(0x130)]()};if(this[_0x4411db(0x119)]?_0x30cb2[_0x4411db(0x119)]=new Date(this[_0x4411db(0x119)])[_0x4411db(0xd1)]():_0x30cb2[_0x4411db(0x119)]=null,this['godMode'])_0x30cb2[_0x4411db(0x116)]=['*'];else{if(this['catalogError']&&void 0x0!==this[_0x4411db(0x125)]['_fallback']){const _0x323600=String(this[_0x4411db(0x125)]['_fallback']||'')[_0x4411db(0x111)](',')['map'](_0x8d6bb8=>_0x8d6bb8[_0x4411db(0x130)]())[_0x4411db(0xd0)](_0x1de349=>_0x1de349);_0x323600[_0x4411db(0xe9)]&&(_0x30cb2[_0x4411db(0x116)]=_0x323600);}else{const _0x1d6dbe=Object[_0x4411db(0xdf)](this[_0x4411db(0x125)])['filter'](([_0x3b5095,_0x46ad25])=>_0x46ad25&&_0x4411db(0x128)!==_0x3b5095)[_0x4411db(0xee)](([_0x5edbd5])=>_0x5edbd5);_0x1d6dbe[_0x4411db(0xe9)]&&(_0x30cb2[_0x4411db(0x116)]=_0x1d6dbe);}}const _0x201bb4={};for(const [_0x52e325,_0x41127f]of Object[_0x4411db(0xdf)](this[_0x4411db(0x10e)])){const _0x2c95e9=Object[_0x4411db(0xdf)](_0x41127f)[_0x4411db(0xd0)](([,_0x17d0b1])=>_0x17d0b1)[_0x4411db(0xee)](([_0x48568b])=>_0x48568b);_0x2c95e9[_0x4411db(0xe9)]&&(_0x201bb4[_0x52e325]=_0x2c95e9);}Object[_0x4411db(0xe8)](_0x201bb4)['length']&&(_0x30cb2[_0x4411db(0x10e)]=_0x201bb4),this[_0x4411db(0xfb)][_0x4411db(0x130)]()&&(_0x30cb2[_0x4411db(0xfb)]=this[_0x4411db(0xfb)]['trim'](),this['password']&&(_0x30cb2[_0x4411db(0x131)]=this['password']));const _0x3d2ddd=await fetch(__ENV__[_0x4411db(0x11e)]+_0x4411db(0x10d)+encodeURIComponent(_0x59b551['$attr'][_0x4411db(0x12f)]['id']),{'method':_0x4411db(0xf1),'headers':{'Content-Type':_0x4411db(0xf2)},'body':JSON['stringify'](_0x30cb2)});if(!_0x3d2ddd['ok']){const _0x3ad199=await _0x3d2ddd[_0x4411db(0xe7)]();throw new Error(_0x3ad199?.[_0x4411db(0xeb)]?.[_0x4411db(0x115)]||_0x4411db(0xef));}_0x59b551[_0x4411db(0xe5)][_0x4411db(0xd7)]?.['toast']?.[_0x4411db(0x12d)]?.(_0x4411db(0x118)),await _0x59b551[_0x4411db(0x12b)]['modal'][_0x4411db(0xd4)](),await _0x59b551['$attr'][_0x4411db(0x11d)]?.(_0x59b551[_0x4411db(0x12b)][_0x4411db(0x12f)]['id']);}catch(_0x157531){this[_0x4411db(0xeb)]=_0x157531?.[_0x4411db(0x115)]||String(_0x157531),_0x59b551[_0x4411db(0xe5)][_0x4411db(0xd7)]?.[_0x4411db(0x108)]?.[_0x4411db(0xeb)]?.(this[_0x4411db(0xeb)]);}finally{this[_0x4411db(0x109)]=!0x1;}},'cancel'(){const _0x4dad1e=_0x3040b0;_0x59b551[_0x4dad1e(0x12b)]['modal'][_0x4dad1e(0xd4)]();},'passwordStrength'(_0x4c3079){const _0x1999e8=_0x3040b0;if(!_0x4c3079)return 0x0;let _0x55fd58=0x0;return _0x4c3079['length']>=0x8&&_0x55fd58++,_0x4c3079[_0x1999e8(0xe9)]>=0xe&&_0x55fd58++,/[A-Z]/[_0x1999e8(0xda)](_0x4c3079)&&_0x55fd58++,/[0-9]/[_0x1999e8(0xda)](_0x4c3079)&&_0x55fd58++,/[^A-Za-z0-9]/[_0x1999e8(0xda)](_0x4c3079)&&_0x55fd58++,_0x55fd58;},'passwordStrengthLabel'(_0x1536fd){const _0x4eeefc=_0x3040b0,_0x1e2ae1=this['passwordStrength'](_0x1536fd);return _0x1536fd?_0x1e2ae1<=0x1?_0x4eeefc(0x10c):_0x1e2ae1<=0x3?_0x4eeefc(0xcc):_0x4eeefc(0x110):'';},'passwordStrengthColor'(_0x46053c){const _0xecc79=_0x3040b0,_0x36878a=this[_0xecc79(0x113)](_0x46053c);return _0x46053c?_0x36878a<=0x1?_0xecc79(0xcd):_0x36878a<=0x3?_0xecc79(0x120):_0xecc79(0x123):'transparent';},'toggleShowPassword'(){const _0x5d382f=_0x3040b0;this[_0x5d382f(0x10f)]=!this[_0x5d382f(0x10f)];}};},'mount'(_0x9074ea){const _0x146e0a=_0x4ad938;this[_0x146e0a(0xfd)]();},'style':_0x4ad938(0xf9),'template':_0x4ad938(0x101)};
1
+ const _0x3d76ad=_0x4fc1;(function(_0x320332,_0xbc08f7){const _0x33c112=_0x4fc1,_0x211220=_0x320332();while(!![]){try{const _0x352dc7=parseInt(_0x33c112(0x15b))/0x1+-parseInt(_0x33c112(0x132))/0x2+-parseInt(_0x33c112(0x13a))/0x3+parseInt(_0x33c112(0x156))/0x4+-parseInt(_0x33c112(0x15a))/0x5+parseInt(_0x33c112(0x172))/0x6*(parseInt(_0x33c112(0x141))/0x7)+parseInt(_0x33c112(0x16b))/0x8*(parseInt(_0x33c112(0x165))/0x9);if(_0x352dc7===_0xbc08f7)break;else _0x211220['push'](_0x211220['shift']());}catch(_0x1208a3){_0x211220['push'](_0x211220['shift']());}}}(_0x2dfa,0xd57ec));import _0x154ba3 from'@toolkit/elements/ok-icon.ok.js';import _0x506987 from'@toolkit/core/ok-overlay.ok.js';import _0x428b50 from'@toolkit/interaction/ok-flyover.ok.js';function _0x4fc1(_0x4a4f72,_0x1c696e){_0x4a4f72=_0x4a4f72-0x129;const _0x2dfac4=_0x2dfa();let _0x4fc1bb=_0x2dfac4[_0x4a4f72];return _0x4fc1bb;}function _0x2dfa(){const _0x3dff7f=['sort','5598110nlDzzT','25262IxEIzq','name','var(--okdb-warning)','isEnvAllSelected','Token\x20updated','isArray','description','json','token','/auth/permissions','1315404gdTVcW','read','message','onDone','grants','API','32LJQpYn','password','Environment','$ok','passwordStrength','scope','operations','6XztEJQ','shared','write','ADMIN_API','localeCompare','Failed\x20to\x20update\x20token','label','modal','data','keys','catalogLoading','filter','length','catalog','weak','trim','var(--okdb-danger)','peer','selectedPerms','indexOf','result','_fallback','gate','some','Gate','transparent','718692jEsYjp','stringify','godMode','hoveredPerm','var(--okdb-success)','error','envs','Failed','614010fWUjmi','close','strong','destructive','edit-token-modal','permissions','hoveredAnchor','10803513JRnwPY','entries','namespaces','validateForm','Token\x20label\x20is\x20required','routes','env','run','showPassword','PATCH','catalogError','map','application/json','$attr','opOrder','test','hoveredPermOp','.tf-header-fields,.tf-root,edit-token-modal{display:flex;flex-direction:column}.tf-root{gap:0;width:520px;max-width:88vw;position:relative}.tf-header-fields{gap:12px;padding-bottom:16px}.tf-field,.tf-header-row{display:flex;gap:10px}.tf-field{flex-direction:column;gap:4px;min-width:0}.tf-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-section{display:flex;flex-direction:column;gap:8px;padding:10px\x2012px;border:1px\x20solid\x20var(--okdb-app-surface);border-radius:6px;background:rgba(0,0,0,.15)}.tf-creds-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.tf-creds-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4;margin-top:-4px}.tf-creds-row{display:flex;gap:10px}.tf-pw-wrap{position:relative;display:flex;align-items:center}.tf-pw-wrap\x20.tf-input{padding-right:30px}.tf-pw-eye{position:absolute;right:7px;background:0\x200;border:0;color:var(--okdb-app-fg-subtle);cursor:pointer;font-size:12px;padding:0;line-height:1;user-select:none}.tf-pw-eye:hover,.tf-scope-header:hover\x20.tf-scope-name{color:var(--okdb-accent-muted)}.tf-strength-bar{height:2px;border-radius:1px;background:var(--okdb-app-surface);margin-top:3px;overflow:hidden}.tf-strength-fill{height:100%;border-radius:1px;transition:width\x20.2s,background-color\x20.2s}.tf-strength-text{font-size:9px;margin-top:2px;text-transform:uppercase;letter-spacing:.05em}.tf-input{padding:6px\x208px;border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:4px;background:0\x200;color:var(--okdb-app-fg-strong);font-size:12px;font-family:monospace;width:100%;box-sizing:border-box}.tf-input:focus{outline:0;border-color:rgba(79,193,255,.4)}.tf-hint{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-divider{height:1px;background:var(--okdb-app-surface);margin-bottom:12px}.tf-section{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.tf-scope-header{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none;padding:2px\x200}.tf-scope-name{font-size:10px;text-transform:uppercase;letter-spacing:.07em;color:var(--okdb-app-fg-muted);font-weight:600;transition:color\x20.1s}.tf-scope-count{font-size:10px;color:var(--okdb-accent);opacity:.8}.tf-scope-chevron{margin-left:auto;font-size:10px;color:var(--okdb-app-fg-subtle)}.tf-ns-block{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.tf-ns-row{display:flex;align-items:baseline;gap:8px}.tf-ns-label{font-size:11px;color:var(--okdb-app-fg-subtle);font-family:monospace;flex-shrink:0;cursor:pointer;user-select:none;transition:color\x20.1s;font-weight:600}.tf-ns-label:hover{color:var(--okdb-accent-muted)}.tf-ns-label--on{color:var(--okdb-accent)}.tf-ns-desc{font-size:10px;color:var(--okdb-app-fg-subtle);line-height:1.4}.tf-pills{display:flex;flex-wrap:wrap;gap:4px;padding-left:4px}.tf-pill-wrap{display:inline-flex}.tf-pill-warn{font-size:7px;color:rgba(215,150,60,.85);vertical-align:super;margin-left:1px;line-height:0}.tf-pill--destructive{border-color:rgba(200,140,60,.35)}.tf-pill--destructive:hover{border-color:rgba(200,140,60,.6)}.tf-pill{display:inline-flex;align-items:center;padding:2px\x208px;border-radius:4px;font-size:11px;font-family:monospace;border:1px\x20solid\x20var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;transition:background\x20.1s,border-color\x20.1s,color\x20.1s;white-space:nowrap}.tf-pill:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-pill--on{background:rgba(79,193,255,.1);border-color:rgba(79,193,255,.35);color:var(--okdb-accent)}.tf-pill--on:hover{background:rgba(79,193,255,.15)}.tf-pill--full{border-color:rgba(251,191,36,.2);color:#5a4a20}.tf-pill--full-on,.tf-pill--full:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--full-on{background:rgba(251,191,36,.1)}.tf-pill--full-on:hover{background:rgba(251,191,36,.16)}.tf-pill--add{border-style:dashed;border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-pill--add:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted);border-style:solid}.tf-pill--wild{border-color:rgba(251,191,36,.2);color:#5a4a20;font-weight:700}.tf-pill--wild-on,.tf-pill--wild:hover{border-color:rgba(251,191,36,.4);color:var(--okdb-warning-text)}.tf-pill--wild-on{background:rgba(251,191,36,.1);font-weight:700}.tf-pill--wild-on:hover{background:rgba(251,191,36,.16)}.tf-pill--wild-inherited{border-style:dashed;border-color:rgba(251,191,36,.45);color:rgba(251,191,36,.6);background:rgba(251,191,36,.05);font-weight:700}.tf-pill--wild-inherited:hover{border-color:rgba(251,191,36,.65);color:rgba(251,191,36,.8);background:rgba(251,191,36,.09)}.tf-pill--inherited{border-style:dashed;border-color:rgba(79,193,255,.5);color:rgba(79,193,255,.65);background:rgba(79,193,255,.06)}.tf-pill--inherited:hover{border-color:rgba(79,193,255,.7);color:rgba(79,193,255,.85);background:rgba(79,193,255,.1)}.tf-env-row{display:flex;flex-direction:column;gap:6px;padding:8px\x200\x2010px;border-top:1px\x20solid\x20var(--okdb-app-bg)}.tf-env-row-header{display:flex;align-items:center;justify-content:space-between}.tf-env-name{font-size:11px;font-weight:600;color:var(--okdb-app-fg-muted);font-family:monospace}.tf-env-all,.tf-env-remove{font-size:10px;color:var(--okdb-app-fg-subtle);cursor:pointer;user-select:none;padding:1px\x204px;transition:color\x20.1s}.tf-env-remove:hover{color:var(--okdb-danger)}.tf-env-all:hover{color:var(--okdb-accent-muted)}.tf-env-all--on{color:var(--okdb-warning-text)}.tf-env-all--on:hover{color:var(--okdb-warning)}.tf-error{font-size:11px;color:var(--okdb-danger);padding:6px\x200\x200}.tf-actions{display:flex;gap:8px;justify-content:flex-end;padding-top:14px;margin-top:4px;border-top:1px\x20solid\x20var(--okdb-app-surface)}.tf-btn{padding:5px\x2012px;border-radius:5px;font-size:12px;border:1px\x20solid;background:0\x200;cursor:pointer;transition:background\x20.12s,color\x20.12s}.tf-btn:disabled{opacity:.4;cursor:not-allowed}.tf-btn--primary{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.tf-btn--primary:not(:disabled):hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border);color:var(--okdb-sky)}.tf-btn--secondary{border-color:var(--okdb-app-surface-2);color:var(--okdb-app-fg-subtle)}.tf-btn--secondary:hover{background:var(--okdb-app-bg)}.tf-pip{min-width:260px;max-width:460px;background:var(--okdb-app-bg-deep);border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:5px;padding:8px\x2010px;box-shadow:0\x204px\x2018px\x20rgba(0,0,0,.75);pointer-events:none;white-space:normal;font-size:11px}.tf-pip-perm{font-family:monospace;font-size:10px;color:var(--okdb-accent);margin-bottom:3px}.tf-pip-summary{color:var(--okdb-accent-muted);line-height:1.4;margin-bottom:5px}.tf-pip-routes-hd{font-size:9px;color:var(--okdb-app-fg-subtle);text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}.tf-pip-route{display:flex;align-items:baseline;gap:5px;padding:1px\x200}.tf-pip-method{font-family:monospace;font-size:9px;color:var(--okdb-accent);width:34px;flex-shrink:0}.tf-pip-path{font-family:monospace;font-size:10px;color:var(--okdb-accent-muted);word-break:break-all}.tf-pip-bd,.tf-pip-lr{font-size:8px;border-radius:2px;padding:0\x203px;flex-shrink:0}.tf-pip-bd{color:var(--okdb-danger);background:rgba(180,50,40,.15)}.tf-pip-lr{color:var(--okdb-app-fg-muted);background:rgba(100,100,100,.12)}.tf-pip-route-desc{font-size:9px;color:var(--okdb-app-fg-subtle);padding-left:39px;margin-bottom:1px}.tf-pip-gate,.tf-pip-implied{color:var(--okdb-app-fg-subtle);font-size:10px}.tf-pip-implied{margin-top:5px;font-size:9px;font-family:monospace}','toast','/auth/tokens/','expiresAt','1619476vidmWH','collapsedScopes','query'];_0x2dfa=function(){return _0x3dff7f;};return _0x2dfa();}export default{'tag':_0x3d76ad(0x13e),'dependencies':[_0x506987,_0x154ba3,_0x428b50],'attr':{'modal':{},'token':{},'onDone':{}},'context'(_0x5ba532){const _0x3cc6ba=_0x3d76ad,_0x1752d0=_0x5ba532[_0x3cc6ba(0x14e)][_0x3cc6ba(0x163)]?.[_0x3cc6ba(0x13f)]||[],_0x4319fe=_0x1752d0['includes']('*'),_0x1d3f65={};if(!_0x4319fe){for(const _0x2abb3a of _0x1752d0)_0x1d3f65[_0x2abb3a]=!0x0;}const _0xfb9b7={},_0x291817=_0x5ba532[_0x3cc6ba(0x14e)][_0x3cc6ba(0x163)]?.['grants']||{};for(const [_0x275850,_0x313722]of Object[_0x3cc6ba(0x142)](_0x291817)){_0xfb9b7[_0x275850]={};for(const _0x200afd of Array[_0x3cc6ba(0x160)](_0x313722)?_0x313722:[])_0xfb9b7[_0x275850][_0x200afd]=!0x0;}return{'busy':!0x1,'error':null,'label':_0x5ba532[_0x3cc6ba(0x14e)]['token']?.[_0x3cc6ba(0x178)]||'','name':_0x5ba532[_0x3cc6ba(0x14e)][_0x3cc6ba(0x163)]?.['name']||'','password':'','showPassword':!0x1,'expiresAt':_0x5ba532[_0x3cc6ba(0x14e)]['token']?.[_0x3cc6ba(0x155)]?new Date(_0x5ba532[_0x3cc6ba(0x14e)][_0x3cc6ba(0x163)][_0x3cc6ba(0x155)])['toISOString']()['slice'](0x0,0x10):'','catalog':null,'catalogError':!0x1,'catalogLoading':!0x1,'godMode':_0x4319fe,'selectedPerms':_0x1d3f65,'grants':_0xfb9b7,'collapsedScopes':{},'hoveredPerm':null,'hoveredPermOp':null,'hoveredAnchor':null,'setHover'(_0x1e42df,_0xc4e5a,_0x3adc92){const _0x393141=_0x3cc6ba;this['hoveredPerm']=_0xc4e5a,this[_0x393141(0x151)]=_0x3adc92,this[_0x393141(0x140)]=_0x1e42df['currentTarget'];},'clearHover'(){const _0x13d2bd=_0x3cc6ba;this[_0x13d2bd(0x135)]=null,this[_0x13d2bd(0x151)]=null,this[_0x13d2bd(0x140)]=null;},async 'loadCatalog'(){const _0x52e5e0=_0x3cc6ba;this[_0x52e5e0(0x17c)]=!0x0;try{const _0xf914f5=await fetch(__ENV__[_0x52e5e0(0x175)]+_0x52e5e0(0x164));if(!_0xf914f5['ok'])throw new Error(_0x52e5e0(0x139));const _0x425902=await _0xf914f5[_0x52e5e0(0x162)]();this[_0x52e5e0(0x17f)]=_0x425902[_0x52e5e0(0x17a)]??_0x425902[_0x52e5e0(0x12c)];}catch{this['catalogError']=!0x0;}finally{this['catalogLoading']=!0x1;}},'togglePerm'(_0xfe2012,_0x5a51e0,_0x16b2b7){const _0x38d065=_0x3cc6ba;if(this[_0x38d065(0x134)])return;const _0x1e7b41=_0xfe2012+':*';if(this[_0x38d065(0x12a)][_0x1e7b41]){const _0x98922d={...this[_0x38d065(0x12a)]};delete _0x98922d[_0x1e7b41];for(const _0x18f762 of _0x16b2b7)_0x18f762!==_0x5a51e0&&(_0x98922d[_0xfe2012+':'+_0x18f762]=!0x0);this[_0x38d065(0x12a)]=_0x98922d;}else this['selectedPerms']={...this[_0x38d065(0x12a)],[_0xfe2012+':'+_0x5a51e0]:!this[_0x38d065(0x12a)][_0xfe2012+':'+_0x5a51e0]};},'toggleNamespace'(_0x4b0cd5,_0x2602be){const _0x300a4f=_0x3cc6ba;if(this[_0x300a4f(0x134)])return;const _0x779a1=_0x4b0cd5+':*',_0x262458={...this['selectedPerms']};if(_0x262458[_0x779a1])delete _0x262458[_0x779a1];else{for(const _0x30e328 of _0x2602be)delete _0x262458[_0x4b0cd5+':'+_0x30e328];_0x262458[_0x779a1]=!0x0;}this['selectedPerms']=_0x262458;},'toggleGodMode'(){const _0x124bce=_0x3cc6ba;this[_0x124bce(0x134)]=!this['godMode'],this[_0x124bce(0x134)]&&(this[_0x124bce(0x12a)]={});},'toggleScope'(_0x2916e6){const _0x59ad28=_0x3cc6ba;this[_0x59ad28(0x157)]={...this[_0x59ad28(0x157)],[_0x2916e6]:!this['collapsedScopes'][_0x2916e6]};},'isCollapsed'(_0x310e84){const _0x41bbd0=_0x3cc6ba;return!!this[_0x41bbd0(0x157)][_0x310e84];},'scopeSelectionCount'(_0x2bc7b3){const _0x15d048=_0x3cc6ba;let _0x1bb5f4=0x0,_0x11b938=0x0;for(const _0x24d938 of _0x2bc7b3[_0x15d048(0x143)])for(const _0x501177 of _0x24d938[_0x15d048(0x171)])_0x11b938++,(this['selectedPerms'][_0x24d938['ns']+':'+_0x501177]||this[_0x15d048(0x12a)][_0x24d938['ns']+':*'])&&_0x1bb5f4++;return _0x1bb5f4>0x0?_0x1bb5f4+'/'+_0x11b938:'';},'addGrantEnv'(_0x3ab918){const _0x5a9655=_0x3cc6ba;_0x3ab918&&!this['grants'][_0x3ab918]&&(this[_0x5a9655(0x169)]={...this[_0x5a9655(0x169)],[_0x3ab918]:{}});},'removeGrantEnv'(_0x158ce3){const _0x437eb8=_0x3cc6ba,_0x2c8874={...this['grants']};delete _0x2c8874[_0x158ce3],this[_0x437eb8(0x169)]=_0x2c8874;},'availableGrantEnvs'(){const _0xbdd425=_0x3cc6ba;return this[_0xbdd425(0x17f)]?.[_0xbdd425(0x138)]?this[_0xbdd425(0x17f)][_0xbdd425(0x138)]['filter'](_0xcfdc4f=>!this['grants'][_0xcfdc4f]):[];},'getPermSections'(){const _0x439b94=_0x3cc6ba;if(!this[_0x439b94(0x17f)]?.[_0x439b94(0x143)])return[];const _0x4f104c=this['catalog'][_0x439b94(0x14f)]||['read','query',_0x439b94(0x148),_0x439b94(0x174),'work','peer'];return[{'scope':_0x439b94(0x147),'label':_0x439b94(0x16d)},{'scope':'system','label':'System'},{'scope':_0x439b94(0x12e),'label':_0x439b94(0x130)}][_0x439b94(0x14c)](_0x5a3db9=>({'scope':_0x5a3db9[_0x439b94(0x170)],'label':_0x5a3db9[_0x439b94(0x178)],'namespaces':Object[_0x439b94(0x142)](this[_0x439b94(0x17f)][_0x439b94(0x143)])[_0x439b94(0x17d)](([,_0x3477e6])=>_0x3477e6[_0x439b94(0x170)]===_0x5a3db9['scope'])[_0x439b94(0x14c)](([_0x4cecca,_0x3ad58a])=>({'ns':_0x4cecca,'nsLabel':_0x3ad58a['label'],'nsDescription':_0x3ad58a[_0x439b94(0x161)],'operations':Object[_0x439b94(0x17b)](_0x3ad58a[_0x439b94(0x171)])[_0x439b94(0x159)]((_0x340e58,_0x41193f)=>{const _0x3328a8=_0x439b94,_0x2bc1a4=_0x4f104c[_0x3328a8(0x12b)](_0x340e58),_0x28651f=_0x4f104c[_0x3328a8(0x12b)](_0x41193f);return-0x1===_0x2bc1a4&&-0x1===_0x28651f?_0x340e58[_0x3328a8(0x176)](_0x41193f):-0x1===_0x2bc1a4?0x1:-0x1===_0x28651f?-0x1:_0x2bc1a4-_0x28651f;}),'operationMeta':_0x3ad58a[_0x439b94(0x171)]}))}))[_0x439b94(0x17d)](_0x5b221a=>_0x5b221a[_0x439b94(0x143)][_0x439b94(0x17e)]>0x0);},'getPermOps'(_0x4d9007,_0x3efba4,_0x561dd4){const _0x4298d5=_0x3cc6ba;return _0x3efba4[_0x4298d5(0x14c)](_0x2afdf3=>{const _0xca2703=_0x4298d5,_0x420e06=_0x561dd4?.[_0x2afdf3]||{},_0x4e7d5d=_0x420e06[_0xca2703(0x146)]||[];return{'ns':_0x4d9007,'op':_0x2afdf3,'perm':_0x4d9007+':'+_0x2afdf3,'summary':_0x420e06['summary']||'','routes':_0x4e7d5d,'hasDestructive':_0x4e7d5d[_0xca2703(0x12f)](_0x3b699d=>_0x3b699d[_0xca2703(0x13d)]),'checked':!!this['selectedPerms'][_0x4d9007+':'+_0x2afdf3]||!!this[_0xca2703(0x12a)][_0x4d9007+':*']};});},'getImpliedBy'(_0x284dd3){const _0x5d8c15=_0x3cc6ba,_0x12d218=this[_0x5d8c15(0x17f)]?.['implies']||{};return Object[_0x5d8c15(0x142)](_0x12d218)[_0x5d8c15(0x17d)](([,_0x5798cc])=>_0x5798cc['includes'](_0x284dd3))[_0x5d8c15(0x14c)](([_0xc9b01b])=>_0xc9b01b);},'isNsAllSelected'(_0x19ecd6){const _0x31a45c=_0x3cc6ba;return!!this[_0x31a45c(0x12a)][_0x19ecd6+':*'];},'isEnvAllSelected'(_0x21362b){const _0x3e51e4=_0x3cc6ba;return!!this[_0x3e51e4(0x169)][_0x21362b]?.['*'];},'isEnvWildInherited'(_0x3c3d50){const _0x481d9e=_0x3cc6ba;return!this[_0x481d9e(0x15e)](_0x3c3d50)&&(this['godMode']||!!this['selectedPerms']['*']);},'isNsAllSelectedForGrant'(_0x3f9e1b,_0x465b1c){const _0x4e5a14=_0x3cc6ba;return!!this[_0x4e5a14(0x169)][_0x3f9e1b]?.['*']||!!this[_0x4e5a14(0x169)][_0x3f9e1b]?.[_0x465b1c+':*'];},'isNsWildInheritedForGrant'(_0x2dda9f,_0xe6c2cc){const _0x499945=_0x3cc6ba;return!this['isNsAllSelectedForGrant'](_0x2dda9f,_0xe6c2cc)&&(this['godMode']||!!this[_0x499945(0x12a)]['*']||!!this[_0x499945(0x12a)][_0xe6c2cc+':*']);},'toggleGrantPerm'(_0x4388f5,_0x3858e0,_0x55265f,_0x2052f6){const _0x5a310f=_0x3cc6ba,_0x50ee39=_0x3858e0+':'+_0x55265f,_0x2c883d=_0x3858e0+':*',_0x2a46b6={...this[_0x5a310f(0x169)][_0x4388f5]||{}};if(_0x2a46b6['*'])delete _0x2a46b6['*'];else{if(_0x2a46b6[_0x2c883d]){delete _0x2a46b6[_0x2c883d];for(const _0x1a230c of _0x2052f6)_0x1a230c!==_0x55265f&&(_0x2a46b6[_0x3858e0+':'+_0x1a230c]=!0x0);}else _0x2a46b6[_0x50ee39]=!_0x2a46b6[_0x50ee39];}this[_0x5a310f(0x169)]={...this['grants'],[_0x4388f5]:_0x2a46b6};},'toggleGrantNamespace'(_0x969c5e,_0x53b663,_0x1fa6b0){const _0x16a080=_0x53b663+':*',_0x32bdb8={...this['grants'][_0x969c5e]||{}};if(_0x32bdb8['*'])delete _0x32bdb8['*'];else{if(_0x32bdb8[_0x16a080])delete _0x32bdb8[_0x16a080];else{for(const _0x5517d5 of _0x1fa6b0)delete _0x32bdb8[_0x5517d5['perm']];_0x32bdb8[_0x16a080]=!0x0;}}this['grants']={...this['grants'],[_0x969c5e]:_0x32bdb8};},'toggleGrantAllPerms'(_0x246968){const _0xd284e7=_0x3cc6ba,_0x231f04=this[_0xd284e7(0x169)][_0x246968]||{};if(_0x231f04['*']){const _0x1c800b={..._0x231f04};delete _0x1c800b['*'],this[_0xd284e7(0x169)]={...this['grants'],[_0x246968]:_0x1c800b};}else this[_0xd284e7(0x169)]={...this[_0xd284e7(0x169)],[_0x246968]:{'*':!0x0}};},'getGrantEntries'(){const _0xbd7a19=_0x3cc6ba;if(!this[_0xbd7a19(0x17f)]?.['namespaces'])return[];const _0x31c409=this[_0xbd7a19(0x17f)][_0xbd7a19(0x14f)]||[_0xbd7a19(0x166),_0xbd7a19(0x158),_0xbd7a19(0x148),_0xbd7a19(0x174),'work',_0xbd7a19(0x129)],_0x203e1c=Object[_0xbd7a19(0x142)](this[_0xbd7a19(0x17f)]['namespaces'])[_0xbd7a19(0x17d)](([,_0x328623])=>_0xbd7a19(0x147)===_0x328623['scope'])[_0xbd7a19(0x14c)](([_0x4d5fc9,_0x4cd487])=>({'ns':_0x4d5fc9,'operations':Object[_0xbd7a19(0x17b)](_0x4cd487['operations'])[_0xbd7a19(0x159)]((_0x5e6a1b,_0x562bc1)=>{const _0x53386e=_0xbd7a19,_0x230f88=_0x31c409[_0x53386e(0x12b)](_0x5e6a1b),_0x587fc9=_0x31c409[_0x53386e(0x12b)](_0x562bc1);return-0x1===_0x230f88&&-0x1===_0x587fc9?_0x5e6a1b[_0x53386e(0x176)](_0x562bc1):-0x1===_0x230f88?0x1:-0x1===_0x587fc9?-0x1:_0x230f88-_0x587fc9;})})),_0x1e8564=this[_0xbd7a19(0x12a)],_0x508284=this['godMode'];return Object['entries'](this[_0xbd7a19(0x169)])[_0xbd7a19(0x14c)](([_0x271a7e,_0x5e392f])=>({'env':_0x271a7e,'globalCoverAll':_0x508284||!!_0x1e8564['*'],'nGroups':_0x203e1c['map'](({ns:_0x18303a,operations:_0x310706})=>({'ns':_0x18303a,'ops':_0x310706[_0xbd7a19(0x14c)](_0x109b2c=>{const _0xc92214=_0xbd7a19,_0x26081b=_0x18303a+':'+_0x109b2c,_0x339838=!!_0x5e392f[_0x26081b]||!!_0x5e392f[_0x18303a+':*']||!!_0x5e392f['*'],_0x1bb2da=!_0x339838&&(_0x508284||!!_0x1e8564['*']||!!_0x1e8564[_0x18303a+':*']||!!_0x1e8564[_0x26081b]),_0x3403a8=this[_0xc92214(0x17f)][_0xc92214(0x143)][_0x18303a]?.['operations']?.[_0x109b2c]||{};return{'perm':_0x26081b,'op':_0x109b2c,'summary':_0x3403a8['summary']||'','routes':_0x3403a8[_0xc92214(0x146)]||[],'hasDestructive':(_0x3403a8[_0xc92214(0x146)]||[])[_0xc92214(0x12f)](_0x5ca1f1=>_0x5ca1f1[_0xc92214(0x13d)]),'checked':_0x339838,'inherited':_0x1bb2da};})}))}));},'validateForm'(){const _0x431a54=_0x3cc6ba;if(!this[_0x431a54(0x178)][_0x431a54(0x181)]())throw new Error(_0x431a54(0x145));return!0x0;},async 'save'(){const _0x29fdb8=_0x3cc6ba;this['error']=null;try{this[_0x29fdb8(0x144)](),this['busy']=!0x0;const _0x3c315d={'label':this[_0x29fdb8(0x178)][_0x29fdb8(0x181)]()};if(this[_0x29fdb8(0x155)]?_0x3c315d['expiresAt']=new Date(this[_0x29fdb8(0x155)])['getTime']():_0x3c315d[_0x29fdb8(0x155)]=null,this[_0x29fdb8(0x134)])_0x3c315d[_0x29fdb8(0x13f)]=['*'];else{if(this[_0x29fdb8(0x14b)]&&void 0x0!==this[_0x29fdb8(0x12a)][_0x29fdb8(0x12d)]){const _0x2da954=String(this[_0x29fdb8(0x12a)][_0x29fdb8(0x12d)]||'')['split'](',')['map'](_0x4ad967=>_0x4ad967[_0x29fdb8(0x181)]())[_0x29fdb8(0x17d)](_0x20e00e=>_0x20e00e);_0x2da954['length']&&(_0x3c315d[_0x29fdb8(0x13f)]=_0x2da954);}else{const _0x4624ff=Object[_0x29fdb8(0x142)](this[_0x29fdb8(0x12a)])[_0x29fdb8(0x17d)](([_0x42bc0a,_0x17a9ef])=>_0x17a9ef&&_0x29fdb8(0x12d)!==_0x42bc0a)[_0x29fdb8(0x14c)](([_0x49e6e2])=>_0x49e6e2);_0x4624ff[_0x29fdb8(0x17e)]&&(_0x3c315d[_0x29fdb8(0x13f)]=_0x4624ff);}}const _0x1bb69f={};for(const [_0x112fc4,_0x5d9132]of Object[_0x29fdb8(0x142)](this[_0x29fdb8(0x169)])){const _0x449a63=Object[_0x29fdb8(0x142)](_0x5d9132)['filter'](([,_0x1f5ffa])=>_0x1f5ffa)['map'](([_0x3db89a])=>_0x3db89a);_0x449a63['length']&&(_0x1bb69f[_0x112fc4]=_0x449a63);}Object['keys'](_0x1bb69f)['length']&&(_0x3c315d['grants']=_0x1bb69f),this[_0x29fdb8(0x15c)]['trim']()&&(_0x3c315d[_0x29fdb8(0x15c)]=this[_0x29fdb8(0x15c)][_0x29fdb8(0x181)](),this[_0x29fdb8(0x16c)]&&(_0x3c315d['password']=this[_0x29fdb8(0x16c)]));const _0x251b25=await fetch(__ENV__[_0x29fdb8(0x16a)]+_0x29fdb8(0x154)+encodeURIComponent(_0x5ba532[_0x29fdb8(0x14e)]['token']['id']),{'method':_0x29fdb8(0x14a),'headers':{'Content-Type':_0x29fdb8(0x14d)},'body':JSON[_0x29fdb8(0x133)](_0x3c315d)});if(!_0x251b25['ok']){const _0x31f860=await _0x251b25[_0x29fdb8(0x162)]();throw new Error(_0x31f860?.[_0x29fdb8(0x137)]?.[_0x29fdb8(0x167)]||_0x29fdb8(0x177));}_0x5ba532[_0x29fdb8(0x16e)][_0x29fdb8(0x173)]?.[_0x29fdb8(0x153)]?.['success']?.(_0x29fdb8(0x15f)),await _0x5ba532[_0x29fdb8(0x14e)][_0x29fdb8(0x179)][_0x29fdb8(0x13b)](),await _0x5ba532['$attr'][_0x29fdb8(0x168)]?.(_0x5ba532[_0x29fdb8(0x14e)][_0x29fdb8(0x163)]['id']);}catch(_0x5e5c14){this[_0x29fdb8(0x137)]=_0x5e5c14?.[_0x29fdb8(0x167)]||String(_0x5e5c14),_0x5ba532[_0x29fdb8(0x16e)]['shared']?.[_0x29fdb8(0x153)]?.[_0x29fdb8(0x137)]?.(this[_0x29fdb8(0x137)]);}finally{this['busy']=!0x1;}},'cancel'(){const _0x3d7175=_0x3cc6ba;_0x5ba532['$attr'][_0x3d7175(0x179)][_0x3d7175(0x13b)]();},'passwordStrength'(_0x3436a3){const _0x39938e=_0x3cc6ba;if(!_0x3436a3)return 0x0;let _0x3a237c=0x0;return _0x3436a3[_0x39938e(0x17e)]>=0x8&&_0x3a237c++,_0x3436a3[_0x39938e(0x17e)]>=0xe&&_0x3a237c++,/[A-Z]/['test'](_0x3436a3)&&_0x3a237c++,/[0-9]/[_0x39938e(0x150)](_0x3436a3)&&_0x3a237c++,/[^A-Za-z0-9]/['test'](_0x3436a3)&&_0x3a237c++,_0x3a237c;},'passwordStrengthLabel'(_0x3ad2df){const _0x5577c5=_0x3cc6ba,_0x451dc0=this[_0x5577c5(0x16f)](_0x3ad2df);return _0x3ad2df?_0x451dc0<=0x1?_0x5577c5(0x180):_0x451dc0<=0x3?'fair':_0x5577c5(0x13c):'';},'passwordStrengthColor'(_0x4c2593){const _0x243960=_0x3cc6ba,_0x31a596=this[_0x243960(0x16f)](_0x4c2593);return _0x4c2593?_0x31a596<=0x1?_0x243960(0x182):_0x31a596<=0x3?_0x243960(0x15d):_0x243960(0x136):_0x243960(0x131);},'toggleShowPassword'(){const _0x7af312=_0x3cc6ba;this[_0x7af312(0x149)]=!this[_0x7af312(0x149)];}};},'mount'(_0x19d846){this['loadCatalog']();},'style':_0x3d76ad(0x152),'template':'<div\x20class=\x22tf-root\x22><if\x20:=\x22busy\x22><ok-overlay><div\x20class=\x22loader-center\x22><ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:28px;height:28px;\x22/></div></ok-overlay></if><div\x20class=\x22tf-header-fields\x22><div\x20class=\x22tf-header-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:2;\x22><span\x20class=\x22tf-label\x22>Label</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22e.g.,\x20API\x20Client\x22\x20:value=\x22label\x22\x20@input=\x22label\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1.5;\x22><span\x20class=\x22tf-label\x22>Expires\x20<span\x20style=\x22opacity:.4;\x22>(optional)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22datetime-local\x22\x20:value=\x22expiresAt\x22\x20@input=\x22expiresAt\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22></div></div><div\x20class=\x22tf-creds-section\x22><div><div\x20class=\x22tf-creds-label\x22>Login\x20credentials\x20<span\x20style=\x22opacity:.4;\x20text-transform:none;\x20font-weight:400;\x20letter-spacing:0;\x22>(optional)</span></div><div\x20class=\x22tf-creds-hint\x22>If\x20set,\x20this\x20token\x20can\x20also\x20be\x20used\x20via\x20username\x20+\x20password\x20authentication.</div></div><div\x20class=\x22tf-creds-row\x22><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Username</span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22leave\x20blank\x20for\x20token-only\x22\x20:value=\x22name\x22\x20@input=\x22name\x20=\x20$el.value\x22\x20:disabled=\x22busy\x22\x20autocomplete=\x22off\x22></div><div\x20class=\x22tf-field\x22\x20style=\x22flex:1;\x22><span\x20class=\x22tf-label\x22>Password\x20<span\x20style=\x22opacity:.4;\x22>(new)</span></span><div\x20class=\x22tf-pw-wrap\x22><input\x20class=\x22tf-input\x22\x20:type=\x22showPassword\x20?\x20\x27text\x27\x20:\x20\x27password\x27\x22\x20placeholder=\x22leave\x20blank\x20to\x20keep\x22\x20:value=\x22password\x22\x20@input=\x22password\x20=\x20$el.value\x22\x20:disabled=\x22busy\x20||\x20!name\x22\x20autocomplete=\x22new-password\x22>\x20<button\x20class=\x22tf-pw-eye\x22\x20@click=\x22toggleShowPassword()\x22\x20type=\x22button\x22\x20tabindex=\x22-1\x22>{{\x20showPassword\x20?\x20\x27🙈\x27\x20:\x20\x27👁\x27\x20}}</button></div><if\x20:=\x22password\x22><div\x20class=\x22tf-strength-bar\x22><div\x20class=\x22tf-strength-fill\x22\x20:style=\x22\x27width:\x27\x20+\x20(passwordStrength(password)/5*100)\x20+\x20\x27%;\x20background:\x27\x20+\x20passwordStrengthColor(password)\x22/></div><div\x20class=\x22tf-strength-text\x22\x20:style=\x22\x27color:\x27\x20+\x20passwordStrengthColor(password)\x22>{{\x20passwordStrengthLabel(password)\x20}}</div></if></div></div></div></div><div\x20class=\x22tf-divider\x22/><if\x20:=\x22catalogLoading\x22><div\x20class=\x22tf-hint\x22\x20style=\x22padding-bottom:12px;\x22>Loading\x20permissions…</div></if><if\x20:=\x22catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22><span\x20class=\x22tf-label\x22>Permissions\x20<span\x20style=\x22color:var(--okdb-danger);\x22>(fallback)</span></span>\x20<input\x20class=\x22tf-input\x22\x20type=\x22text\x22\x20placeholder=\x22data:read,\x20data:write\x22\x20:value=\x22selectedPerms._fallback\x20||\x20\x27\x27\x22\x20@input=\x22selectedPerms\x20=\x20{\x20_fallback:\x20$el.value\x20}\x22\x20:disabled=\x22busy\x22>\x20<span\x20class=\x22tf-hint\x22>Comma-separated\x20permission\x20strings</span></div></if><if\x20:=\x22catalog\x20&&\x20!catalogError\x20&&\x20!catalogLoading\x22><div\x20class=\x22tf-section\x22\x20style=\x22gap:4px;\x22><div\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--full\x27,\x20godMode\x20?\x20\x27tf-pill--full-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGodMode()\x22\x20style=\x22width:fit-content;\x22>★\x20&nbsp;Full\x20access\x20—\x20all\x20permissions</div></div><if\x20:=\x22!godMode\x22><each\x20:of=\x22getPermSections()\x22\x20let:item=\x22section\x22><div\x20class=\x22tf-section\x22><div\x20class=\x22tf-scope-header\x22\x20@click=\x22toggleScope(section.scope)\x22><span\x20class=\x22tf-scope-name\x22>{{\x20section.label\x20}}</span><if\x20:=\x22scopeSelectionCount(section)\x22><span\x20class=\x22tf-scope-count\x22>{{\x20scopeSelectionCount(section)\x20}}</span></if><span\x20class=\x22tf-scope-chevron\x22>{{\x20isCollapsed(section.scope)\x20?\x20\x27▸\x27\x20:\x20\x27▾\x27\x20}}</span></div><if\x20:=\x22!isCollapsed(section.scope)\x22><each\x20:of=\x22section.namespaces\x22\x20let:item=\x22nsEntry\x22><div\x20class=\x22tf-ns-block\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsEntry.nsLabel\x20||\x20nsEntry.ns\x20}}</span><if\x20:=\x22nsEntry.nsDescription\x22><span\x20class=\x22tf-ns-desc\x22>{{\x20nsEntry.nsDescription\x20}}</span></if></div><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelected(nsEntry.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleNamespace(nsEntry.ns,\x20nsEntry.operations)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22getPermOps(nsEntry.ns,\x20nsEntry.operations,\x20nsEntry.operationMeta)\x22\x20let:item=\x22permOp\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20permOp.perm,\x20permOp)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20permOp.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20\x27\x27,\x20permOp.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22togglePerm(permOp.ns,\x20permOp.op,\x20nsEntry.operations)\x22>{{\x20permOp.op\x20}}<if\x20:=\x22permOp.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></if></div></each><if\x20:=\x22catalog.envs\x20&&\x20catalog.envs.length\x20>\x200\x22><div\x20class=\x22tf-divider\x22/><div\x20class=\x22tf-section\x22\x20style=\x22gap:8px;\x22><div\x20class=\x22tf-scope-header\x22\x20style=\x22cursor:default;\x20pointer-events:none;\x22><span\x20class=\x22tf-scope-name\x22>Per-env\x20grants</span>\x20<span\x20class=\x22tf-hint\x22\x20style=\x22margin-left:6px;\x22>extra\x20permissions\x20for\x20a\x20specific\x20environment</span></div><if\x20:=\x22availableGrantEnvs().length\x20>\x200\x22><div\x20class=\x22tf-pills\x22><each\x20:of=\x22availableGrantEnvs()\x22\x20let:item=\x22envName\x22><span\x20class=\x22tf-pill\x20tf-pill--add\x22\x20@click=\x22addGrantEnv(envName)\x22>+\x20{{\x20envName\x20}}</span></each></div></if><each\x20:of=\x22getGrantEntries()\x22\x20let:item=\x22grantEntry\x22><div\x20class=\x22tf-env-row\x22><div\x20class=\x22tf-env-row-header\x22><div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22><span\x20class=\x22tf-env-name\x22>{{\x20grantEntry.env\x20}}</span>\x20<span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isEnvAllSelected(grantEntry.env)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isEnvWildInherited(grantEntry.env)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantAllPerms(grantEntry.env)\x22\x20title=\x22*\x20—\x20all\x20permissions\x20for\x20this\x20env\x22\x20style=\x22font-size:11px;\x20padding:1px\x206px;\x22>*</span><if\x20:=\x22grantEntry.globalCoverAll\x22><span\x20class=\x22tf-hint\x22\x20style=\x22color:rgba(79,193,255,.35);\x22\x20title=\x22All\x20permissions\x20already\x20covered\x20by\x20global\x20*\x20or\x20god\x20mode\x22>inherited</span></if></div><span\x20class=\x22tf-env-remove\x22\x20@click=\x22removeGrantEnv(grantEntry.env)\x22>✕\x20remove</span></div><each\x20:of=\x22grantEntry.nGroups\x22\x20let:item=\x22nsGroup\x22><div\x20class=\x22tf-ns-row\x22><span\x20:class=\x22[\x27tf-ns-label\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-ns-label--on\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22Toggle\x20all\x22>{{\x20nsGroup.ns\x20}}</span><div\x20class=\x22tf-pills\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20\x27tf-pill--wild\x27,\x20isNsAllSelectedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-on\x27\x20:\x20isNsWildInheritedForGrant(grantEntry.env,\x20nsGroup.ns)\x20?\x20\x27tf-pill--wild-inherited\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantNamespace(grantEntry.env,\x20nsGroup.ns,\x20nsGroup.ops)\x22\x20title=\x22ns:*\x20—\x20toggle\x20all\x22>*</span><each\x20:of=\x22nsGroup.ops\x22\x20let:item=\x22grantPerm\x22><span\x20class=\x22tf-pill-wrap\x22\x20@mouseenter=\x22setHover($event,\x20grantPerm.perm,\x20grantPerm)\x22\x20@mouseleave=\x22clearHover()\x22><span\x20:class=\x22[\x27tf-pill\x27,\x20grantPerm.checked\x20?\x20\x27tf-pill--on\x27\x20:\x20grantPerm.inherited\x20?\x20\x27tf-pill--inherited\x27\x20:\x20\x27\x27,\x20grantPerm.hasDestructive\x20?\x20\x27tf-pill--destructive\x27\x20:\x20\x27\x27]\x22\x20@click=\x22toggleGrantPerm(grantEntry.env,\x20nsGroup.ns,\x20grantPerm.op,\x20nsGroup.ops.map(o\x20=>\x20o.op))\x22>{{\x20grantPerm.op\x20}}<if\x20:=\x22grantPerm.hasDestructive\x22><span\x20class=\x22tf-pill-warn\x22>⚠</span></if></span></span></each></div></div></each></div></each></div></if></if></if><if\x20:=\x22error\x22><div\x20class=\x22tf-error\x22>{{\x20error\x20}}</div></if><div\x20class=\x22tf-actions\x22><button\x20class=\x22tf-btn\x20tf-btn--secondary\x22\x20@click=\x22cancel()\x22\x20:disabled=\x22busy\x22>Cancel</button>\x20<button\x20class=\x22tf-btn\x20tf-btn--primary\x22\x20@click=\x22save()\x22\x20:disabled=\x22busy\x20||\x20!label.trim()\x22>Save\x20Changes</button></div><ok-flyover\x20:open=\x22hoveredPermOp\x20!=\x20null\x22\x20:anchor=\x22hoveredAnchor\x22\x20placement=\x22bottom-start\x22\x20:gap=\x224\x22\x20style=\x22--ok-flyover-bg:transparent;\x20--ok-flyover-border:none;\x20--ok-flyover-shadow:none;\x20--ok-flyover-radius:0;\x22><if\x20:=\x22hoveredPermOp\x22><div\x20class=\x22tf-pip\x22><div\x20class=\x22tf-pip-perm\x22>{{\x20hoveredPermOp.perm\x20||\x20hoveredPerm\x20}}</div><if\x20:=\x22hoveredPermOp.summary\x22><div\x20class=\x22tf-pip-summary\x22>{{\x20hoveredPermOp.summary\x20}}</div></if><if\x20:=\x22hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length\x22><div\x20class=\x22tf-pip-routes-hd\x22>Routes\x20({{\x20hoveredPermOp.routes.length\x20}})</div><each\x20:of=\x22hoveredPermOp.routes\x22\x20let:item=\x22r\x22><div\x20class=\x22tf-pip-route\x22><span\x20class=\x22tf-pip-method\x22>{{\x20r.method\x20}}</span>\x20<span\x20class=\x22tf-pip-path\x22>{{\x20r.path\x20}}</span><if\x20:=\x22r.destructive\x22><span\x20class=\x22tf-pip-bd\x22>destructive</span></if><if\x20:=\x22r.longRunning\x22><span\x20class=\x22tf-pip-lr\x22>long</span></if></div><if\x20:=\x22r.summary\x22><div\x20class=\x22tf-pip-route-desc\x22>{{\x20r.summary\x20}}</div></if></each></if><if\x20:=\x22!(hoveredPermOp.routes\x20&&\x20hoveredPermOp.routes.length)\x22><div\x20class=\x22tf-pip-gate\x22>Gate\x20—\x20combine\x20with\x20underlying\x20namespace\x20permissions.</div></if><if\x20:=\x22getImpliedBy(hoveredPerm).length\x22><div\x20class=\x22tf-pip-implied\x22>Implied\x20by:\x20{{\x20getImpliedBy(hoveredPerm).join(\x27,\x20\x27)\x20}}</div></if></div></if></ok-flyover></div>'};
@@ -1 +1 @@
1
- var _0x3162fc=_0x4c0f;function _0x4f29(){var _0x726bc6=['perm-info-popover','661760TAnhDE','732314Tesooc','1176814HwgCDS','190477bOBJlZ','48jtRCAl','239993FZkHpr','87356yFQXtZ','282ozCMkn','30lWfPlp','75KwYurm','2100414XWmzRJ','9rjmSBY','1qtnZLU','<style>.pip\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20position:\x20absolute;\x0a\x20\x20\x20\x20\x20\x20\x20\x20bottom:\x20calc(100%\x20+\x206px);\x0a\x20\x20\x20\x20\x20\x20\x20\x20left:\x2050%;\x0a\x20\x20\x20\x20\x20\x20\x20\x20transform:\x20translateX(-50%);\x0a\x20\x20\x20\x20\x20\x20\x20\x20z-index:\x20200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x20280px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20max-width:\x20480px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20background:\x20var(--okdb-app-bg-deep);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x205px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x208px\x2010px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20box-shadow:\x200\x204px\x2016px\x20rgba(0,0,0,.7);\x0a\x20\x20\x20\x20\x20\x20\x20\x20pointer-events:\x20none;\x0a\x20\x20\x20\x20\x20\x20\x20\x20white-space:\x20normal;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-perm\x20\x20\x20{\x20font-family:\x20monospace;\x20font-size:\x2010px;\x20color:\x20var(--okdb-accent);\x20margin-bottom:\x203px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-summary\x20{\x20font-size:\x2011px;\x20color:\x20var(--okdb-accent-muted);\x20line-height:\x201.4;\x20margin-bottom:\x206px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-routes-hd\x20{\x20font-size:\x209px;\x20color:\x20var(--okdb-app-fg-subtle);\x20text-transform:\x20uppercase;\x20letter-spacing:\x20.06em;\x20margin-bottom:\x203px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-route\x20\x20{\x20display:\x20flex;\x20align-items:\x20baseline;\x20gap:\x205px;\x20padding:\x201px\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-method\x20{\x20font-family:\x20monospace;\x20font-size:\x209px;\x20color:\x20var(--okdb-accent);\x20width:\x2034px;\x20flex-shrink:\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-path\x20\x20\x20{\x20font-family:\x20monospace;\x20font-size:\x2010px;\x20color:\x20var(--okdb-accent-muted);\x20word-break:\x20break-all;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-bd\x20\x20\x20\x20\x20{\x20font-size:\x208px;\x20color:\x20var(--okdb-danger);\x20background:\x20rgba(180,50,40,.15);\x20border-radius:\x202px;\x20padding:\x200\x203px;\x20flex-shrink:\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-lr\x20\x20\x20\x20\x20{\x20font-size:\x208px;\x20color:\x20var(--okdb-app-fg-muted);\x20background:\x20rgba(100,100,100,.12);\x20border-radius:\x202px;\x20padding:\x200\x203px;\x20flex-shrink:\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-route-desc\x20{\x20font-size:\x209px;\x20color:\x20var(--okdb-app-fg-subtle);\x20padding-left:\x2039px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-implied\x20{\x20margin-top:\x206px;\x20font-size:\x209px;\x20color:\x20var(--okdb-app-fg-subtle);\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-implied\x20code\x20{\x20font-family:\x20monospace;\x20color:\x20var(--okdb-accent-muted);\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-gate\x20{\x20font-size:\x2010px;\x20color:\x20var(--okdb-app-fg-subtle);\x20}</style><div\x20class=\x22pip\x22><div\x20class=\x22pip-perm\x22>{{\x20$attr.permission\x20}}</div><if\x20:=\x22$attr.summary\x22><div\x20class=\x22pip-summary\x22>{{\x20$attr.summary\x20}}</div></if><if\x20:=\x22$attr.routes\x20&&\x20$attr.routes.length\x22><div\x20class=\x22pip-routes-hd\x22>Routes\x20({{\x20$attr.routes.length\x20}})</div><each\x20:of=\x22$attr.routes\x22\x20let:item=\x22r\x22><div\x20class=\x22pip-route\x22><span\x20class=\x22pip-method\x22>{{\x20r.method\x20}}</span>\x20<span\x20class=\x22pip-path\x22>{{\x20r.path\x20}}</span><if\x20:=\x22r.destructive\x22><span\x20class=\x22pip-bd\x22>destructive</span></if><if\x20:=\x22r.longRunning\x22><span\x20class=\x22pip-lr\x22>long</span></if></div><if\x20:=\x22r.summary\x22><div\x20class=\x22pip-route-desc\x22>{{\x20r.summary\x20}}</div></if></each></if><if\x20:=\x22!($attr.routes\x20&&\x20$attr.routes.length)\x22><div\x20class=\x22pip-gate\x22>Gate\x20—\x20not\x20tied\x20to\x20a\x20route.\x20Combine\x20with\x20underlying\x20namespace\x20permissions.</div></if><if\x20:=\x22$attr.impliedBy\x20&&\x20$attr.impliedBy.length\x22><div\x20class=\x22pip-implied\x22>Implied\x20by:<each\x20:of=\x22$attr.impliedBy\x22\x20let:item=\x22p\x22><code>{{\x20p\x20}}</code></each></div></if></div>'];_0x4f29=function(){return _0x726bc6;};return _0x4f29();}(function(_0xb16fef,_0x13fb5d){var _0x15d5e0=_0x4c0f,_0x33b968=_0xb16fef();while(!![]){try{var _0x47696d=-parseInt(_0x15d5e0(0x172))/0x1*(parseInt(_0x15d5e0(0x168))/0x2)+parseInt(_0x15d5e0(0x170))/0x3+parseInt(_0x15d5e0(0x16c))/0x4*(-parseInt(_0x15d5e0(0x16f))/0x5)+-parseInt(_0x15d5e0(0x16d))/0x6*(-parseInt(_0x15d5e0(0x169))/0x7)+-parseInt(_0x15d5e0(0x166))/0x8*(parseInt(_0x15d5e0(0x171))/0x9)+-parseInt(_0x15d5e0(0x16e))/0xa*(parseInt(_0x15d5e0(0x167))/0xb)+-parseInt(_0x15d5e0(0x16a))/0xc*(-parseInt(_0x15d5e0(0x16b))/0xd);if(_0x47696d===_0x13fb5d)break;else _0x33b968['push'](_0x33b968['shift']());}catch(_0x501671){_0x33b968['push'](_0x33b968['shift']());}}}(_0x4f29,0xd09c1));function _0x4c0f(_0x1568bc,_0xcaf5af){_0x1568bc=_0x1568bc-0x165;var _0x4f2920=_0x4f29();var _0x4c0f27=_0x4f2920[_0x1568bc];return _0x4c0f27;}export default{'tag':_0x3162fc(0x165),'attr':{'permission':{},'summary':{},'routes':{},'impliedBy':{}},'template':_0x3162fc(0x173)};
1
+ function _0x1465(){var _0x165273=['11rwqpPZ','939830tlbGoG','17181820ySgwBU','24LiPrYa','perm-info-popover','1043114TJwegl','9931572VxHPCC','85684YfzDPR','4FmUYHV','1445340GayEIm','12IeMubk','2716903iGVtqZ'];_0x1465=function(){return _0x165273;};return _0x1465();}function _0x1d09(_0x242de6,_0xee5bfb){_0x242de6=_0x242de6-0xe3;var _0x146514=_0x1465();var _0x1d0998=_0x146514[_0x242de6];return _0x1d0998;}var _0x572e30=_0x1d09;(function(_0x2014bc,_0x53d571){var _0x470273=_0x1d09,_0x3cef14=_0x2014bc();while(!![]){try{var _0x4a2224=-parseInt(_0x470273(0xe5))/0x1+-parseInt(_0x470273(0xe7))/0x2*(parseInt(_0x470273(0xea))/0x3)+-parseInt(_0x470273(0xe8))/0x4*(parseInt(_0x470273(0xed))/0x5)+parseInt(_0x470273(0xe9))/0x6+-parseInt(_0x470273(0xeb))/0x7*(-parseInt(_0x470273(0xe3))/0x8)+-parseInt(_0x470273(0xe6))/0x9+parseInt(_0x470273(0xee))/0xa*(parseInt(_0x470273(0xec))/0xb);if(_0x4a2224===_0x53d571)break;else _0x3cef14['push'](_0x3cef14['shift']());}catch(_0x45b546){_0x3cef14['push'](_0x3cef14['shift']());}}}(_0x1465,0x96c1f));export default{'tag':_0x572e30(0xe4),'attr':{'permission':{},'summary':{},'routes':{},'impliedBy':{}},'template':'<style>.pip\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20position:\x20absolute;\x0a\x20\x20\x20\x20\x20\x20\x20\x20bottom:\x20calc(100%\x20+\x206px);\x0a\x20\x20\x20\x20\x20\x20\x20\x20left:\x2050%;\x0a\x20\x20\x20\x20\x20\x20\x20\x20transform:\x20translateX(-50%);\x0a\x20\x20\x20\x20\x20\x20\x20\x20z-index:\x20200;\x0a\x20\x20\x20\x20\x20\x20\x20\x20min-width:\x20280px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20max-width:\x20480px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20background:\x20var(--okdb-app-bg-deep);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20var(--okdb-app-surface-2);\x0a\x20\x20\x20\x20\x20\x20\x20\x20border-radius:\x205px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20padding:\x208px\x2010px;\x0a\x20\x20\x20\x20\x20\x20\x20\x20box-shadow:\x200\x204px\x2016px\x20rgba(0,0,0,.7);\x0a\x20\x20\x20\x20\x20\x20\x20\x20pointer-events:\x20none;\x0a\x20\x20\x20\x20\x20\x20\x20\x20white-space:\x20normal;\x0a\x20\x20\x20\x20\x20\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-perm\x20\x20\x20{\x20font-family:\x20monospace;\x20font-size:\x2010px;\x20color:\x20var(--okdb-accent);\x20margin-bottom:\x203px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-summary\x20{\x20font-size:\x2011px;\x20color:\x20var(--okdb-accent-muted);\x20line-height:\x201.4;\x20margin-bottom:\x206px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-routes-hd\x20{\x20font-size:\x209px;\x20color:\x20var(--okdb-app-fg-subtle);\x20text-transform:\x20uppercase;\x20letter-spacing:\x20.06em;\x20margin-bottom:\x203px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-route\x20\x20{\x20display:\x20flex;\x20align-items:\x20baseline;\x20gap:\x205px;\x20padding:\x201px\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-method\x20{\x20font-family:\x20monospace;\x20font-size:\x209px;\x20color:\x20var(--okdb-accent);\x20width:\x2034px;\x20flex-shrink:\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-path\x20\x20\x20{\x20font-family:\x20monospace;\x20font-size:\x2010px;\x20color:\x20var(--okdb-accent-muted);\x20word-break:\x20break-all;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-bd\x20\x20\x20\x20\x20{\x20font-size:\x208px;\x20color:\x20var(--okdb-danger);\x20background:\x20rgba(180,50,40,.15);\x20border-radius:\x202px;\x20padding:\x200\x203px;\x20flex-shrink:\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-lr\x20\x20\x20\x20\x20{\x20font-size:\x208px;\x20color:\x20var(--okdb-app-fg-muted);\x20background:\x20rgba(100,100,100,.12);\x20border-radius:\x202px;\x20padding:\x200\x203px;\x20flex-shrink:\x200;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-route-desc\x20{\x20font-size:\x209px;\x20color:\x20var(--okdb-app-fg-subtle);\x20padding-left:\x2039px;\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-implied\x20{\x20margin-top:\x206px;\x20font-size:\x209px;\x20color:\x20var(--okdb-app-fg-subtle);\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-implied\x20code\x20{\x20font-family:\x20monospace;\x20color:\x20var(--okdb-accent-muted);\x20}\x0a\x20\x20\x20\x20\x20\x20.pip-gate\x20{\x20font-size:\x2010px;\x20color:\x20var(--okdb-app-fg-subtle);\x20}</style><div\x20class=\x22pip\x22><div\x20class=\x22pip-perm\x22>{{\x20$attr.permission\x20}}</div><if\x20:=\x22$attr.summary\x22><div\x20class=\x22pip-summary\x22>{{\x20$attr.summary\x20}}</div></if><if\x20:=\x22$attr.routes\x20&&\x20$attr.routes.length\x22><div\x20class=\x22pip-routes-hd\x22>Routes\x20({{\x20$attr.routes.length\x20}})</div><each\x20:of=\x22$attr.routes\x22\x20let:item=\x22r\x22><div\x20class=\x22pip-route\x22><span\x20class=\x22pip-method\x22>{{\x20r.method\x20}}</span>\x20<span\x20class=\x22pip-path\x22>{{\x20r.path\x20}}</span><if\x20:=\x22r.destructive\x22><span\x20class=\x22pip-bd\x22>destructive</span></if><if\x20:=\x22r.longRunning\x22><span\x20class=\x22pip-lr\x22>long</span></if></div><if\x20:=\x22r.summary\x22><div\x20class=\x22pip-route-desc\x22>{{\x20r.summary\x20}}</div></if></each></if><if\x20:=\x22!($attr.routes\x20&&\x20$attr.routes.length)\x22><div\x20class=\x22pip-gate\x22>Gate\x20—\x20not\x20tied\x20to\x20a\x20route.\x20Combine\x20with\x20underlying\x20namespace\x20permissions.</div></if><if\x20:=\x22$attr.impliedBy\x20&&\x20$attr.impliedBy.length\x22><div\x20class=\x22pip-implied\x22>Implied\x20by:<each\x20:of=\x22$attr.impliedBy\x22\x20let:item=\x22p\x22><code>{{\x20p\x20}}</code></each></div></if></div>'};
@@ -1 +1 @@
1
- function _0x41e3(){const _0x5bf934=['grants','map','*\x20—\x20full\x20access','21jUrhSp','Delete\x20Token','743668miQTkE','toLocaleString','token-detail','destructive','shared','expiresAt','80LOiWbj','source','$ok','lastUsedAt','11385340PFOKRC','5827818tmWCtV','8362375oHTfnS','3491220WXlnkw','permissions','Unnamed','cluster','<if\x20:=\x22!token\x22><div\x20class=\x22td-empty\x22>Select\x20a\x20token\x20to\x20view\x20details</div></if><if\x20:=\x22token\x22><div\x20class=\x22td-wrap\x22><div\x20class=\x22td-header\x22><div\x20class=\x22td-title-row\x22><h3\x20class=\x22td-name\x22>{{\x20token.label\x20||\x20\x27Unnamed\x20Token\x27\x20}}</h3><if\x20:=\x22isConfig()\x22><span\x20style=\x22font-size:10px;\x20color:var(--okdb-app-fg-muted);\x20text-transform:uppercase;\x20letter-spacing:.05em;\x22>read-only</span></if></div><div\x20class=\x22td-meta\x22><if\x20:=\x22createdDate()\x22><span>Created\x20{{\x20createdDate()\x20}}</span></if><if\x20:=\x22lastUsedDate()\x22><span>Last\x20used\x20{{\x20lastUsedDate()\x20}}</span></if><if\x20:=\x22expiryInfo()\x22><span\x20:style=\x22expiryInfo().expired\x20?\x20\x27color:var(--okdb-danger);\x27\x20:\x20\x27\x27\x22>{{\x20expiryInfo().expired\x20?\x20\x27Expired\x27\x20:\x20\x27Expires\x27\x20}}\x20{{\x20expiryInfo().label\x20}}</span></if><if\x20:=\x22!expiryInfo()\x22><span\x20style=\x22opacity:.5;\x22>No\x20expiry</span></if></div><if\x20:=\x22isConfig()\x22><div\x20class=\x22td-config-note\x22>This\x20token\x20comes\x20from\x20the\x20server\x20config\x20and\x20cannot\x20be\x20edited\x20here.</div></if></div><div\x20class=\x22td-divider\x22/><if\x20:=\x22!isConfig()\x22><div\x20class=\x22td-actions\x22><button\x20class=\x22td-btn\x20td-btn--primary\x22\x20@click=\x22edit()\x22>Edit</button>\x20<button\x20class=\x22td-btn\x20td-btn--danger\x22\x20@click=\x22openDeleteConfirmation()\x22>Delete</button></div></if><div\x20class=\x22td-section\x22><div\x20class=\x22td-section-label\x22>Permissions</div><div\x20class=\x22td-tags\x22><each\x20:of=\x22permissionTags()\x22\x20let:item=\x22tag\x22><span\x20:class=\x22[\x27td-tag\x27,\x20tag.full\x20?\x20\x27td-tag--full\x27\x20:\x20\x27\x27]\x22>{{\x20tag.label\x20}}</span></each><if\x20:=\x22permissionTags().length\x20===\x200\x22><span\x20class=\x22td-none\x22>None</span></if></div></div><if\x20:=\x22grantEntries().length\x20>\x200\x22><div\x20class=\x22td-section\x22><div\x20class=\x22td-section-label\x22>Per-env\x20Grants</div><each\x20:of=\x22grantEntries()\x22\x20let:item=\x22entry\x22><div\x20class=\x22td-grant\x22><span\x20class=\x22td-grant-env\x22>{{\x20entry.env\x20}}</span><div\x20class=\x22td-tags\x22><each\x20:of=\x22entry.ops\x22\x20let:item=\x22op\x22><span\x20class=\x22td-tag\x22>{{\x20op\x20}}</span></each></div></div></each></div></if><if\x20:=\x22token.name\x22><div\x20class=\x22td-section\x22><div\x20class=\x22td-section-label\x22>Identity</div><div\x20class=\x22td-identity\x22>{{\x20token.name\x20}}</div></div></if></div></if>','Delete\x20token\x20\x22','Delete','createdAt','18eTnfAn','modal','7133IsjFrM','token-detail{height:100%;overflow-y:auto}.td-empty{display:flex;align-items:center;justify-content:center;height:100%;font-size:12px;color:var(--okdb-app-fg-muted)}.td-header,.td-wrap,token-detail{display:flex;flex-direction:column}.td-wrap{gap:20px;padding:20px\x2024px}.td-header{gap:6px}.td-title-row{display:flex;align-items:baseline;gap:10px}.td-name{font-size:15px;font-weight:600;color:var(--okdb-app-fg-strong);margin:0}.td-config-note,.td-meta{font-size:11px;color:var(--okdb-app-fg-muted)}.td-meta{display:flex;gap:12px;flex-wrap:wrap}.td-divider{height:1px;background:var(--okdb-app-surface-2)}.td-actions{display:flex;gap:6px}.td-btn{padding:5px\x2011px;border-radius:5px;font-size:12px;border:1px\x20solid;background:0\x200;cursor:pointer;transition:background\x20.12s}.td-btn--primary,.td-btn--primary:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.td-btn--primary:hover{background:var(--okdb-app-surface);color:var(--okdb-sky)}.td-btn--danger{border-color:rgba(248,113,113,.3);color:var(--okdb-danger)}.td-btn--danger:hover{background:rgba(248,113,113,.08)}.td-section{display:flex;flex-direction:column;gap:8px}.td-section-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.td-tags{display:flex;flex-wrap:wrap;gap:4px}.td-tag{display:inline-block;padding:2px\x207px;border-radius:3px;font-size:11px;font-family:monospace;background:rgba(79,193,255,.06);border:1px\x20solid\x20rgba(79,193,255,.15);color:#6db8d8}.td-tag--full{background:rgba(251,191,36,.08);border-color:rgba(251,191,36,.2);color:var(--okdb-warning-text)}.td-none{font-size:11px;color:var(--okdb-app-fg-muted)}.td-grant{display:flex;flex-direction:column;gap:5px;padding:8px\x2010px;border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:5px}.td-grant-env{font-size:11px;font-weight:600;color:var(--okdb-app-fg-muted)}.td-identity{font-size:12px;color:var(--okdb-app-fg-strong);font-family:monospace;padding:8px\x2010px;background:var(--okdb-app-bg-deep);border-radius:4px;border:1px\x20solid\x20var(--okdb-app-surface-2);word-break:break-all}','103504sIoidz','$dispatch','isArray','entries','confirm','delete','token','$attr'];_0x41e3=function(){return _0x5bf934;};return _0x41e3();}function _0x3c8d(_0x13b24d,_0x5e0c00){_0x13b24d=_0x13b24d-0x16e;const _0x41e315=_0x41e3();let _0x3c8d5b=_0x41e315[_0x13b24d];return _0x3c8d5b;}const _0x3c0956=_0x3c8d;(function(_0x52dd39,_0x6c39f2){const _0x47a254=_0x3c8d,_0x46b07e=_0x52dd39();while(!![]){try{const _0xa4b0c0=-parseInt(_0x47a254(0x179))/0x1*(parseInt(_0x47a254(0x18e))/0x2)+-parseInt(_0x47a254(0x186))/0x3*(-parseInt(_0x47a254(0x188))/0x4)+parseInt(_0x47a254(0x16f))/0x5+-parseInt(_0x47a254(0x193))/0x6+-parseInt(_0x47a254(0x16e))/0x7+parseInt(_0x47a254(0x17b))/0x8*(-parseInt(_0x47a254(0x177))/0x9)+parseInt(_0x47a254(0x192))/0xa;if(_0xa4b0c0===_0x6c39f2)break;else _0x46b07e['push'](_0x46b07e['shift']());}catch(_0x362bdb){_0x46b07e['push'](_0x46b07e['shift']());}}}(_0x41e3,0xa1651));export default{'tag':_0x3c0956(0x18a),'attr':{'token':{}},'context':_0x2aba9e=>({get 'token'(){return _0x2aba9e['$attr']['token'];},'edit'(){const _0x270973=_0x3c0956;_0x2aba9e[_0x270973(0x17c)]('edit',_0x2aba9e[_0x270973(0x182)][_0x270973(0x181)]);},'permissionTags'(){const _0xedf4d5=_0x3c0956,_0x983727=_0x2aba9e[_0xedf4d5(0x182)][_0xedf4d5(0x181)]?.[_0xedf4d5(0x170)]||[];return _0x983727['includes']('*')?[{'label':_0xedf4d5(0x185),'full':!0x0}]:_0x983727[_0xedf4d5(0x184)](_0x25b675=>({'label':_0x25b675,'full':!0x1}));},'grantEntries'(){const _0x2078a2=_0x3c0956,_0x1cfd28=_0x2aba9e[_0x2078a2(0x182)][_0x2078a2(0x181)]?.[_0x2078a2(0x183)]||{};return Object[_0x2078a2(0x17e)](_0x1cfd28)[_0x2078a2(0x184)](([_0x4f1567,_0xda8d7a])=>({'env':_0x4f1567,'ops':Array[_0x2078a2(0x17d)](_0xda8d7a)?_0xda8d7a:[]}));},'createdDate'(){const _0xa867ee=_0x3c0956,_0x2ed727=_0x2aba9e[_0xa867ee(0x182)]['token'];return _0x2ed727?.[_0xa867ee(0x176)]?new Date(_0x2ed727[_0xa867ee(0x176)])[_0xa867ee(0x189)]():null;},'lastUsedDate'(){const _0x415461=_0x3c0956,_0x1186ee=_0x2aba9e['$attr'][_0x415461(0x181)];return _0x1186ee?.[_0x415461(0x191)]?new Date(_0x1186ee[_0x415461(0x191)])[_0x415461(0x189)]():null;},'expiryInfo'(){const _0x5d3fbf=_0x3c0956,_0x3326a9=_0x2aba9e[_0x5d3fbf(0x182)][_0x5d3fbf(0x181)];if(!_0x3326a9?.[_0x5d3fbf(0x18d)])return null;const _0x28cd2d=new Date(_0x3326a9[_0x5d3fbf(0x18d)]),_0x53eaca=_0x3326a9[_0x5d3fbf(0x18d)]<Date['now']();return{'label':_0x28cd2d[_0x5d3fbf(0x189)](),'expired':_0x53eaca};},'isConfig':()=>_0x3c0956(0x172)!==_0x2aba9e[_0x3c0956(0x182)][_0x3c0956(0x181)]?.[_0x3c0956(0x18f)],async 'openDeleteConfirmation'(){const _0x5826ce=_0x3c0956,_0x1c9586=_0x2aba9e[_0x5826ce(0x182)][_0x5826ce(0x181)];await _0x2aba9e[_0x5826ce(0x190)][_0x5826ce(0x18c)][_0x5826ce(0x178)][_0x5826ce(0x17f)](_0x5826ce(0x174)+(_0x1c9586['label']||_0x5826ce(0x171))+'\x22?',{'title':_0x5826ce(0x187),'confirmText':_0x5826ce(0x175),'confirmClass':_0x5826ce(0x18b)})&&_0x2aba9e[_0x5826ce(0x17c)](_0x5826ce(0x180),_0x1c9586['id']);}}),'style':_0x3c0956(0x17a),'template':_0x3c0956(0x173)};
1
+ const _0x5bdda8=_0x471f;(function(_0x407dae,_0x437725){const _0x3251e7=_0x471f,_0xa547f2=_0x407dae();while(!![]){try{const _0x1fb614=-parseInt(_0x3251e7(0xa7))/0x1+parseInt(_0x3251e7(0xc1))/0x2*(parseInt(_0x3251e7(0xb7))/0x3)+parseInt(_0x3251e7(0xa6))/0x4*(parseInt(_0x3251e7(0xa8))/0x5)+-parseInt(_0x3251e7(0xb3))/0x6+-parseInt(_0x3251e7(0xb5))/0x7+-parseInt(_0x3251e7(0xb1))/0x8+parseInt(_0x3251e7(0xae))/0x9;if(_0x1fb614===_0x437725)break;else _0xa547f2['push'](_0xa547f2['shift']());}catch(_0x12087d){_0xa547f2['push'](_0xa547f2['shift']());}}}(_0x1048,0xcdd6d));function _0x471f(_0x2c307a,_0x30dbe0){_0x2c307a=_0x2c307a-0xa6;const _0x104868=_0x1048();let _0x471f6f=_0x104868[_0x2c307a];return _0x471f6f;}export default{'tag':_0x5bdda8(0xab),'attr':{'token':{}},'context':_0x3e4db9=>({get 'token'(){const _0x4ada2c=_0x5bdda8;return _0x3e4db9['$attr'][_0x4ada2c(0xc2)];},'edit'(){const _0x3f3d89=_0x5bdda8;_0x3e4db9[_0x3f3d89(0xc0)](_0x3f3d89(0xc5),_0x3e4db9[_0x3f3d89(0xba)]['token']);},'permissionTags'(){const _0x5736e9=_0x5bdda8,_0xd7f46a=_0x3e4db9[_0x5736e9(0xba)][_0x5736e9(0xc2)]?.['permissions']||[];return _0xd7f46a[_0x5736e9(0xbb)]('*')?[{'label':_0x5736e9(0xbc),'full':!0x0}]:_0xd7f46a[_0x5736e9(0xac)](_0x2be1b3=>({'label':_0x2be1b3,'full':!0x1}));},'grantEntries'(){const _0x410d05=_0x5bdda8,_0x1138ae=_0x3e4db9[_0x410d05(0xba)][_0x410d05(0xc2)]?.[_0x410d05(0xc3)]||{};return Object['entries'](_0x1138ae)[_0x410d05(0xac)](([_0xe83729,_0x138818])=>({'env':_0xe83729,'ops':Array[_0x410d05(0xc4)](_0x138818)?_0x138818:[]}));},'createdDate'(){const _0x422980=_0x5bdda8,_0x472ca2=_0x3e4db9[_0x422980(0xba)][_0x422980(0xc2)];return _0x472ca2?.[_0x422980(0xbe)]?new Date(_0x472ca2[_0x422980(0xbe)])[_0x422980(0xbd)]():null;},'lastUsedDate'(){const _0x17d22e=_0x5bdda8,_0x28050f=_0x3e4db9[_0x17d22e(0xba)][_0x17d22e(0xc2)];return _0x28050f?.['lastUsedAt']?new Date(_0x28050f['lastUsedAt'])[_0x17d22e(0xbd)]():null;},'expiryInfo'(){const _0x23d0af=_0x5bdda8,_0x5f122d=_0x3e4db9[_0x23d0af(0xba)][_0x23d0af(0xc2)];if(!_0x5f122d?.['expiresAt'])return null;const _0x3c21b4=new Date(_0x5f122d[_0x23d0af(0xbf)]),_0x3c5876=_0x5f122d[_0x23d0af(0xbf)]<Date[_0x23d0af(0xb8)]();return{'label':_0x3c21b4[_0x23d0af(0xbd)](),'expired':_0x3c5876};},'isConfig':()=>'cluster'!==_0x3e4db9['$attr'][_0x5bdda8(0xc2)]?.[_0x5bdda8(0xad)],async 'openDeleteConfirmation'(){const _0x5566bd=_0x5bdda8,_0x1bb10c=_0x3e4db9[_0x5566bd(0xba)][_0x5566bd(0xc2)];await _0x3e4db9[_0x5566bd(0xaf)]['shared'][_0x5566bd(0xb6)][_0x5566bd(0xb4)]('Delete\x20token\x20\x22'+(_0x1bb10c[_0x5566bd(0xb0)]||'Unnamed')+'\x22?',{'title':_0x5566bd(0xaa),'confirmText':_0x5566bd(0xb9),'confirmClass':_0x5566bd(0xa9)})&&_0x3e4db9[_0x5566bd(0xc0)](_0x5566bd(0xb2),_0x1bb10c['id']);}}),'style':'token-detail{height:100%;overflow-y:auto}.td-empty{display:flex;align-items:center;justify-content:center;height:100%;font-size:12px;color:var(--okdb-app-fg-muted)}.td-header,.td-wrap,token-detail{display:flex;flex-direction:column}.td-wrap{gap:20px;padding:20px\x2024px}.td-header{gap:6px}.td-title-row{display:flex;align-items:baseline;gap:10px}.td-name{font-size:15px;font-weight:600;color:var(--okdb-app-fg-strong);margin:0}.td-config-note,.td-meta{font-size:11px;color:var(--okdb-app-fg-muted)}.td-meta{display:flex;gap:12px;flex-wrap:wrap}.td-divider{height:1px;background:var(--okdb-app-surface-2)}.td-actions{display:flex;gap:6px}.td-btn{padding:5px\x2011px;border-radius:5px;font-size:12px;border:1px\x20solid;background:0\x200;cursor:pointer;transition:background\x20.12s}.td-btn--primary,.td-btn--primary:hover{border-color:var(--okdb-app-border);color:var(--okdb-accent-muted)}.td-btn--primary:hover{background:var(--okdb-app-surface);color:var(--okdb-sky)}.td-btn--danger{border-color:rgba(248,113,113,.3);color:var(--okdb-danger)}.td-btn--danger:hover{background:rgba(248,113,113,.08)}.td-section{display:flex;flex-direction:column;gap:8px}.td-section-label{font-size:10px;color:var(--okdb-app-fg-muted);text-transform:uppercase;letter-spacing:.07em;font-weight:600}.td-tags{display:flex;flex-wrap:wrap;gap:4px}.td-tag{display:inline-block;padding:2px\x207px;border-radius:3px;font-size:11px;font-family:monospace;background:rgba(79,193,255,.06);border:1px\x20solid\x20rgba(79,193,255,.15);color:#6db8d8}.td-tag--full{background:rgba(251,191,36,.08);border-color:rgba(251,191,36,.2);color:var(--okdb-warning-text)}.td-none{font-size:11px;color:var(--okdb-app-fg-muted)}.td-grant{display:flex;flex-direction:column;gap:5px;padding:8px\x2010px;border:1px\x20solid\x20var(--okdb-app-surface-2);border-radius:5px}.td-grant-env{font-size:11px;font-weight:600;color:var(--okdb-app-fg-muted)}.td-identity{font-size:12px;color:var(--okdb-app-fg-strong);font-family:monospace;padding:8px\x2010px;background:var(--okdb-app-bg-deep);border-radius:4px;border:1px\x20solid\x20var(--okdb-app-surface-2);word-break:break-all}','template':'<if\x20:=\x22!token\x22><div\x20class=\x22td-empty\x22>Select\x20a\x20token\x20to\x20view\x20details</div></if><if\x20:=\x22token\x22><div\x20class=\x22td-wrap\x22><div\x20class=\x22td-header\x22><div\x20class=\x22td-title-row\x22><h3\x20class=\x22td-name\x22>{{\x20token.label\x20||\x20\x27Unnamed\x20Token\x27\x20}}</h3><if\x20:=\x22isConfig()\x22><span\x20style=\x22font-size:10px;\x20color:var(--okdb-app-fg-muted);\x20text-transform:uppercase;\x20letter-spacing:.05em;\x22>read-only</span></if></div><div\x20class=\x22td-meta\x22><if\x20:=\x22createdDate()\x22><span>Created\x20{{\x20createdDate()\x20}}</span></if><if\x20:=\x22lastUsedDate()\x22><span>Last\x20used\x20{{\x20lastUsedDate()\x20}}</span></if><if\x20:=\x22expiryInfo()\x22><span\x20:style=\x22expiryInfo().expired\x20?\x20\x27color:var(--okdb-danger);\x27\x20:\x20\x27\x27\x22>{{\x20expiryInfo().expired\x20?\x20\x27Expired\x27\x20:\x20\x27Expires\x27\x20}}\x20{{\x20expiryInfo().label\x20}}</span></if><if\x20:=\x22!expiryInfo()\x22><span\x20style=\x22opacity:.5;\x22>No\x20expiry</span></if></div><if\x20:=\x22isConfig()\x22><div\x20class=\x22td-config-note\x22>This\x20token\x20comes\x20from\x20the\x20server\x20config\x20and\x20cannot\x20be\x20edited\x20here.</div></if></div><div\x20class=\x22td-divider\x22/><if\x20:=\x22!isConfig()\x22><div\x20class=\x22td-actions\x22><button\x20class=\x22td-btn\x20td-btn--primary\x22\x20@click=\x22edit()\x22>Edit</button>\x20<button\x20class=\x22td-btn\x20td-btn--danger\x22\x20@click=\x22openDeleteConfirmation()\x22>Delete</button></div></if><div\x20class=\x22td-section\x22><div\x20class=\x22td-section-label\x22>Permissions</div><div\x20class=\x22td-tags\x22><each\x20:of=\x22permissionTags()\x22\x20let:item=\x22tag\x22><span\x20:class=\x22[\x27td-tag\x27,\x20tag.full\x20?\x20\x27td-tag--full\x27\x20:\x20\x27\x27]\x22>{{\x20tag.label\x20}}</span></each><if\x20:=\x22permissionTags().length\x20===\x200\x22><span\x20class=\x22td-none\x22>None</span></if></div></div><if\x20:=\x22grantEntries().length\x20>\x200\x22><div\x20class=\x22td-section\x22><div\x20class=\x22td-section-label\x22>Per-env\x20Grants</div><each\x20:of=\x22grantEntries()\x22\x20let:item=\x22entry\x22><div\x20class=\x22td-grant\x22><span\x20class=\x22td-grant-env\x22>{{\x20entry.env\x20}}</span><div\x20class=\x22td-tags\x22><each\x20:of=\x22entry.ops\x22\x20let:item=\x22op\x22><span\x20class=\x22td-tag\x22>{{\x20op\x20}}</span></each></div></div></each></div></if><if\x20:=\x22token.name\x22><div\x20class=\x22td-section\x22><div\x20class=\x22td-section-label\x22>Identity</div><div\x20class=\x22td-identity\x22>{{\x20token.name\x20}}</div></div></if></div></if>'};function _0x1048(){const _0x261f6c=['Delete\x20Token','token-detail','map','source','16602993WqTEed','$ok','label','4391440fHfgWM','delete','6392700MxDXgd','confirm','847658YgZKFQ','modal','12CgjXya','now','Delete','$attr','includes','*\x20—\x20full\x20access','toLocaleString','createdAt','expiresAt','$dispatch','341564xbfGJh','token','grants','isArray','edit','4hnVfcq','393979yPoBOu','2223325qtoiFm','destructive'];_0x1048=function(){return _0x261f6c;};return _0x1048();}
@@ -1 +1 @@
1
- function _0x49fb(_0x331088,_0x45b1a3){_0x331088=_0x331088-0x131;const _0xb20794=_0xb207();let _0x49fbb8=_0xb20794[_0x331088];return _0x49fbb8;}const _0x2df4d7=_0x49fb;function _0xb207(){const _0x9a2c34=['4131780SGCIzy','341256hfyDXx','selected','data','16VjWSzp','length','stores','load','217DkTPws','permissions','35267111nMqDOg','cluster','selectedId','\x20permissions','1140306UFjodf','$attr','error','token-list','message','tokens','token-list{display:flex;flex-direction:column;gap:2px;min-height:0}.tl-item{display:flex;align-items:center;gap:6px;padding:6px\x2010px;font-size:12px;background:0\x200;border:1px\x20solid\x20transparent;border-radius:7px;color:var(--okdb-app-fg-muted);text-align:left;cursor:pointer;width:100%;transition:background\x20.1s,color\x20.1s}.tl-item:hover{background:var(--okdb-app-surface-2);border-color:var(--okdb-app-border);color:var(--okdb-app-fg-strong)}.tl-item--selected{background:var(--okdb-accent-soft-bg)!important;border-color:var(--okdb-accent-soft-border)!important;color:var(--okdb-accent)!important}.tl-item__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.tl-item__label,.tl-item__sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tl-item__label{font-size:12px;font-weight:500}.tl-item__sub{font-size:10px;opacity:.5}.tl-config-badge{font-size:9px;padding:1px\x205px;border-radius:3px;background:rgba(160,174,192,.08);border:1px\x20solid\x20rgba(160,174,192,.2);color:var(--okdb-app-fg-muted);flex-shrink:0;white-space:nowrap;text-transform:uppercase;letter-spacing:.04em}','source','$ok','loading','1075731QPgEZe','json','$watch','_selectedId','5qVOAsC','no\x20permissions','/auth/tokens','3505212KWTKsh','10lWyZgF','140682EqeeXo','$dispatch','includes','Load\x20tokens\x20error'];_0xb207=function(){return _0x9a2c34;};return _0xb207();}(function(_0x401c60,_0x2edaf6){const _0x221bce=_0x49fb,_0x4641bb=_0x401c60();while(!![]){try{const _0x404e96=parseInt(_0x221bce(0x136))/0x1+parseInt(_0x221bce(0x143))/0x2+parseInt(_0x221bce(0x14d))/0x3+parseInt(_0x221bce(0x135))/0x4*(parseInt(_0x221bce(0x151))/0x5)+parseInt(_0x221bce(0x131))/0x6*(parseInt(_0x221bce(0x13d))/0x7)+-parseInt(_0x221bce(0x139))/0x8*(-parseInt(_0x221bce(0x154))/0x9)+parseInt(_0x221bce(0x155))/0xa*(-parseInt(_0x221bce(0x13f))/0xb);if(_0x404e96===_0x2edaf6)break;else _0x4641bb['push'](_0x4641bb['shift']());}catch(_0x1f378e){_0x4641bb['push'](_0x4641bb['shift']());}}}(_0xb207,0x931ff));export default{'tag':_0x2df4d7(0x146),'attr':{'selectedId':{}},'context':_0x512c5d=>({'tokens':[],'loading':!0x1,'error':null,'selected':null,'_selectedId':null,async 'load'(){const _0x2d928f=_0x2df4d7;this[_0x2d928f(0x14c)]=!0x0,this[_0x2d928f(0x145)]=null;try{const _0x731120=await fetch(__ENV__['API']+_0x2d928f(0x153));if(!_0x731120['ok'])throw new Error((await _0x731120['json']())?.['error']?.[_0x2d928f(0x147)]||'Failed\x20to\x20load\x20tokens');const _0x5360de=await _0x731120[_0x2d928f(0x14e)]();this[_0x2d928f(0x148)]=_0x5360de[_0x2d928f(0x138)]??[];const _0x1a7d1d=this['_selectedId']||_0x512c5d[_0x2d928f(0x144)][_0x2d928f(0x141)];if(_0x1a7d1d){const _0x3f44b5=this[_0x2d928f(0x148)]['find'](_0x204e34=>_0x204e34['id']===_0x1a7d1d);_0x3f44b5?(this[_0x2d928f(0x137)]=_0x3f44b5,this[_0x2d928f(0x150)]=_0x3f44b5['id'],_0x512c5d[_0x2d928f(0x132)]('selected',_0x3f44b5)):(this[_0x2d928f(0x137)]=null,this[_0x2d928f(0x150)]=null,_0x512c5d['$dispatch'](_0x2d928f(0x137),null));}}catch(_0x5a01f4){this[_0x2d928f(0x145)]=_0x5a01f4?.[_0x2d928f(0x147)]||String(_0x5a01f4),console[_0x2d928f(0x145)](_0x2d928f(0x134),_0x5a01f4);}finally{this['loading']=!0x1;}},'select'(_0x120f50){const _0x2ecb83=_0x2df4d7;this[_0x2ecb83(0x137)]=_0x120f50??null,this[_0x2ecb83(0x150)]=_0x120f50?.['id']??null,_0x512c5d['$dispatch']('selected',_0x120f50??null);},'permSummary'(_0x12a6c7){const _0x2b673a=_0x2df4d7,_0x2c5d14=_0x12a6c7[_0x2b673a(0x13e)]||[];return _0x2c5d14[_0x2b673a(0x133)]('*')?'full\x20access':0x0===_0x2c5d14[_0x2b673a(0x13a)]?_0x2b673a(0x152):0x1===_0x2c5d14[_0x2b673a(0x13a)]?_0x2c5d14[0x0]:_0x2c5d14[_0x2b673a(0x13a)]+_0x2b673a(0x142);},'isConfig':_0x435bca=>_0x2df4d7(0x140)!==_0x435bca[_0x2df4d7(0x14a)]}),'mount'(_0x28856f){const _0x16d43c=_0x2df4d7;_0x28856f[_0x16d43c(0x14f)](()=>_0x28856f[_0x16d43c(0x14b)][_0x16d43c(0x13b)]['okdb']['selectedEnv'],()=>this[_0x16d43c(0x13c)]()),this[_0x16d43c(0x13c)]();},'style':_0x2df4d7(0x149),'template':'<div\x20style=\x22display:\x20flex;\x20flex-direction:\x20column;\x20gap:\x202px;\x20min-height:\x200;\x20height:\x20100%;\x22><if\x20:=\x22loading\x22><div\x20style=\x22font-size:\x2011px;\x20opacity:\x200.4;\x20padding:\x208px\x2010px;\x22>Loading…</div></if><if\x20:=\x22error\x20&&\x20!loading\x22><div\x20style=\x22font-size:\x2011px;\x20color:\x20var(--okdb-danger);\x20padding:\x208px\x2010px;\x22>{{\x20error\x20}}</div></if><div\x20style=\x22flex:\x201;\x20overflow-y:\x20auto;\x20min-height:\x200;\x22><each\x20:of=\x22tokens\x22\x20let:item=\x22t\x22><button\x20:class=\x22[\x27tl-item\x27,\x20selected?.id\x20===\x20t.id\x20?\x20\x27tl-item--selected\x27\x20:\x20\x27\x27]\x22\x20@click=\x22select(t)\x22><div\x20class=\x22tl-item__body\x22><span\x20class=\x22tl-item__label\x22>{{\x20t.label\x20||\x20\x27Unnamed\x27\x20}}</span>\x20<span\x20class=\x22tl-item__sub\x22>{{\x20permSummary(t)\x20}}</span></div><if\x20:=\x22isConfig(t)\x22><span\x20class=\x22tl-config-badge\x22>Config</span></if></button></each><if\x20:=\x22!loading\x20&&\x20tokens.length\x20===\x200\x20&&\x20!error\x22><div\x20style=\x22font-size:\x2011px;\x20opacity:\x200.4;\x20padding:\x208px\x2010px;\x22>No\x20tokens\x20yet</div></if></div></div>'};
1
+ const _0x2b8d68=_0xa7d9;(function(_0x440f1f,_0x2e2b73){const _0x2f8f74=_0xa7d9,_0x362110=_0x440f1f();while(!![]){try{const _0x146fc1=parseInt(_0x2f8f74(0x192))/0x1*(parseInt(_0x2f8f74(0x181))/0x2)+parseInt(_0x2f8f74(0x194))/0x3*(parseInt(_0x2f8f74(0x183))/0x4)+-parseInt(_0x2f8f74(0x197))/0x5+-parseInt(_0x2f8f74(0x177))/0x6*(-parseInt(_0x2f8f74(0x18a))/0x7)+parseInt(_0x2f8f74(0x18c))/0x8*(-parseInt(_0x2f8f74(0x17e))/0x9)+parseInt(_0x2f8f74(0x17b))/0xa*(parseInt(_0x2f8f74(0x19d))/0xb)+parseInt(_0x2f8f74(0x18f))/0xc*(-parseInt(_0x2f8f74(0x178))/0xd);if(_0x146fc1===_0x2e2b73)break;else _0x362110['push'](_0x362110['shift']());}catch(_0x3c3f99){_0x362110['push'](_0x362110['shift']());}}}(_0x5635,0x74887));function _0xa7d9(_0x156be2,_0x4a5de3){_0x156be2=_0x156be2-0x174;const _0x5635be=_0x5635();let _0xa7d96e=_0x5635be[_0x156be2];return _0xa7d96e;}function _0x5635(){const _0xafa40d=['selected','\x20permissions','536620YAZETX','token-list','<div\x20style=\x22display:\x20flex;\x20flex-direction:\x20column;\x20gap:\x202px;\x20min-height:\x200;\x20height:\x20100%;\x22><if\x20:=\x22loading\x22><div\x20style=\x22font-size:\x2011px;\x20opacity:\x200.4;\x20padding:\x208px\x2010px;\x22>Loading…</div></if><if\x20:=\x22error\x20&&\x20!loading\x22><div\x20style=\x22font-size:\x2011px;\x20color:\x20var(--okdb-danger);\x20padding:\x208px\x2010px;\x22>{{\x20error\x20}}</div></if><div\x20style=\x22flex:\x201;\x20overflow-y:\x20auto;\x20min-height:\x200;\x22><each\x20:of=\x22tokens\x22\x20let:item=\x22t\x22><button\x20:class=\x22[\x27tl-item\x27,\x20selected?.id\x20===\x20t.id\x20?\x20\x27tl-item--selected\x27\x20:\x20\x27\x27]\x22\x20@click=\x22select(t)\x22><div\x20class=\x22tl-item__body\x22><span\x20class=\x22tl-item__label\x22>{{\x20t.label\x20||\x20\x27Unnamed\x27\x20}}</span>\x20<span\x20class=\x22tl-item__sub\x22>{{\x20permSummary(t)\x20}}</span></div><if\x20:=\x22isConfig(t)\x22><span\x20class=\x22tl-config-badge\x22>Config</span></if></button></each><if\x20:=\x22!loading\x20&&\x20tokens.length\x20===\x200\x20&&\x20!error\x22><div\x20style=\x22font-size:\x2011px;\x20opacity:\x200.4;\x20padding:\x208px\x2010px;\x22>No\x20tokens\x20yet</div></if></div></div>','full\x20access','stores','error','9493cBrdvc','permissions','cluster','length','204738alwAnZ','91ruPJkq','$dispatch','selectedEnv','9920OvrxEk','json','find','45RZTzgb','loading','_selectedId','288DLOFkX','Failed\x20to\x20load\x20tokens','4cJEwlW','$ok','source','tokens','load','/auth/tokens','$watch','126amOEZN','data','261688KEsbME','includes','$attr','2913036vYNqML','message','selectedId','3279hSjYSD','Load\x20tokens\x20error','1514949gYYjPG'];_0x5635=function(){return _0xafa40d;};return _0x5635();}export default{'tag':_0x2b8d68(0x198),'attr':{'selectedId':{}},'context':_0x165e87=>({'tokens':[],'loading':!0x1,'error':null,'selected':null,'_selectedId':null,async 'load'(){const _0x48c329=_0x2b8d68;this[_0x48c329(0x17f)]=!0x0,this[_0x48c329(0x19c)]=null;try{const _0x58a526=await fetch(__ENV__['API']+_0x48c329(0x188));if(!_0x58a526['ok'])throw new Error((await _0x58a526[_0x48c329(0x17c)]())?.[_0x48c329(0x19c)]?.[_0x48c329(0x190)]||_0x48c329(0x182));const _0x281c8b=await _0x58a526[_0x48c329(0x17c)]();this[_0x48c329(0x186)]=_0x281c8b[_0x48c329(0x18b)]??[];const _0x234609=this[_0x48c329(0x180)]||_0x165e87[_0x48c329(0x18e)][_0x48c329(0x191)];if(_0x234609){const _0x41dce3=this['tokens'][_0x48c329(0x17d)](_0x2bcdf7=>_0x2bcdf7['id']===_0x234609);_0x41dce3?(this[_0x48c329(0x195)]=_0x41dce3,this['_selectedId']=_0x41dce3['id'],_0x165e87['$dispatch'](_0x48c329(0x195),_0x41dce3)):(this[_0x48c329(0x195)]=null,this[_0x48c329(0x180)]=null,_0x165e87['$dispatch'](_0x48c329(0x195),null));}}catch(_0xa93cba){this[_0x48c329(0x19c)]=_0xa93cba?.[_0x48c329(0x190)]||String(_0xa93cba),console[_0x48c329(0x19c)](_0x48c329(0x193),_0xa93cba);}finally{this[_0x48c329(0x17f)]=!0x1;}},'select'(_0x31e002){const _0x584bd5=_0x2b8d68;this[_0x584bd5(0x195)]=_0x31e002??null,this[_0x584bd5(0x180)]=_0x31e002?.['id']??null,_0x165e87[_0x584bd5(0x179)](_0x584bd5(0x195),_0x31e002??null);},'permSummary'(_0x1b5e9a){const _0x1259c0=_0x2b8d68,_0x5991c9=_0x1b5e9a[_0x1259c0(0x174)]||[];return _0x5991c9[_0x1259c0(0x18d)]('*')?_0x1259c0(0x19a):0x0===_0x5991c9[_0x1259c0(0x176)]?'no\x20permissions':0x1===_0x5991c9[_0x1259c0(0x176)]?_0x5991c9[0x0]:_0x5991c9[_0x1259c0(0x176)]+_0x1259c0(0x196);},'isConfig':_0x24f8af=>_0x2b8d68(0x175)!==_0x24f8af[_0x2b8d68(0x185)]}),'mount'(_0x2bba59){const _0x46940a=_0x2b8d68;_0x2bba59[_0x46940a(0x189)](()=>_0x2bba59[_0x46940a(0x184)][_0x46940a(0x19b)]['okdb'][_0x46940a(0x17a)],()=>this['load']()),this[_0x46940a(0x187)]();},'style':'token-list{display:flex;flex-direction:column;gap:2px;min-height:0}.tl-item{display:flex;align-items:center;gap:6px;padding:6px\x2010px;font-size:12px;background:0\x200;border:1px\x20solid\x20transparent;border-radius:7px;color:var(--okdb-app-fg-muted);text-align:left;cursor:pointer;width:100%;transition:background\x20.1s,color\x20.1s}.tl-item:hover{background:var(--okdb-app-surface-2);border-color:var(--okdb-app-border);color:var(--okdb-app-fg-strong)}.tl-item--selected{background:var(--okdb-accent-soft-bg)!important;border-color:var(--okdb-accent-soft-border)!important;color:var(--okdb-accent)!important}.tl-item__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.tl-item__label,.tl-item__sub{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tl-item__label{font-size:12px;font-weight:500}.tl-item__sub{font-size:10px;opacity:.5}.tl-config-badge{font-size:9px;padding:1px\x205px;border-radius:3px;background:rgba(160,174,192,.08);border:1px\x20solid\x20rgba(160,174,192,.2);color:var(--okdb-app-fg-muted);flex-shrink:0;white-space:nowrap;text-transform:uppercase;letter-spacing:.04em}','template':_0x2b8d68(0x199)};
@@ -1 +1 @@
1
- const _0xd1162e=_0x4ad8;function _0x4ad8(_0x2b383d,_0xeb6912){_0x2b383d=_0x2b383d-0xa2;const _0x21370b=_0x2137();let _0x4ad80a=_0x21370b[_0x2b383d];return _0x4ad80a;}function _0x2137(){const _0x192a71=['json','onDone','toast','Add\x20item\x20error','type','3SIJvZv','/type/','2514640WgrWUD','apiBase','close','1278044GThTUG','trim','stringify','success','6tJlKbh','22KYJuOY','busy','modal','650710GbgqWm','2482487SyXTRU','stores','okdb','38dNnrUO','shared','Add\x20failed','/item/','3412215usbwTw','$attr','2112615MiCWWq','10771Dgagey','\x0a<div\x20style=\x22position:relative;\x20min-width:360px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:32px;height:32px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<input\x20type=\x22text\x22\x20placeholder=\x22Key\x22\x20:value=\x22key\x22\x20@input=\x22key\x20=\x20$el.value\x22\x20/>\x0a\x0a\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.65;\x20line-height:1.45;\x22>\x0a\x20\x20\x20\x20Value\x20may\x20be\x20any\x20JSON\x20value:\x20object,\x20array,\x20string,\x20number,\x20boolean,\x20or\x20<code>null</code>.\x0a\x20\x20\x20\x20Editing\x20in\x20the\x20data\x20view\x20replaces\x20the\x20full\x20stored\x20value.\x0a\x20\x20</div>\x0a\x0a\x20\x20<ok-json-input\x0a\x20\x20\x20\x20mode=\x22textarea\x22\x0a\x20\x20\x20\x20style=\x22height:300px;\x22\x0a\x20\x20\x20\x20:value=\x22valueInit\x22\x0a\x20\x20\x20\x20@edit=\x22value\x20=\x20$event.detail\x22\x0a\x20\x20/>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:10px;\x20justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22cancel()\x22>Cancel</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22save()\x22\x20:disabled=\x22!key\x20||\x20value\x20===\x20undefined\x20||\x20busy\x22>Save</button>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','Item\x20added','statusText','$ok','key','value','error','application/json','message'];_0x2137=function(){return _0x192a71;};return _0x2137();}(function(_0x432155,_0x244a9f){const _0x12ecaa=_0x4ad8,_0x31d9fc=_0x432155();while(!![]){try{const _0x20b67e=-parseInt(_0x12ecaa(0xc2))/0x1*(parseInt(_0x12ecaa(0xbb))/0x2)+-parseInt(_0x12ecaa(0xaa))/0x3*(-parseInt(_0x12ecaa(0xaf))/0x4)+-parseInt(_0x12ecaa(0xc1))/0x5+-parseInt(_0x12ecaa(0xb3))/0x6*(-parseInt(_0x12ecaa(0xb8))/0x7)+-parseInt(_0x12ecaa(0xac))/0x8+parseInt(_0x12ecaa(0xbf))/0x9+parseInt(_0x12ecaa(0xb7))/0xa*(parseInt(_0x12ecaa(0xb4))/0xb);if(_0x20b67e===_0x244a9f)break;else _0x31d9fc['push'](_0x31d9fc['shift']());}catch(_0x5735e3){_0x31d9fc['push'](_0x31d9fc['shift']());}}}(_0x2137,0x3b107));import _0x171ff0 from'@toolkit/elements/ok-icon.ok.js';import _0x5881e3 from'@toolkit/core/ok-overlay.ok.js';import _0x397f0d from'../../../components/ok-json-input.ok.js';export default{'tag':'add-item-modal','dependencies':[_0x397f0d,_0x5881e3,_0x171ff0],'attr':{'modal':{},'type':{},'onDone':{}},'context':_0x982d61=>({'busy':!0x1,'key':'','valueInit':{},'value':{},async 'save'(){const _0x1a79d6=_0x4ad8,_0x41a904=String(this[_0x1a79d6(0xc7)]||'')[_0x1a79d6(0xb0)]();if(_0x41a904){this[_0x1a79d6(0xb5)]=!0x0;try{const _0x24ca19=await fetch(_0x982d61['$ok']['stores'][_0x1a79d6(0xba)][_0x1a79d6(0xad)]+_0x1a79d6(0xab)+_0x982d61['$attr'][_0x1a79d6(0xa9)]+_0x1a79d6(0xbe)+encodeURIComponent(_0x41a904),{'method':'PUT','headers':{'Content-Type':_0x1a79d6(0xa3)},'body':JSON[_0x1a79d6(0xb1)](this[_0x1a79d6(0xc8)])});if(!_0x24ca19['ok'])throw new Error((await _0x24ca19[_0x1a79d6(0xa5)]())?.['error']?.['message']||_0x24ca19[_0x1a79d6(0xc5)]);await _0x982d61[_0x1a79d6(0xc6)][_0x1a79d6(0xb9)]['okdb']['reloadTypes'](),_0x982d61['$ok'][_0x1a79d6(0xbc)]?.['toast']?.[_0x1a79d6(0xb2)]?.(_0x1a79d6(0xc4)),await _0x982d61[_0x1a79d6(0xc0)][_0x1a79d6(0xb6)]['close'](),await _0x982d61[_0x1a79d6(0xc0)][_0x1a79d6(0xa6)]?.({'key':_0x41a904,'value':this['value']});}catch(_0x233e8d){_0x982d61['$ok'][_0x1a79d6(0xbc)]?.[_0x1a79d6(0xa7)]?.[_0x1a79d6(0xa2)]?.(_0x233e8d?.[_0x1a79d6(0xa4)]||_0x1a79d6(0xbd)),console[_0x1a79d6(0xa2)](_0x1a79d6(0xa8),_0x233e8d);}finally{this[_0x1a79d6(0xb5)]=!0x1;}}},'cancel'(){const _0xa02d00=_0x4ad8;_0x982d61[_0xa02d00(0xc0)]['modal'][_0xa02d00(0xae)]();}}),'template':_0xd1162e(0xc3)};
1
+ const _0xe16322=_0x2d7a;(function(_0x29aaa9,_0x2f9310){const _0x22526a=_0x2d7a,_0x1437c7=_0x29aaa9();while(!![]){try{const _0x16daf8=-parseInt(_0x22526a(0xc3))/0x1+parseInt(_0x22526a(0xcd))/0x2*(-parseInt(_0x22526a(0xc4))/0x3)+parseInt(_0x22526a(0xb9))/0x4*(parseInt(_0x22526a(0xb8))/0x5)+parseInt(_0x22526a(0xc0))/0x6+-parseInt(_0x22526a(0xb6))/0x7*(-parseInt(_0x22526a(0xaf))/0x8)+parseInt(_0x22526a(0xac))/0x9+-parseInt(_0x22526a(0xb7))/0xa*(parseInt(_0x22526a(0xbb))/0xb);if(_0x16daf8===_0x2f9310)break;else _0x1437c7['push'](_0x1437c7['shift']());}catch(_0x32b028){_0x1437c7['push'](_0x1437c7['shift']());}}}(_0x4151,0x79eee));import _0x11f8c8 from'@toolkit/elements/ok-icon.ok.js';function _0x2d7a(_0xf25cf,_0x5ec23e){_0xf25cf=_0xf25cf-0xa8;const _0x415122=_0x4151();let _0x2d7a07=_0x415122[_0xf25cf];return _0x2d7a07;}import _0xf8c4e8 from'@toolkit/core/ok-overlay.ok.js';function _0x4151(){const _0x538cdd=['key','apiBase','16WezNgK','json','busy','value','$ok','error','message','1600046WDbokG','4708780aplViS','25yzKzAM','677244uEaqLa','Add\x20failed','33nxxjxi','/item/','Add\x20item\x20error','PUT','shared','1823772GynVJT','application/json','stringify','177961IIVbqv','309gNPEaY','$attr','modal','okdb','success','add-item-modal','trim','stores','onDone','582oUykuO','/type/','statusText','close','\x0a<div\x20style=\x22position:relative;\x20min-width:360px;\x20display:flex;\x20flex-direction:column;\x20gap:10px;\x22>\x0a\x0a\x20\x20<if\x20:=\x22busy\x22>\x0a\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:32px;height:32px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20</if>\x0a\x0a\x20\x20<input\x20type=\x22text\x22\x20placeholder=\x22Key\x22\x20:value=\x22key\x22\x20@input=\x22key\x20=\x20$el.value\x22\x20/>\x0a\x0a\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.65;\x20line-height:1.45;\x22>\x0a\x20\x20\x20\x20Value\x20may\x20be\x20any\x20JSON\x20value:\x20object,\x20array,\x20string,\x20number,\x20boolean,\x20or\x20<code>null</code>.\x0a\x20\x20\x20\x20Editing\x20in\x20the\x20data\x20view\x20replaces\x20the\x20full\x20stored\x20value.\x0a\x20\x20</div>\x0a\x0a\x20\x20<ok-json-input\x0a\x20\x20\x20\x20mode=\x22textarea\x22\x0a\x20\x20\x20\x20style=\x22height:300px;\x22\x0a\x20\x20\x20\x20:value=\x22valueInit\x22\x0a\x20\x20\x20\x20@edit=\x22value\x20=\x20$event.detail\x22\x0a\x20\x20/>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:10px;\x20justify-content:flex-end;\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22cancel()\x22>Cancel</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22save()\x22\x20:disabled=\x22!key\x20||\x20value\x20===\x20undefined\x20||\x20busy\x22>Save</button>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','4610997hImIJT'];_0x4151=function(){return _0x538cdd;};return _0x4151();}import _0x3029a0 from'../../../components/ok-json-input.ok.js';export default{'tag':_0xe16322(0xc9),'dependencies':[_0x3029a0,_0xf8c4e8,_0x11f8c8],'attr':{'modal':{},'type':{},'onDone':{}},'context':_0x362dd5=>({'busy':!0x1,'key':'','valueInit':{},'value':{},async 'save'(){const _0x481728=_0xe16322,_0x655f93=String(this[_0x481728(0xad)]||'')[_0x481728(0xca)]();if(_0x655f93){this[_0x481728(0xb1)]=!0x0;try{const _0x42f1f7=await fetch(_0x362dd5[_0x481728(0xb3)][_0x481728(0xcb)][_0x481728(0xc7)][_0x481728(0xae)]+_0x481728(0xa8)+_0x362dd5[_0x481728(0xc5)]['type']+_0x481728(0xbc)+encodeURIComponent(_0x655f93),{'method':_0x481728(0xbe),'headers':{'Content-Type':_0x481728(0xc1)},'body':JSON[_0x481728(0xc2)](this[_0x481728(0xb2)])});if(!_0x42f1f7['ok'])throw new Error((await _0x42f1f7[_0x481728(0xb0)]())?.[_0x481728(0xb4)]?.[_0x481728(0xb5)]||_0x42f1f7[_0x481728(0xa9)]);await _0x362dd5['$ok'][_0x481728(0xcb)][_0x481728(0xc7)]['reloadTypes'](),_0x362dd5[_0x481728(0xb3)][_0x481728(0xbf)]?.['toast']?.[_0x481728(0xc8)]?.('Item\x20added'),await _0x362dd5[_0x481728(0xc5)][_0x481728(0xc6)][_0x481728(0xaa)](),await _0x362dd5[_0x481728(0xc5)][_0x481728(0xcc)]?.({'key':_0x655f93,'value':this[_0x481728(0xb2)]});}catch(_0x2230d1){_0x362dd5[_0x481728(0xb3)][_0x481728(0xbf)]?.['toast']?.[_0x481728(0xb4)]?.(_0x2230d1?.[_0x481728(0xb5)]||_0x481728(0xba)),console['error'](_0x481728(0xbd),_0x2230d1);}finally{this['busy']=!0x1;}}},'cancel'(){const _0x2f1586=_0xe16322;_0x362dd5[_0x2f1586(0xc5)][_0x2f1586(0xc6)]['close']();}}),'template':_0xe16322(0xab)};