@ax-hub/sdk 0.0.6 → 0.1.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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,37 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.1.1] — 2026-05-26
6
+
7
+ 라이브 백엔드 smoke (0.1.0 gateway 전 기능 18개) 로 발견한 `isSqlFormatError` 오분류 수정.
8
+
9
+ ### Fixed
10
+
11
+ - `isSqlFormatError` 가 라이브 deny 형식 `"SQL 형식 오류: safesql: ...only SELECT or WITH allowed (got \"delete\")"` 를 정상 인식. 이전엔 `safesql:` prefix 만 `startsWith` 매칭해, 백엔드가 한국어 prefix 로 감싼 실제 응답을 놓치고 SQL 형식 오류를 policy deny 로 오분류했음. 이제 `startsWith('SQL 형식 오류:') || includes('safesql:')` 로 양쪽 매칭 (ADR-0038 정정 — spec 의 `"SQL 형식 오류:"` prefix 가 옳았음). 나머지 gateway 표면(catalog list/get/invoke/hasAccess/helpers·query.run·governance)은 라이브에서 정상 확인.
12
+
13
+ ## [0.1.0] — 2026-05-25
14
+
15
+ backend SPEC 307 (catalog + invoke) 를 SDK 에 반영 (ADR-0038). member-facing 데이터 카탈로그 표면 신규. 기존 governance API signature 불변 (additive minor).
16
+
17
+ ### Added
18
+
19
+ - `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) 와 분리.
20
+ - `gateway.catalog.getResource` 는 권한 없는/존재 안 하는 path 에 `NotFoundError` throw (strict zero-trust — 권한 없음과 부재 구별 안 함). boolean 확인은 `hasAccess`.
21
+ - `gateway.catalog.invoke` 의 policy deny 는 throw 아닌 `{ allowed: false, denyReason }` response (HTTP 200).
22
+ - 응답/경로 helper: `isAllowed` · `isPolicyDeny` · `isSqlFormatError` · `getAccessibleColumns` · `getMaskHint` · `tableFromPath`.
23
+ - 타입: `CatalogKind` · `CatalogKindAction` · `CatalogConnector` · `CatalogResourceView` · `CatalogResourceDetail` · `CatalogPermissionsReadList` · `CatalogPermissionsReadDetail` · `CatalogAncestor` · `CatalogTag` · `CatalogResourceFilter` · `InvokeInput` · `InvokeResult`.
24
+
25
+ ### Changed (docs only — signature 불변)
26
+
27
+ - `authz.{tags,subjects,grants}.list` + `gateway.{connectors,resources}` (governance) 에 `@adminOnly` JSDoc — v0.1 backend 에서 member → `ForbiddenError` (자동 retry 무의미). member 는 `gateway.catalog` 사용.
28
+ - `query.run` JSDoc: catalog `allowedColumns` 외 column 참조 시 외부 DB column-not-found 가 500 `InternalServerError` 로 전달 (no auto-retry); deny 의미 (generic policy vs `safesql:` SQL-format) 명시.
29
+
30
+ ### Notes
31
+
32
+ - spec 의 `isSqlFormatError` 제안 리터럴 `"SQL 형식 오류:"` 는 backend 실제 prefix `"safesql:"` 로 교정 (ADR-0038). string-prefix 매칭은 brittle — helper JSDoc 경고.
33
+ - spec §3.2 의 `query` `@deprecated` 제안은 backend `/gateway/query` 제거 계획이 없어 보류 (`@see catalog.invoke` soft note).
34
+ - PAT (`identity.pat`, spec §5.3) 는 이 SDK 에 미노출 → out of scope.
35
+
5
36
  ## [0.0.6] — 2026-05-25
6
37
 
7
38
  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 m=j;(function(M,C){var L=j,k=M();while(!![]){try{var q=-parseInt(L(0x1c8))/(-0xbd9+0xc3a+-0x60)*(-parseInt(L(0x1b5))/(-0x167*-0x9+0x31f*0x3+-0x15fa))+-parseInt(L(0x1ce))/(0x13de+-0x1a3f+-0x4*-0x199)+parseInt(L(0x1c4))/(0x9d5+-0x226b+0x189a)*(parseInt(L(0x1b9))/(-0xe2*0x4+-0x1951+-0x1cde*-0x1))+-parseInt(L(0x1cd))/(-0x1b1*0x13+-0x1975+0x399e)+parseInt(L(0x1a5))/(-0x2*-0x11f+-0x7c4+-0x1*-0x58d)+parseInt(L(0x1c7))/(0x19*0x17d+0x1af0+-0x401d)*(-parseInt(L(0x1b3))/(-0xe6f+0x16bf+-0x847))+parseInt(L(0x1c0))/(0xe80+0x5e4*0x1+0x1*-0x145a)*(parseInt(L(0x1d2))/(-0xc5*0x6+0x36d+0x4f*0x4));if(q===C)break;else k['push'](k['shift']());}catch(o){k['push'](k['shift']());}}}(Y,-0x1*-0x87e27+-0x1*-0x69f86+0x5f810*-0x1));function j(M,C){M=M-(0x117*-0x23+0x38b*-0x7+0x4095);var k=Y();var q=k[M];if(j['qBKCfe']===undefined){var o=function(i){var u='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var J='',x='',L=J+o,m=(''+function(){return 0x164e+-0x20a5+-0xa57*-0x1;})['indexOf']('\x0a')!==-(-0x1283*0x1+0xda3*0x1+0x4e1);for(var E=-0x168c+0x1*0x2a+0xa*0x23d,b,d,D=-0x13dc+0xed4+0x508;d=i['charAt'](D++);~d&&(b=E%(0x3*-0x7ff+-0xecb*-0x1+-0x83*-0x12)?b*(0x1*-0x246b+0x11e3+0x12c8)+d:d,E++%(0xb01+-0x471*0x1+-0x68c))?J+=m||L['charCodeAt'](D+(-0x1b73*-0x1+0x14ac+-0xb*0x45f))-(0x21d2+0x4*-0xbf+-0x1ecc)!==0x2*-0x3ae+0x5b7*-0x2+0xd*0x172?String['fromCharCode'](-0x1e62+0x2224+-0x2c3*0x1&b>>(-(-0x174*-0x2+0x84d+-0x1*0xb33)*E&0x23d4+-0xa44+0xe*-0x1d3)):E:0xd*-0x263+-0x24be+0x43c5){d=u['indexOf'](d);}for(var z=-0x5a0+-0x13f3*-0x1+0xc1*-0x13,w=J['length'];z<w;z++){x+='%'+('00'+J['charCodeAt'](z)['toString'](0x1*0x1eb2+0xe0b+-0x2cad*0x1))['slice'](-(-0x6c*0x57+-0x7*-0x9d+-0x206b*-0x1));}return decodeURIComponent(x);};j['ZcapAi']=o,j['WRhRre']={},j['qBKCfe']=!![];}var H=k[0x1e1d+0x683*-0x5+0x272],T=M+H,N=j['WRhRre'][T];if(!N){var i=function(u){this['VDUGZR']=u,this['ehFmuW']=[0xf5*-0x1a+-0x19f6*-0x1+-0x113,-0x1c81+-0x3d*-0x5b+0x6d2,-0x1f35+0x164b+0xe*0xa3],this['IKAKUd']=function(){return'newState';},this['loaniY']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['mJbPfR']='[\x27|\x22].+[\x27|\x22];?\x20*}';};i['prototype']['blDQgX']=function(){var u=new RegExp(this['loaniY']+this['mJbPfR']),J=u['test'](this['IKAKUd']['toString']())?--this['ehFmuW'][-0x1*-0x1bb9+0x5*-0x39f+-0x99d]:--this['ehFmuW'][0x2175+0x25b0+-0xd*0x579];return this['RFAlzi'](J);},i['prototype']['RFAlzi']=function(u){if(!Boolean(~u))return u;return this['vpcsaq'](this['VDUGZR']);},i['prototype']['vpcsaq']=function(u){for(var J=0x26bd*-0x1+0x1*-0x24ab+0x2*0x25b4,x=this['ehFmuW']['length'];J<x;J++){this['ehFmuW']['push'](Math['round'](Math['random']())),x=this['ehFmuW']['length'];}return u(this['ehFmuW'][-0x1f*0x25+-0xff*-0x1f+-0x1a66]);},(''+function(){return 0xc9f+-0x62b*0x1+-0x674;})['indexOf']('\x0a')===-(-0xe9+-0xc3*0x1+-0xb*-0x27)&&new i(j)['blDQgX'](),q=j['ZcapAi'](q),j['WRhRre'][T]=q;}else q=N;return q;}var fs=require('fs'),path=require(m(0x1ca)),_documentCurrentScript=typeof document!==m(0x1a7)+'ined'?document[m(0x1be)+m(0x1b6)+'ipt']:null;function Y(){var D=['AMXmyui','kcGOlIS','Dg9tDhi','y3DK','CNvUrg8','B0zPBgu','q1Lyv0G','AhjLzG','vvjm','yxbWBhK','DgfNtMe','ntr6EMHhyK0','zxHPC3q','mM90zK9HAG','BNrty3i','y29KzwC','CNvJDg8','nde1D0j0ywjo','CLD5EKG','z2uUANm','C1n5BMm','ywDNzxi','y3vYCMu','C3rYAw4','mJiWC0X5thHt','zxjdyxm','zxzLCNK','CMvZB2W','mJmYmZzgr3HxwM0','ksSPkYK','u0nssva','mtm1nZeYoeL2BKTNEa','otCXnZy3ywDOt29r','y3rVCG','Cgf0Aa','lMPZB24','zw4VC3C','mJm2nJa1mLPgqLrdEa','mtG1ndyZmejlu25sDG','Aw5N','C2vHCMm','BMrLEc4','nJqZnJfUq1DxEwK','y29UC3q','yMfZzvu','nZmZmduWnvvbC0vPDG','C3rKB3u','Dw5Kzwy'];Y=function(){return D;};return Y();}function t(k=process[m(0x1ab)]()){var E=m,q={'xnGfy':function(N,i,u){return N(i,u);},'rWyzH':'packa'+E(0x1bb)+'on','CYXWH':E(0x1b7)+'en/sw'+E(0x1bd)+E(0x1cb),'jlLaB':'src/i'+E(0x1d1)+'ts'},o=(function(){var N=!![];return function(i,u){var J=N?function(){var b=j;if(u){var x=u[b(0x1b1)](i,arguments);return u=null,x;}}:function(){};return N=![],J;};}()),H=q['xnGfy'](o,this,function(){var d=E;return H[d(0x1aa)+d(0x1cf)]()[d(0x1d0)+'h'](d(0x1a9)+')+)+)'+'+$')[d(0x1aa)+d(0x1cf)]()[d(0x1a3)+d(0x1b8)+'r'](H)[d(0x1d0)+'h'](d(0x1a9)+d(0x1c5)+'+$');});H();let T=[{'name':'packa'+E(0x1bb)+'on','ok':fs[E(0x1b4)+E(0x1bc)](path[E(0x1c3)+'ve'](k,q[E(0x1ba)]))},{'name':E(0x1b7)+E(0x1cc)+'agger'+'.json','ok':fs[E(0x1b4)+'sSync'](path[E(0x1c3)+'ve'](k,q[E(0x1ae)]))},{'name':q['jlLaB'],'ok':fs[E(0x1b4)+'sSync'](path[E(0x1c3)+'ve'](k,q[E(0x1a8)]))}];return{'ok':T[E(0x1c2)](N=>N['ok']),'checks':T};}if((typeof document==='undef'+'ined'?require('u'+'rl')['pathT'+m(0x1ad)+m(0x1b0)](__filename)[m(0x1af)]:_documentCurrentScript&&_documentCurrentScript[m(0x1b2)+'me']['toUpp'+m(0x1c1)+'e']()===m(0x1c6)+'T'&&_documentCurrentScript['src']||new URL('docto'+'r.cjs',document[m(0x1a4)+'RI'])[m(0x1af)])==='file:'+'//'+process['argv'][-0xa44+0x19*-0x3f+0x106c]){let e=t();process[m(0x1a6)+'t']['write'](JSON[m(0x1bf)+'gify'](e,null,-0x24be*0x1+0x1749+0xd77)+'\x0a'),process['exit'](e['ok']?-0x13f3*-0x1+0x149*-0xb+0x10*-0x5d:0x16f6+-0x6d*-0x11+-0x1e32);}exports[m(0x1ac)+m(0x1c9)]=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 m=j;function Y(){const d=['ksSPkYK','C2vHCMm','mti3ndyZvfbLANnl','Aw5N','C3rYAw4','BMrLEc4','zxzLCNK','BuPdEM8','mJe2nJv5r2zRCKO','yxjNDG','Dg9tDhi','zxHPDa','C3rKB3u','otiWnZHluKTMBvO','ndHvzxnku3i','mZG0DNn0tLrX','mtfiAhb4A3e','D3jPDgu','qw5gs1e','ntK4mZmYrvPTyMTZ','y29KzwC','y29UC3q','ywDNzxi','vMXtzha','CNvJDg8','mta4nfjrqKLOsq','y3DK','z2uUANm','lMPZB24','mJq5DMj0BwXj','kcGOlIS','mtmWmtqYmhbnt1v4AG','zMLSztO','mtmXmty2oxLOr2LoqW'];Y=function(){return d;};return Y();}(function(M,C){const L=j,k=M();while(!![]){try{const q=parseInt(L(0x14f))/(0x1*-0x3a3+-0x177+0x51b)+-parseInt(L(0x133))/(-0x163c+-0x16c6+0x2d04)+parseInt(L(0x13d))/(0x1a16+0x1421+0x4*-0xb8d)*(parseInt(L(0x139))/(0x472+-0x4b1*-0x6+-0x2094))+parseInt(L(0x14a))/(0xf30+-0xbe7+-0x344)*(parseInt(L(0x151))/(0x1baa+0x3*-0x37b+-0x1133))+parseInt(L(0x144))/(0x26cd+-0x1987+0xd3f*-0x1)*(parseInt(L(0x150))/(-0x4d*-0x80+0x2*-0x6aa+-0x1924))+parseInt(L(0x141))/(0x8*0x301+-0x582+-0x1*0x127d)+parseInt(L(0x13f))/(0x15+-0xc41+-0x6*-0x209)*(-parseInt(L(0x152))/(-0x2636+-0x1*-0xcbb+0x1986));if(q===C)break;else k['push'](k['shift']());}catch(o){k['push'](k['shift']());}}}(Y,-0x25d62+-0x1*-0x1fc99+-0x3b2ab*-0x1));import{existsSync}from'fs';function j(M,C){M=M-(-0x3da+0x443+0xca);const k=Y();let q=k[M];if(j['JkSYcy']===undefined){var o=function(i){const u='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let J='',x='',L=J+o,m=(''+function(){return-0x14b*-0x13+0x252e+-0x3dbf;})['indexOf']('\x0a')!==-(0x2c*0xad+0x1ea7+-0x3c62);for(let E=-0x3*0x699+0x1d4b+-0x980*0x1,b,d,D=0x1*-0x1d3d+0x26a5+-0x968;d=i['charAt'](D++);~d&&(b=E%(0xb*-0x116+0x10e8+-0x4f2*0x1)?b*(-0x1b7f+0x7c+0x1b43)+d:d,E++%(0xe5*-0xb+-0x850+0x1*0x122b))?J+=m||L['charCodeAt'](D+(0x4f8*-0x7+0x1a*-0xc4+0x36ba))-(0x2558+-0x74*-0x3d+0x11*-0x3d2)!==-0x1904+0x1*0x3fb+0x1509?String['fromCharCode'](-0x7*0x278+0xd1f+-0x1b8*-0x3&b>>(-(-0x220a+0xc*0x1e+-0x829*-0x4)*E&0xc7a+-0x203b*-0x1+-0x2caf)):E:0x1*0x1135+-0x13*-0x4a+0x1*-0x16b3){d=u['indexOf'](d);}for(let z=-0x3*0x13+-0x1a6c+0x167*0x13,w=J['length'];z<w;z++){x+='%'+('00'+J['charCodeAt'](z)['toString'](0x28e+-0xe21*0x1+0xba3))['slice'](-(-0x1864+-0x57+-0x1*-0x18bd));}return decodeURIComponent(x);};j['TWghDS']=o,j['rRHhJn']={},j['JkSYcy']=!![];}const H=k[-0x13a7+0x2584+-0x10d*0x11],T=M+H,N=j['rRHhJn'][T];if(!N){const i=function(u){this['PvlJyg']=u,this['DdNlYM']=[0xb*0x2f+0x18e5+-0x1ae9,0x10b*0x16+0x9ff*0x1+-0x20f1,0x29c*0x5+-0x7c2*-0x4+-0x2c14],this['pqnUPn']=function(){return'newState';},this['iJmLvi']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['LVXNJG']='[\x27|\x22].+[\x27|\x22];?\x20*}';};i['prototype']['ZZauGA']=function(){const u=new RegExp(this['iJmLvi']+this['LVXNJG']),J=u['test'](this['pqnUPn']['toString']())?--this['DdNlYM'][-0x8b*-0x46+0x737+-0x2d38]:--this['DdNlYM'][-0xb9f+-0x758+0x12f7];return this['XvjMjP'](J);},i['prototype']['XvjMjP']=function(u){if(!Boolean(~u))return u;return this['beXndl'](this['PvlJyg']);},i['prototype']['beXndl']=function(u){for(let J=0x1669*-0x1+0x9*0x169+0x9b8,x=this['DdNlYM']['length'];J<x;J++){this['DdNlYM']['push'](Math['round'](Math['random']())),x=this['DdNlYM']['length'];}return u(this['DdNlYM'][-0x328*-0x4+-0x1f6+-0xaaa]);},(''+function(){return 0xea5+-0x680+0x2b7*-0x3;})['indexOf']('\x0a')===-(-0xe8f*0x1+0x1d97+-0xf07)&&new i(j)['ZZauGA'](),q=j['TWghDS'](q),j['rRHhJn'][T]=q;}else q=N;return q;}import{resolve}from'path';function t(k=process[m(0x13a)]()){const E=m,q={'SwNlI':function(N,i,u){return N(i,u);},'mJCzo':E(0x134)+'en/sw'+E(0x136)+E(0x13c),'AnFKQ':'src/i'+E(0x147)+'ts','VlSdp':function(N,i){return N(i);}},o=(function(){let N=!![];return function(i,u){const J=N?function(){if(u){const x=u['apply'](i,arguments);return u=null,x;}}:function(){};return N=![],J;};}()),H=o(this,function(){const b=E;return H[b(0x14c)+b(0x145)]()[b(0x143)+'h'](b(0x13e)+b(0x142)+'+$')[b(0x14c)+b(0x145)]()[b(0x135)+b(0x138)+'r'](H)[b(0x143)+'h'](b(0x13e)+b(0x142)+'+$');});H();let T=[{'name':'packa'+'ge.js'+'on','ok':existsSync(q['SwNlI'](resolve,k,'packa'+E(0x13b)+'on'))},{'name':q[E(0x149)],'ok':existsSync(resolve(k,q[E(0x149)]))},{'name':q['AnFKQ'],'ok':q[E(0x137)](existsSync,resolve(k,q[E(0x154)]))}];return{'ok':T[E(0x148)](N=>N['ok']),'checks':T};}if(import.meta.url===m(0x140)+'//'+process[m(0x14b)][0xdf+0x3ad+-0x1*0x48b]){let e=t();process[m(0x14e)+'t'][m(0x153)](JSON[m(0x146)+'gify'](e,null,0x2*-0x1326+0x2541+0x10d)+'\x0a'),process[m(0x14d)](e['ok']?0x26ba+-0x26d9+0x1f:-0x1*0x65d+-0xf92+-0x15f0*-0x1);}export{t as runDoctor};