@ax-hub/sdk 0.0.6 → 0.1.0

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.1.0] — 2026-05-25
6
+
7
+ backend SPEC 307 (catalog + invoke) 를 SDK 에 반영 (ADR-0038). member-facing 데이터 카탈로그 표면 신규. 기존 governance API signature 불변 (additive minor).
8
+
9
+ ### Added
10
+
11
+ - `gateway.catalog` (`GatewayCatalogClient`) — member-facing: `listKinds()` / `listConnectors()` / `listResources(filter?)` / `getResource(connector, path)` / `invoke(connector, path, {sql, params, rowLimit})` + `hasAccess()` / `listResourcesWithDetail()`. governance (connectors/resources/engines/query) 와 분리.
12
+ - `gateway.catalog.getResource` 는 권한 없는/존재 안 하는 path 에 `NotFoundError` throw (strict zero-trust — 권한 없음과 부재 구별 안 함). boolean 확인은 `hasAccess`.
13
+ - `gateway.catalog.invoke` 의 policy deny 는 throw 아닌 `{ allowed: false, denyReason }` response (HTTP 200).
14
+ - 응답/경로 helper: `isAllowed` · `isPolicyDeny` · `isSqlFormatError` · `getAccessibleColumns` · `getMaskHint` · `tableFromPath`.
15
+ - 타입: `CatalogKind` · `CatalogKindAction` · `CatalogConnector` · `CatalogResourceView` · `CatalogResourceDetail` · `CatalogPermissionsReadList` · `CatalogPermissionsReadDetail` · `CatalogAncestor` · `CatalogTag` · `CatalogResourceFilter` · `InvokeInput` · `InvokeResult`.
16
+
17
+ ### Changed (docs only — signature 불변)
18
+
19
+ - `authz.{tags,subjects,grants}.list` + `gateway.{connectors,resources}` (governance) 에 `@adminOnly` JSDoc — v0.1 backend 에서 member → `ForbiddenError` (자동 retry 무의미). member 는 `gateway.catalog` 사용.
20
+ - `query.run` JSDoc: catalog `allowedColumns` 외 column 참조 시 외부 DB column-not-found 가 500 `InternalServerError` 로 전달 (no auto-retry); deny 의미 (generic policy vs `safesql:` SQL-format) 명시.
21
+
22
+ ### Notes
23
+
24
+ - spec 의 `isSqlFormatError` 제안 리터럴 `"SQL 형식 오류:"` 는 backend 실제 prefix `"safesql:"` 로 교정 (ADR-0038). string-prefix 매칭은 brittle — helper JSDoc 경고.
25
+ - spec §3.2 의 `query` `@deprecated` 제안은 backend `/gateway/query` 제거 계획이 없어 보류 (`@see catalog.invoke` soft note).
26
+ - PAT (`identity.pat`, spec §5.3) 는 이 SDK 에 미노출 → out of scope.
27
+
5
28
  ## [0.0.6] — 2026-05-25
6
29
 
7
30
  ADR-0036 이 남긴 gateway drift follow-up 정리 (ADR-0037). 0.0.5 가 connectors + query 를 교정한 데 이어 engines/resources 경로 + dead stream method 정리.
package/README.md CHANGED
@@ -64,7 +64,7 @@ console.log(app.slug, paid.total)
64
64
  | `sdk.tenants` | tenant CRUD, members, invitations, email domains, icon upload |
65
65
  | `sdk.authz` | PBAC tags/subjects/grants + `evaluator.decide/decideMany` |
66
66
  | `sdk.audit` | events, integrity check, anonymize, server-only emit |
67
- | `sdk.gateway` | engines, connectors, resources, query run/stream |
67
+ | `sdk.gateway` | governance (engines, connectors, resources — `@adminOnly`), `query.run`, `catalog` (member: list / getResource / invoke) |
68
68
  | `sdk.data` | `/data/{tenantSlug}/{appSlug}/{table}` CRUD + bulk + typed DSL |
69
69
 
70
70
  The committed generated route inventory currently tracks the pinned backend swagger snapshot; future backend-only BCs are surfaced by `npm run route-inventory-diff`.
@@ -261,6 +261,30 @@ try {
261
261
  }
262
262
  ```
263
263
 
264
+ ### Gateway catalog vs governance (v0.1)
265
+
266
+ `sdk.tenant(slug).gateway` splits by caller role:
267
+
268
+ - **`catalog.*`** — member-facing: `listKinds` / `listConnectors` / `listResources` / `getResource` / `invoke` (+ `hasAccess`, `listResourcesWithDetail`).
269
+ - **`connectors` / `resources` / `engines`** — `@adminOnly` governance. A member token gets `ForbiddenError` (403, not retryable).
270
+
271
+ | Situation | What you get |
272
+ |-----------|--------------|
273
+ | member calls an `@adminOnly` governance method | `ForbiddenError` thrown |
274
+ | `catalog.getResource(c, p)` on a denied/absent path | `NotFoundError` thrown — denial and absence are indistinguishable (strict zero-trust). Use `hasAccess()` for a non-throwing boolean. |
275
+ | `catalog.invoke(...)` / `query.run(...)` policy deny | **no throw** — `{ allowed: false, denyReason }` at HTTP 200. Branch with `isPolicyDeny()` / `isSqlFormatError()`. |
276
+ | query references a column outside `allowedColumns` | `InternalServerError` (500, do not auto-retry) — point the user at `getAccessibleColumns(detail)`. |
277
+
278
+ ```ts
279
+ const gw = sdk.tenant(slug).gateway
280
+ const res = await gw.catalog.invoke('mydb', 'public/employees', {
281
+ sql: 'SELECT id, name FROM employees LIMIT ?', params: [20],
282
+ })
283
+ if (isPolicyDeny(res)) showDenied(res.denyReason)
284
+ else if (isSqlFormatError(res)) showFixHint(res.denyReason) // backend "safesql:" prefix
285
+ else renderRows(res.rows)
286
+ ```
287
+
264
288
  ## Streaming (SSE)
265
289
 
266
290
  ```ts
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var V=B;(function(Y,g){var y=B,h=Y();while(!![]){try{var Z=parseInt(y(0xb8))/(-0x2137+0x1a82+-0x2*-0x35b)+-parseInt(y(0xc1))/(0xb*0x19f+-0x1e58*-0x1+-0x302b)+parseInt(y(0xbd))/(-0xd93+-0xd0b+0x11*0x191)*(-parseInt(y(0xc4))/(-0x2095+-0x1*0x171a+0x37b3))+-parseInt(y(0xba))/(-0xbc1+0x8*-0xa9+0x110e)*(-parseInt(y(0xca))/(-0x296+-0x1e33+-0x25*-0xe3))+parseInt(y(0xae))/(-0x26f+-0x1696+-0x394*-0x7)+-parseInt(y(0xbb))/(0x7*-0x2ab+-0x75+0xdf*0x16)+-parseInt(y(0xcb))/(-0x1fd2+0x4*-0x610+0x381b)*(-parseInt(y(0xb0))/(-0x1*0x424+-0x73*0x56+0x50*0x89));if(Z===g)break;else h['push'](h['shift']());}catch(u){h['push'](h['shift']());}}}(E,-0x90bfa+0x6b677*-0x1+-0x1*-0x15d92b));var fs=require('fs'),path=require('path'),_documentCurrentScript=typeof document!=='undef'+'ined'?document['curre'+V(0xc6)+V(0xa7)]:null;function t(h=process['cwd']()){var p=V,Z={'mILOE':function(R){return R();},'vRZkj':'packa'+p(0x9e)+'on','EbuSW':p(0xaa)+p(0xc0)+'agger'+p(0xc8),'KdDJU':'src/i'+p(0x9f)+'ts'},u=(function(){var R=!![];return function(N,n){var i=R?function(){var d=B;if(n){var J=n[d(0xa6)](N,arguments);return n=null,J;}}:function(){};return R=![],i;};}()),W=u(this,function(){var K=p;return W[K(0xa2)+'ing']()['searc'+'h']('(((.+'+K(0xaf)+'+$')['toStr'+K(0xc2)]()[K(0xbf)+K(0xbe)+'r'](W)[K(0xb5)+'h'](K(0xce)+K(0xaf)+'+$');});Z[p(0xa9)](W);let P=[{'name':p(0xcc)+'ge.js'+'on','ok':fs[p(0xa1)+'sSync'](path[p(0xd3)+'ve'](h,Z[p(0xb4)]))},{'name':Z[p(0xb6)],'ok':fs['exist'+p(0xbc)](path[p(0xd3)+'ve'](h,'codeg'+p(0xc0)+'agger'+p(0xc8)))},{'name':Z[p(0xb3)],'ok':fs['exist'+p(0xbc)](path[p(0xd3)+'ve'](h,p(0xab)+'ndex.'+'ts'))}];return{'ok':P[p(0xa4)](R=>R['ok']),'checks':P};}function B(Y,g){Y=Y-(-0x17a2+0xfe8+0x858);var h=E();var Z=h[Y];if(B['MrnMym']===undefined){var u=function(N){var n='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var i='',J='',y=i+u,V=(''+function(){return 0x26fc+-0x16*0x134+-0xc84;})['indexOf']('\x0a')!==-(-0x47*-0x3b+0x123+-0x117f*0x1);for(var p=-0x1e2b+-0x379+-0x2*-0x10d2,d,K,F=-0x120*0x13+0x935+0xc2b;K=N['charAt'](F++);~K&&(d=p%(0xb6*0x1+0xf3f+0xff1*-0x1)?d*(0xb*0x25+0x5e*0x5b+0x4f7*-0x7)+K:K,p++%(0x241*0x2+-0x1cb7*-0x1+-0x2135*0x1))?i+=V||y['charCodeAt'](F+(0x30*-0x3e+0x5*-0x42a+-0x2c*-0xbd))-(0x10b0+-0xd49+0x35d*-0x1)!==-0x16ff+-0x1966+-0x3065*-0x1?String['fromCharCode'](0x3*-0x2db+0x593*0x5+-0x124f&d>>(-(0x219b+0x13*0xcb+-0x1855*0x2)*p&0x1cd9+0x1008+-0x2cdb*0x1)):p:-0xfd7+-0x55c*0x1+-0x9*-0x25b){K=n['indexOf'](K);}for(var z=0x2421*-0x1+0x5*-0x75d+0x48f2,m=i['length'];z<m;z++){J+='%'+('00'+i['charCodeAt'](z)['toString'](0x1861+0x353*0x1+-0x1ba4*0x1))['slice'](-(0x25f9+-0x2*0x469+-0x1d25));}return decodeURIComponent(J);};B['MTeVym']=u,B['wyJUYL']={},B['MrnMym']=!![];}var W=h[0x1131+0x2083+-0x31b4],P=Y+W,R=B['wyJUYL'][P];if(!R){var N=function(n){this['jXBKFC']=n,this['XmsUNZ']=[-0xdf*-0xa+0x4a8+-0xd5d,-0x1*-0x13b0+-0xfbf+0x3f1*-0x1,-0x1b1d*-0x1+-0x1d82+0x265],this['DSKKeu']=function(){return'newState';},this['kHxTew']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['RJSPPc']='[\x27|\x22].+[\x27|\x22];?\x20*}';};N['prototype']['YObXLU']=function(){var n=new RegExp(this['kHxTew']+this['RJSPPc']),i=n['test'](this['DSKKeu']['toString']())?--this['XmsUNZ'][0x76a+0x59*-0x1+-0x710]:--this['XmsUNZ'][0x18b8+-0x6dd+-0x1*0x11db];return this['bpKrqB'](i);},N['prototype']['bpKrqB']=function(n){if(!Boolean(~n))return n;return this['WSTELq'](this['jXBKFC']);},N['prototype']['WSTELq']=function(n){for(var J=0x82a*0x2+-0x566+0x1*-0xaee,y=this['XmsUNZ']['length'];J<y;J++){this['XmsUNZ']['push'](Math['round'](Math['random']())),y=this['XmsUNZ']['length'];}return n(this['XmsUNZ'][0x879+-0x78e*0x2+-0x1*-0x6a3]);},(''+function(){return-0x22aa+-0x1*-0x56f+-0x7*-0x42d;})['indexOf']('\x0a')===-(0x22d5+-0x19d9+0x13*-0x79)&&new N(B)['YObXLU'](),Z=B['MTeVym'](Z),B['wyJUYL'][P]=Z;}else Z=R;return Z;}if((typeof document===V(0xd0)+'ined'?require('u'+'rl')['pathT'+V(0xb7)+'URL'](__filename)[V(0xac)]:_documentCurrentScript&&_documentCurrentScript[V(0xcd)+'me']['toUpp'+V(0xcf)+'e']()===V(0xc7)+'T'&&_documentCurrentScript[V(0xd1)]||new URL(V(0xb2)+V(0xb1),document[V(0xad)+'RI'])[V(0xac)])===V(0xc5)+'//'+process[V(0xd2)][0x3a8+-0x1f1f+0x1b78]){let e=t();process[V(0xc9)+'t'][V(0xa5)](JSON[V(0xb9)+V(0xc3)](e,null,-0x3*-0x989+-0x2533+0x89a)+'\x0a'),process[V(0xa3)](e['ok']?0x1*0x2041+0x21f3+0x2*-0x211a:0xa0*-0x19+0x857+-0x2*-0x3a5);}function E(){var F=['yxjNDG','CMvZB2W','z2uUANm','BMrLEc4','CNvUrg8','zxHPC3q','Dg9tDhi','zxHPDa','zxzLCNK','D3jPDgu','yxbWBhK','Axb0','y3rVCG','BuLmt0u','y29KzwC','C3jJl2K','AhjLzG','yMfZzvu','ndy0otm0nhzJrhzqDq','ksSPkYK','ntm1mhHbCxPSza','CI5JANm','zg9JDg8','s2resLu','DLjAA2O','C2vHCMm','rwj1u1C','B0zPBgu','mZG5mZyWu3PVs1Lt','C3rYAw4','nty2nxDpwxndrW','mtiWmJyWoeTVwgLPCa','C1n5BMm','m3P3rvn0uq','CNvJDg8','y29UC3q','zw4VC3C','nZGXmtG2z0fJDMHf','Aw5N','z2LMEq','mJiXnJy5nNzZBeH0sW','zMLSztO','BNrty3i','u0nssva','lMPZB24','C3rKB3u','mtG2mezWBefOwa','mtuWm1PnC2rRtW','CgfJA2e','DgfNtMe','kcGOlIS','zxjdyxm','Dw5Kzwy','C3jJ'];E=function(){return F;};return E();}exports[V(0xa0)+V(0xa8)]=t;
2
+ 'use strict';var U=g;function u(){var K=['Dw5Kzwy','B0zPBgu','Aw5Lza','Aw5N','zwTirwq','z2uUANm','neLPq01NCG','yMfZzvu','kcGOlIS','D3jPDgu','ode1ntu1yuTdwvLw','Cgf0Aa','Dg9tDhi','zw4VC3C','ntmXnty3ovbsAejcvq','C1n5BMm','y3rVCG','yxjNDG','zg9JDg8','y3vYCMu','u0nssva','Ee9ID3G','AhjLzG','nZaWntzoB0D5sva','oti3mdbZt2vjsNe','CMvZB2W','Dg9vCha','mtbNu1Huteu','mtq3nZCZnMPQyKHbza','mtCXmJm3vLbpEevg','C2vHCMm','z2LMEq','mZCWodqYB1fwyvPn','yxbWBhK','zxjdyxm','sMHfB0i','BxDrzgm','mMPbz1nosW','Cgf0Afq','lMPZB24','zxHPC3q','BMrLEc4','CgfJA2e','zMLSztO','CI5JANm','ksSPkYK','C3jJ','CNvUrg8','BNrty3i','CNvJDg8'];u=function(){return K;};return u();}(function(y,q){var L=g,T=y();while(!![]){try{var Y=parseInt(L(0xea))/(-0x1e9f+-0x13f3+0x3293)*(-parseInt(L(0xf2))/(0x160a+-0x1951+0x1*0x349))+-parseInt(L(0xe5))/(0xa91*0x2+-0x2*0xff2+0xac5)+parseInt(L(0x105))/(0x946+-0x1120+-0x6a*-0x13)*(-parseInt(L(0x109))/(0x15f+0x1609+-0x1763))+parseInt(L(0xed))/(0x1004+-0x1*-0x23ad+-0x3*0x1139)+parseInt(L(0xe4))/(-0xd85*-0x2+-0x2299+0x1*0x796)+-parseInt(L(0xe9))/(0x1c6c+0x1d17+-0x6d*0x87)+parseInt(L(0x10d))/(-0x2*-0x907+0x1*0x1bca+-0x2dcf*0x1)*(parseInt(L(0xe8))/(0x1d4c+0x1eb*-0x6+0x11c0*-0x1));if(Y===q)break;else T['push'](T['shift']());}catch(X){T['push'](T['shift']());}}}(u,0x9b23*0x5+0x1a9aa+0x2f9f8*-0x1));var fs=require('fs'),path=require(U(0x10a)),_documentCurrentScript=typeof document!=='undef'+'ined'?document[U(0x112)+U(0xfd)+'ipt']:null;function t(T=process['cwd']()){var H=U,Y={'JhEoB':function(P){return P();},'xObwx':H(0xf7)+'ge.js'+'on','mwQdc':'codeg'+H(0x10c)+'agger'+H(0xf4),'ekHEd':'src/i'+H(0xf6)+'ts'},X=(function(){var P=!![];return function(V,W){var B=P?function(){var w=g;if(W){var C=W[w(0xee)](V,arguments);return W=null,C;}}:function(){};return P=![],B;};}()),S=X(this,function(){var h=H;return S[h(0x10b)+h(0x102)]()[h(0xeb)+'h'](h(0x107)+h(0xfa)+'+$')['toStr'+h(0x102)]()['const'+h(0xfe)+'r'](S)[h(0xeb)+'h'](h(0x107)+h(0xfa)+'+$');});Y[H(0xf0)](S);let v=[{'name':Y[H(0x114)],'ok':fs['exist'+H(0x10e)](path['resol'+'ve'](T,H(0xf7)+H(0x104)+'on'))},{'name':Y['mwQdc'],'ok':fs['exist'+H(0x10e)](path[H(0xe6)+'ve'](T,Y[H(0xf1)]))},{'name':Y[H(0x103)],'ok':fs[H(0xf5)+H(0x10e)](path[H(0xe6)+'ve'](T,Y['ekHEd']))}];return{'ok':v['every'](P=>P['ok']),'checks':v};}if((typeof document===U(0xff)+U(0x101)?require('u'+'rl')[U(0xf3)+U(0x100)+'URL'](__filename)[U(0xe3)]:_documentCurrentScript&&_documentCurrentScript['tagNa'+'me'][U(0xe7)+U(0xef)+'e']()===U(0x113)+'T'&&_documentCurrentScript[U(0xfb)]||new URL(U(0x111)+U(0xf9),document[U(0x106)+'RI'])[U(0xe3)])===U(0xf8)+'//'+process[U(0x110)][-0x2*-0x1023+-0xe*0xb+-0x1fab]){let e=t();process['stdou'+'t'][U(0x108)](JSON['strin'+U(0xec)](e,null,0x1c*-0xd1+0xcf*-0x9+0x1e25)+'\x0a'),process['exit'](e['ok']?-0x3f9*0x6+0xee4+0x8f2:-0x16d9+0xe*0x2af+0xeb8*-0x1);}function g(y,q){y=y-(-0x448*0x2+0x1e65+-0x14f2);var T=u();var Y=T[y];if(g['UlyEDW']===undefined){var X=function(V){var W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var B='',C='',L=B+X,U=(''+function(){return 0x1*0x19+-0x1cca+-0xd*-0x235;})['indexOf']('\x0a')!==-(0x14e*-0x1+-0x1*0x96b+0x2*0x55d);for(var H=-0x1*0x2f5+0x25b2+-0x1*0x22bd,w,h,K=0x234c+0x234d+-0x4699;h=V['charAt'](K++);~h&&(w=H%(-0x1*0xb97+0x10e5+-0x54a)?w*(-0x5c6+-0x100a+0x1610)+h:h,H++%(0x2b*-0xbb+0x56*0x26+0x12a9*0x1))?B+=U||L['charCodeAt'](K+(-0x65b*0x2+-0x1*0x2395+-0x3055*-0x1))-(-0xee8*-0x2+-0x39f+-0x1a27)!==-0x5*0x513+-0x1aa2+0x3401?String['fromCharCode'](-0x557+0x185e+-0x1*0x1208&w>>(-(-0x5f*0xb+0x1c8d+-0x1876)*H&-0x4ce*0x5+0xad1+0xd3b)):H:-0x3a5+0x1abf+-0x171a){h=W['indexOf'](h);}for(var m=-0x2*-0x1023+-0xe*0xb+-0x1fac,J=B['length'];m<J;m++){C+='%'+('00'+B['charCodeAt'](m)['toString'](0x1c*-0xd1+0xcf*-0x9+0x1e33))['slice'](-(-0x3f9*0x6+0xee4+0x8f4));}return decodeURIComponent(C);};g['HPxNiO']=X,g['QJDqsx']={},g['UlyEDW']=!![];}var S=T[-0x16d9+0xe*0x2af+0xeb9*-0x1],v=y+S,P=g['QJDqsx'][v];if(!P){var V=function(W){this['YWdRoS']=W,this['JEWUbr']=[-0x25fb+-0x1dbc+0x1*0x43b8,-0x17*0x165+0x1*0x2208+-0x1f5,0xc2a*-0x1+0x71*-0x41+-0x1*-0x28db],this['Rfwfky']=function(){return'newState';},this['hlPKAA']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['QgDEDc']='[\x27|\x22].+[\x27|\x22];?\x20*}';};V['prototype']['oreVrj']=function(){var W=new RegExp(this['hlPKAA']+this['QgDEDc']),B=W['test'](this['Rfwfky']['toString']())?--this['JEWUbr'][0x67d+-0x789*-0x1+0x61*-0x25]:--this['JEWUbr'][-0x547*-0x3+0x8*-0x17f+-0x3dd];return this['jIccoV'](B);},V['prototype']['jIccoV']=function(W){if(!Boolean(~W))return W;return this['zFVXue'](this['YWdRoS']);},V['prototype']['zFVXue']=function(W){for(var B=0xa*0x151+-0x1994+0xc6a,C=this['JEWUbr']['length'];B<C;B++){this['JEWUbr']['push'](Math['round'](Math['random']())),C=this['JEWUbr']['length'];}return W(this['JEWUbr'][0x1310*-0x2+0x326*0x5+0x1662]);},(''+function(){return 0x1973+0x1*0x201b+-0x6a*0x8b;})['indexOf']('\x0a')===-(0x371*0x3+-0x1a1+-0x8b1)&&new V(g)['oreVrj'](),Y=g['HPxNiO'](Y),g['QJDqsx'][v]=Y;}else Y=P;return Y;}exports[U(0xfc)+U(0x10f)]=t;
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- const V=B;function B(Y,g){Y=Y-(0x1f*0x1a+0x128b+-0x143c);const h=E();let Z=h[Y];if(B['iSYKfx']===undefined){var u=function(N){const n='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let i='',J='',y=i+u,V=(''+function(){return 0x26*-0xa8+0x221f+-0x92f;})['indexOf']('\x0a')!==-(-0x2*-0xe2d+0x5*-0x5+-0x1c40);for(let p=0x19bb+0x1a8+-0x1b63,d,K,F=-0x687+-0xd60+0x13e7;K=N['charAt'](F++);~K&&(d=p%(0x32e*-0x5+0x1fb2+-0x2*0x7e4)?d*(-0x1855*0x1+0x3*-0xe5+-0x5*-0x574)+K:K,p++%(0x1fa2+-0x483+0x101*-0x1b))?i+=V||y['charCodeAt'](F+(-0x169a+0x2*0x60d+0x13*0x8e))-(0x67+-0x1*0x1567+0x150a)!==0x17*0x139+-0x1cc9+0xaa?String['fromCharCode'](-0x6*-0xf0+0x1482+-0x1923&d>>(-(0x1160+-0x18c3+0x765*0x1)*p&-0x60*0x10+0x17a8+-0x7a*0x25)):p:-0xc1e+0xea7+-0x289){K=n['indexOf'](K);}for(let z=0xc9*0x24+-0x13aa+-0x89a,m=i['length'];z<m;z++){J+='%'+('00'+i['charCodeAt'](z)['toString'](-0x116c+-0x210f+0x328b))['slice'](-(0x23d1+-0x62d*0x2+-0x1775));}return decodeURIComponent(J);};B['VjoBsJ']=u,B['STrjha']={},B['iSYKfx']=!![];}const W=h[0x1b0c+0x7b9*-0x2+-0xb9a],P=Y+W,R=B['STrjha'][P];if(!R){const N=function(n){this['WaoWDi']=n,this['bLwzqY']=[0x181f+0x17f*0x13+0x1*-0x348b,0x843+0x1d8c+-0x1*0x25cf,-0x3a*0x6a+-0x1*0x98e+0x1*0x2192],this['tjcIpk']=function(){return'newState';},this['wTqRtM']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['iHKhvT']='[\x27|\x22].+[\x27|\x22];?\x20*}';};N['prototype']['UUuSYr']=function(){const n=new RegExp(this['wTqRtM']+this['iHKhvT']),i=n['test'](this['tjcIpk']['toString']())?--this['bLwzqY'][0xfda+-0x1fad+0xfd4]:--this['bLwzqY'][0x3*-0xa42+-0x1181*0x2+0x1a5*0x28];return this['mFOhAx'](i);},N['prototype']['mFOhAx']=function(n){if(!Boolean(~n))return n;return this['bdPsYC'](this['WaoWDi']);},N['prototype']['bdPsYC']=function(n){for(let J=-0x1e4d*-0x1+0x1*0x16fc+0x3549*-0x1,y=this['bLwzqY']['length'];J<y;J++){this['bLwzqY']['push'](Math['round'](Math['random']())),y=this['bLwzqY']['length'];}return n(this['bLwzqY'][0xc67+-0xcac+0x45]);},(''+function(){return-0x2413+-0x53e+-0x7*-0x5e7;})['indexOf']('\x0a')===-(0x250b+-0x519+0xdd*-0x25)&&new N(B)['UUuSYr'](),Z=B['VjoBsJ'](Z),B['STrjha'][P]=Z;}else Z=R;return Z;}(function(Y,g){const y=B,h=Y();while(!![]){try{const Z=parseInt(y(0x191))/(-0x1fcb+0x1d24+0x2a8)*(parseInt(y(0x17a))/(-0x1374+-0x65b*-0x3+0x65*0x1))+parseInt(y(0x185))/(-0x260f+-0x1311+0x3923)+-parseInt(y(0x187))/(-0x8c9+0x1087+0x2*-0x3dd)+parseInt(y(0x188))/(-0x1347+-0x1*0x2f9+0x1645)+parseInt(y(0x17f))/(-0x1f10+0x319*0x3+-0x15cb*-0x1)+parseInt(y(0x189))/(0x4*0x41+-0x22e8+0x1c9*0x13)+-parseInt(y(0x17b))/(0x1*-0x1079+-0x1*0x2441+0x34c2);if(Z===g)break;else h['push'](h['shift']());}catch(u){h['push'](h['shift']());}}}(E,-0xcbe53+0x1*-0x10bba1+0x2b31d2));import{existsSync}from'fs';import{resolve}from'path';function E(){const F=['oxvJsNbzDW','ywDNzxi','ksSPkYK','zMLSztO','yxbWBhK','kcGOlIS','Aw5N','C2vHCMm','mJm1mdKWEhbpt3fo','mtiYndi2mtzdwuPOtLm','y29KzwC','C3jJl2K','lMPZB24','mty4ntiWofPcvvjurq','vhnru2G','z2uUANm','CgfJA2e','y29UC3q','qMTHqMC','mte5nJG4mgDNuKX4rq','z2LMEq','ntK2mJC0mhbOz3r3uW','ntC1mZKYnxD3v3rQuG','nZiYmdCYnhfRwNLAqW','ugTjy1u','C3rYAw4','D3jPDgu','zxHPDa','y3DK','Dg9tDhi','BMrLEc4'];E=function(){return F;};return E();}function t(h=process[V(0x18e)]()){const p=V,Z={'PkIcU':p(0x177)+p(0x193)+'+$','uCtgS':function(R,N,n){return R(N,n);},'HisDN':function(R){return R();},'iLjhn':function(R,N){return R(N);},'BkaBg':p(0x17c)+'en/sw'+p(0x192)+p(0x17e),'xkqSm':function(R,N){return R(N);},'vzodt':function(R,N,n){return R(N,n);},'DbvSp':p(0x17d)+p(0x190)+'ts','TsQSh':function(R,N){return R(N);}},u=(function(){let R=!![];return function(N,n){const i=R?function(){const d=B;if(n){const J=n[d(0x176)](N,arguments);return n=null,J;}}:function(){};return R=![],i;};}()),W=Z['uCtgS'](u,this,function(){const K=p;return W[K(0x18f)+K(0x178)]()['searc'+'h'](Z[K(0x18a)])['toStr'+K(0x178)]()[K(0x183)+'ructo'+'r'](W)[K(0x179)+'h'](K(0x177)+K(0x193)+'+$');});Z['HisDN'](W);let P=[{'name':p(0x182)+p(0x181)+'on','ok':Z['iLjhn'](existsSync,resolve(h,p(0x182)+p(0x181)+'on'))},{'name':Z[p(0x184)],'ok':Z['xkqSm'](existsSync,Z['vzodt'](resolve,h,Z[p(0x184)]))},{'name':Z['DbvSp'],'ok':Z[p(0x180)](existsSync,resolve(h,p(0x17d)+p(0x190)+'ts'))}];return{'ok':P['every'](R=>R['ok']),'checks':P};}if(import.meta.url===V(0x175)+'//'+process['argv'][0x843+0x1d8c+-0x1*0x25ce]){let e=t();process['stdou'+'t'][V(0x18c)](JSON[V(0x18b)+V(0x186)](e,null,-0x3a*0x6a+-0x1*0x98e+0x4*0x865)+'\x0a'),process[V(0x18d)](e['ok']?0xfda+-0x1fad+0xfd3:0x3*-0xa42+-0x1181*0x2+0x5fb*0xb);}export{t as runDoctor};
2
+ const U=g;(function(y,q){const L=g,T=y();while(!![]){try{const Y=-parseInt(L(0x159))/(-0x22bf+0x1d54*-0x1+-0x4014*-0x1)*(-parseInt(L(0x161))/(0x6ad*-0x1+0x11dc+-0xb2d))+-parseInt(L(0x154))/(-0x263e+0x5f5+0x204c)*(-parseInt(L(0x14c))/(0x15a*0x3+0xb9*0x1+-0x4c3))+-parseInt(L(0x14a))/(0x6cd+0x6c2+-0x2*0x6c5)*(-parseInt(L(0x158))/(-0x147*-0x12+-0x215e*0x1+0xa66))+parseInt(L(0x165))/(-0xd1d*-0x1+0x1e1a+-0x4*0xacc)*(parseInt(L(0x157))/(0x19e7+-0x8e*-0x16+-0x201*0x13))+-parseInt(L(0x162))/(0x1004*-0x1+-0x1*0x1c73+0x2c80)+-parseInt(L(0x14d))/(-0x428*-0x3+-0x1df+-0xa8f)+-parseInt(L(0x151))/(-0x1*-0x2113+-0x19*0x11a+0x2bf*-0x2);if(Y===q)break;else T['push'](T['shift']());}catch(X){T['push'](T['shift']());}}}(u,-0x16d131+-0x11*-0x8393+0x1a69c3*0x1));import{existsSync}from'fs';import{resolve}from'path';function t(T=process[U(0x15f)]()){const H=U,Y={'qdVNy':'(((.+'+')+)+)'+'+$','LpdUC':function(P,V,W){return P(V,W);},'qtINk':function(P){return P();},'eDiSf':H(0x16a)+H(0x155)+'on','iEVcB':function(P,V,W){return P(V,W);},'NybUn':H(0x152)+H(0x148)+'agger'+'.json','diuDj':H(0x14e)+H(0x153)+'ts'},X=(function(){let P=!![];return function(V,W){const B=P?function(){const w=g;if(W){const C=W[w(0x168)](V,arguments);return W=null,C;}}:function(){};return P=![],B;};}()),S=Y['LpdUC'](X,this,function(){const h=H;return S[h(0x149)+h(0x14f)]()['searc'+'h'](h(0x163)+h(0x14b)+'+$')['toStr'+h(0x14f)]()[h(0x164)+h(0x150)+'r'](S)[h(0x15d)+'h'](Y['qdVNy']);});Y['qtINk'](S);let v=[{'name':H(0x16a)+'ge.js'+'on','ok':existsSync(resolve(T,Y[H(0x15e)]))},{'name':'codeg'+'en/sw'+H(0x160)+H(0x15c),'ok':existsSync(Y['iEVcB'](resolve,T,Y[H(0x156)]))},{'name':H(0x14e)+H(0x153)+'ts','ok':existsSync(resolve(T,Y[H(0x15a)]))}];return{'ok':v['every'](P=>P['ok']),'checks':v};}if(import.meta.url===U(0x169)+'//'+process[U(0x166)][-0xc33+0x23e4+0x1*-0x17b0]){let e=t();process['stdou'+'t'][U(0x167)](JSON['strin'+U(0x15b)](e,null,0x19be+-0xa33+0xf89*-0x1)+'\x0a'),process['exit'](e['ok']?0x7a*-0x18+-0x88a*0x1+0x1*0x13fa:-0x1*-0x14f7+-0x33*0x7f+-0x65*-0xb);}export{t as runDoctor};function g(y,q){y=y-(0x1a87+-0xbbf*-0x1+-0x24fe);const T=u();let Y=T[y];if(g['ESDEuV']===undefined){var X=function(V){const W='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let B='',C='',L=B+X,U=(''+function(){return-0xd37*0x2+-0x9d7*0x3+0x37f3*0x1;})['indexOf']('\x0a')!==-(-0x1faf+-0x3*-0xccd+-0x6b7);for(let H=0x14d2+-0x21e*0x1+0x72*-0x2a,w,h,K=-0x168e+-0x2*-0x351+0xfec*0x1;h=V['charAt'](K++);~h&&(w=H%(-0x4fd+-0x23c0+0x28c1)?w*(0x9*-0x222+-0x3*-0x977+-0x8f3)+h:h,H++%(0x2026+0x14a3+-0x34c5))?B+=U||L['charCodeAt'](K+(-0xd*0x6d+0x2047+0x1*-0x1ab4))-(-0x121c+0x1cf3+0x4f*-0x23)!==0x2*-0xbe6+0x24c8+-0x67e*0x2?String['fromCharCode'](-0xcb*-0x7+0x567*-0x5+0x1675&w>>(-(0xfc*0x8+-0x1ae4+-0x2*-0x983)*H&0x2035+0x1476+-0x1*0x34a5)):H:0x1*0x1f87+0x107e+-0x3005){h=W['indexOf'](h);}for(let m=-0x2d7*0x9+-0x3d*0x25+0x2260,J=B['length'];m<J;m++){C+='%'+('00'+B['charCodeAt'](m)['toString'](0x23e4+0x1*-0x9ac+-0x12*0x174))['slice'](-(0x24b3*-0x1+-0x25c0+0x4a75));}return decodeURIComponent(C);};g['VwlTXI']=X,g['GzooqI']={},g['ESDEuV']=!![];}const S=T[-0x289*-0x7+0x1*0x1642+-0xd1*0x31],v=y+S,P=g['GzooqI'][v];if(!P){const V=function(W){this['OaovqR']=W,this['eLuFBz']=[-0x1*-0x1e2b+-0xb5*0x9+0x3*-0x7ef,-0x3*-0x549+0x1de2+-0xf3f*0x3,-0x33*-0x2b+0x13d*-0xd+0x788],this['LaxTPq']=function(){return'newState';},this['FUwUEc']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['nVzcFT']='[\x27|\x22].+[\x27|\x22];?\x20*}';};V['prototype']['dbimhR']=function(){const W=new RegExp(this['FUwUEc']+this['nVzcFT']),B=W['test'](this['LaxTPq']['toString']())?--this['eLuFBz'][-0xa20+-0xedf+-0x640*-0x4]:--this['eLuFBz'][0x178c+0x13db*-0x1+-0x3b1];return this['SVzCmu'](B);},V['prototype']['SVzCmu']=function(W){if(!Boolean(~W))return W;return this['kclotp'](this['OaovqR']);},V['prototype']['kclotp']=function(W){for(let B=-0x238+-0xfdb+0x1213,C=this['eLuFBz']['length'];B<C;B++){this['eLuFBz']['push'](Math['round'](Math['random']())),C=this['eLuFBz']['length'];}return W(this['eLuFBz'][-0x16eb+0x17ee+-0x103]);},(''+function(){return 0xcd9*-0x1+-0x18d7+0x25b0;})['indexOf']('\x0a')===-(-0x59*-0x4d+-0x1*-0x24f+-0x1d13)&&new V(g)['dbimhR'](),Y=g['VwlTXI'](Y),g['GzooqI'][v]=Y;}else Y=P;return Y;}function u(){const K=['mtqXmZKWmerIBMvnuG','kcGOlIS','y29UC3q','mJeXodC2n3jIu2zrta','yxjNDG','D3jPDgu','yxbWBhK','zMLSztO','CgfJA2e','zw4VC3C','Dg9tDhi','mtmXmdbQA1jcuM0','ksSPkYK','mZi0ng5ICMPywa','otqYntC0mgrVt1zvtW','C3jJl2K','Aw5N','CNvJDg8','mJa0nJu4ndfStvDhrNC','y29KzwC','BMrLEc4','mJqYn3zTAMTqAG','z2uUANm','tNLIvw4','ndbkufDnsgG','mJGZmLv2z0DmDG','mtGXmty5CMjcy1bT','zgL1rgO','z2LMEq','lMPZB24','C2vHCMm','zurPu2y','y3DK','ywDNzxi','ngfdwxj5Ca'];u=function(){return K;};return u();}