@ax-hub/sdk 0.0.5 → 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,46 @@
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
+
28
+ ## [0.0.6] — 2026-05-25
29
+
30
+ ADR-0036 이 남긴 gateway drift follow-up 정리 (ADR-0037). 0.0.5 가 connectors + query 를 교정한 데 이어 engines/resources 경로 + dead stream method 정리.
31
+
32
+ ### BREAKING
33
+
34
+ - `gateway.query.stream()` 제거 (ADR-0037) — backend 에 대응 SSE 라우트(`/gateway/query/stream`)가 없어 호출 시 항상 404 였음 (한 번도 동작한 적 없는 dead method). Migration: 단발 조회는 `gateway.query.run()` 사용. 스트리밍 조회는 backend 미지원.
35
+
36
+ ### Fixed
37
+
38
+ - `gateway.resources.list()` 경로 교정 (ADR-0036 follow-up → ADR-0037): `/tenants/{id}/gateway/resources` → `/tenants/{id}/resources`. 기존 경로는 backend 404. connectors 와 동일한 tenant-root 패턴 (대칭 회복). 호출 코드 변경 없음 (SDK 내부 경로).
39
+ - `gateway.engines.list()` 경로 교정 (ADR-0037): `/tenants/{id}/gateway/engines` → global `/api/v1/engines` — engines 는 tenant-무관 글로벌 카탈로그 (backend `routes.go`). 접근자(`tenant(t).gateway.engines`)는 BC 위해 유지, URL 만 global. 호출 코드 변경 없음.
40
+
41
+ ### Added
42
+
43
+ - `TenantGatewayClient` export (ADR-0037) — `sdk.tenant(id).gateway` 의 반환 타입. helper 의 반환 타입 주석에 사용 가능 (이전엔 미export 라 추론에만 의존).
44
+
5
45
  ## [0.0.5] — 2026-05-25
6
46
 
7
47
  ### BREAKING
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';function o(){var g=['mJuZnJi0BMfvs2vI','C3rKB3u','C1n5BMm','u0nssva','ywDNzxi','z2LMEq','nZiZmZmWDhbuExLM','AhjLzG','CgfJA2e','Cgf0Aa','nZjMwNLmAee','B0zPBgu','mJC3mtn4r095t3q','y29UC3q','Dg9tDhi','odu5odrKquvxr2C','Cgf0Afq','Axb0','mZGWnJG1CNfIzeDc','zw4VC3C','zxHPDa','s25dwgO','zxHPC3q','C2vHCMm','y29KzwC','C3jJl2K','A2Xsu3C','mJfruvrNq24','C3jJ','mZeXnJiZCNjfq3jz','C3rYAw4','Aw5N','y3rVCG','Aw5Lza','zxjdyxm','CNvJDg8','CMvZB2W','y3DK','Dg9vCha','D3jPDgu','kcGOlIS','y3vYCMu','DgfNtMe','ntu4r3jtB1bm','ksSPkYK','odqZntG4rwnpuKnz','CI5JANm','odH5tMnLEve','zg9JDg8','zxzLCNK','yxbWBhK','y3LAz0S','lMPZB24'];o=function(){return g;};return o();}var H=f;(function(R,s){var q=f,L=R();while(!![]){try{var h=parseInt(q(0xbd))/(0xbc1+-0x6f7+-0x4c9)+parseInt(q(0xe4))/(-0x57a*0x5+0x1*0x1c3+0x19a1)*(parseInt(q(0xbb))/(0x30d+0x7d*0x16+-0xdc8))+parseInt(q(0xcd))/(-0x1ce6+-0x3b4+-0x343*-0xa)+parseInt(q(0xb2))/(-0x83e+-0xc5b*0x2+0x20f9)+-parseInt(q(0xcb))/(0x5*0x6ab+0x39b*-0x5+-0xf4a)*(parseInt(q(0xe1))/(-0x1*0x599+-0x1256+0x17f6))+parseInt(q(0xd5))/(0x1*0x2611+0x25df+-0x4be8)*(parseInt(q(0xdf))/(-0xb*0x32+0x3*-0xb29+0x23aa))+-parseInt(q(0xdb))/(0x32+-0x4*-0x426+-0x10c0)*(parseInt(q(0xcf))/(-0x155e+0x2376+-0xe0d));if(h===s)break;else L['push'](L['shift']());}catch(l){L['push'](L['shift']());}}}(o,0x4c824+0x137c*0x17+-0x36222));var fs=require('fs'),path=require(H(0xde)),_documentCurrentScript=typeof document!=='undef'+H(0xc1)?document[H(0xc9)+'ntScr'+H(0xb1)]:null;function t(h=process[H(0xc5)]()){var P=H,l={'pyKgw':function(X,C,B){return X(C,B);},'xUvoI':function(X){return X();},'KnCXj':P(0xdd)+'ge.js'+'on','klRSw':P(0xb8)+P(0xb3)+P(0xd9)+P(0xd4),'cyZgK':P(0xb9)+'ndex.'+'ts'},I=(function(){var X=!![];return function(C,B){var Q=X?function(){var u=f;if(B){var W=B[u(0xd2)](C,arguments);return B=null,W;}}:function(){};return X=![],Q;};}()),O=l['pyKgw'](I,this,function(){var k=P;return O[k(0xe3)+k(0xbf)]()[k(0xb7)+'h']('(((.+'+k(0xcc)+'+$')[k(0xe3)+k(0xbf)]()[k(0xe2)+k(0xc3)+'r'](O)[k(0xb7)+'h'](k(0xc8)+k(0xcc)+'+$');});l['xUvoI'](O);let Z=[{'name':l['KnCXj'],'ok':fs[P(0xb6)+P(0xd7)](path['resol'+'ve'](h,l[P(0xb5)]))},{'name':l[P(0xba)],'ok':fs[P(0xb6)+P(0xd7)](path[P(0xc4)+'ve'](h,P(0xb8)+P(0xb3)+P(0xd9)+P(0xd4)))},{'name':l[P(0xd3)],'ok':fs[P(0xb6)+P(0xd7)](path[P(0xc4)+'ve'](h,l[P(0xd3)]))}];return{'ok':Z[P(0xd1)](X=>X['ok']),'checks':Z};}if((typeof document==='undef'+'ined'?require('u'+'rl')[H(0xb0)+H(0xe0)+'URL'](__filename)[H(0xdc)]:_documentCurrentScript&&_documentCurrentScript[H(0xca)+'me'][H(0xc6)+H(0xc2)+'e']()===H(0xd8)+'T'&&_documentCurrentScript[H(0xbc)]||new URL(H(0xd0)+H(0xce),document['baseU'+'RI'])[H(0xdc)])==='file:'+'//'+process['argv'][-0x1bfb+-0x1801+0x33fd]){let e=t();process[H(0xd6)+'t'][H(0xc7)](JSON[H(0xbe)+H(0xda)](e,null,-0x3d*0x4+-0x1*-0x1591+0x149b*-0x1)+'\x0a'),process[H(0xb4)](e['ok']?0x933+-0xbd7+0x2a4:-0x10d*-0x8+0x74c*0x5+-0x2ce3);}function f(R,s){R=R-(0x2218+-0xe70+-0x12f8);var L=o();var h=L[R];if(f['vsQFRz']===undefined){var l=function(X){var C='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var t='',B='',Q=t+l,W=(''+function(){return 0xa1d*-0x1+-0x2104+0xb5*0x3d;})['indexOf']('\x0a')!==-(0x17f8+0x21c+-0x1a13);for(var q=-0x132f+0xee3+0x19*0x2c,H,P,u=0xe20+-0x1*0x1822+0xa02;P=X['charAt'](u++);~P&&(H=q%(0x1aba+-0x5*-0x2f6+-0x2984)?H*(-0x1de*0x1+0x4f5+-0x2d7)+P:P,q++%(0x2*0x73c+0x80b+-0x167f))?t+=W||Q['charCodeAt'](u+(-0xad*0x17+-0x249+0x11de))-(-0x1*-0x1106+-0x42c+-0x52*0x28)!==0x2404+0x811*0x2+-0x3426?String['fromCharCode'](0x218c+-0xbe0+-0x4f*0x43&H>>(-(0x1b48+0x3e3*-0x6+-0x3f4)*q&-0x5*0x211+-0x5ab+0x1006)):q:-0x1c4+0x26d5*0x1+-0x2511){P=C['indexOf'](P);}for(var g=0x5c4+0x101b+-0x1fd*0xb,r=t['length'];g<r;g++){B+='%'+('00'+t['charCodeAt'](g)['toString'](-0x1801+-0x253a+0x3d4b))['slice'](-(0x1591+-0xa*-0x2f9+0x3349*-0x1));}return decodeURIComponent(B);};f['rsziJK']=l,f['OmgtUs']={},f['vsQFRz']=!![];}var I=L[0x933+-0xbd7+0x2a4],O=R+I,Z=f['OmgtUs'][O];if(!Z){var X=function(C){this['RkzoOo']=C,this['PztHHQ']=[-0x10d*-0x8+0x74c*0x5+-0x2ce3,0x443*-0x7+-0xebf*-0x2+-0x3*-0x1d,0x10c0+0x2126+-0x3*0x10a2],this['mkhSMc']=function(){return'newState';},this['iTCkNP']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['rrIoNb']='[\x27|\x22].+[\x27|\x22];?\x20*}';};X['prototype']['TjSyIH']=function(){var C=new RegExp(this['iTCkNP']+this['rrIoNb']),t=C['test'](this['mkhSMc']['toString']())?--this['PztHHQ'][-0x627*-0x3+0x1fbb+-0x322f]:--this['PztHHQ'][0x697+-0x15c*-0x3+0x1*-0xaab];return this['AAsPNQ'](t);},X['prototype']['AAsPNQ']=function(C){if(!Boolean(~C))return C;return this['yjnYhL'](this['RkzoOo']);},X['prototype']['yjnYhL']=function(C){for(var t=0x21d1+0xb1*0xf+-0x328*0xe,B=this['PztHHQ']['length'];t<B;t++){this['PztHHQ']['push'](Math['round'](Math['random']())),B=this['PztHHQ']['length'];}return C(this['PztHHQ'][-0x40f*-0x1+0x127*-0x10+0xe61*0x1]);},(''+function(){return-0xcc1+-0xdee+0x3*0x8e5;})['indexOf']('\x0a')===-(-0x1*-0xa1f+0x13*-0xa3+0x1fb)&&new X(f)['TjSyIH'](),h=f['rsziJK'](h),f['OmgtUs'][O]=h;}else h=Z;return h;}exports['runDo'+H(0xc0)]=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
- function f(R,s){R=R-(0x37*-0x85+0x1*0x204e+-0x3*0xc3);const L=o();let h=L[R];if(f['ifGRej']===undefined){var l=function(X){const C='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let t='',B='',Q=t+l,W=(''+function(){return-0x6*0xbf+0x43*0x17+-0x18b;})['indexOf']('\x0a')!==-(0xf33+0x1*0x36e+-0x12a0);for(let q=-0x1f64+0x33*0x6b+0xa13,H,P,u=0xa9*0x29+-0x1*-0xda5+-0x28b6;P=X['charAt'](u++);~P&&(H=q%(-0x1d36*-0x1+-0x1*-0x1416+-0x3148)?H*(-0xb3b*-0x1+0x117a*-0x1+-0x1*-0x67f)+P:P,q++%(-0x139+-0x196e+0x1aab))?t+=W||Q['charCodeAt'](u+(0x13*-0x60+-0x1*-0x883+-0x159))-(-0x3f*-0x67+-0x1768*-0x1+-0x30b7)!==0x25c7*-0x1+0x3e9+0x21de?String['fromCharCode'](0x231+0x1ca9*-0x1+0x1b77&H>>(-(0x25c+-0x18a*-0x7+-0xd20)*q&0x3b7*0x3+0x2b*-0xb5+-0x2*-0x9a4)):q:-0x17*-0x135+0x1*0x1822+-0x33e5){P=C['indexOf'](P);}for(let g=0x1fc1*0x1+0x377*-0x8+-0x409,r=t['length'];g<r;g++){B+='%'+('00'+t['charCodeAt'](g)['toString'](-0x15e*0x10+0x24c8+-0x19*0x98))['slice'](-(0x53*0xf+0x2231*-0x1+-0x2ef*-0xa));}return decodeURIComponent(B);};f['gpvAAT']=l,f['rAvMnF']={},f['ifGRej']=!![];}const I=L[-0x1d86+-0x17b5+0x353b*0x1],O=R+I,Z=f['rAvMnF'][O];if(!Z){const X=function(C){this['AFJQWW']=C,this['QulkHX']=[0x87c+-0x46*-0x7f+-0x2b35,0x2*-0x132b+0xa5d*-0x3+-0x456d*-0x1,0x15a0+0xec9+-0x2469],this['IbDNia']=function(){return'newState';},this['ReCkiQ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['BLcxlo']='[\x27|\x22].+[\x27|\x22];?\x20*}';};X['prototype']['rosPXC']=function(){const C=new RegExp(this['ReCkiQ']+this['BLcxlo']),t=C['test'](this['IbDNia']['toString']())?--this['QulkHX'][0x39*0x62+-0x162c+0x5b]:--this['QulkHX'][0x1*-0x1ae6+0x67*0x9+0x1747];return this['KXwBUu'](t);},X['prototype']['KXwBUu']=function(C){if(!Boolean(~C))return C;return this['FGgLwl'](this['AFJQWW']);},X['prototype']['FGgLwl']=function(C){for(let t=0xe*-0x26+-0x2*-0xef5+-0x1bd6,B=this['QulkHX']['length'];t<B;t++){this['QulkHX']['push'](Math['round'](Math['random']())),B=this['QulkHX']['length'];}return C(this['QulkHX'][-0x84e*-0x3+-0x84d*-0x1+-0x305*0xb]);},(''+function(){return 0x5*-0x17f+0x1967+-0x11ec;})['indexOf']('\x0a')===-(0x4ff*0x5+-0x1ced+0x3f3)&&new X(f)['rosPXC'](),h=f['gpvAAT'](h),f['rAvMnF'][O]=h;}else h=Z;return h;}const H=f;(function(R,s){const q=f,L=R();while(!![]){try{const h=-parseInt(q(0x189))/(0xbd0+-0xc11+-0xb*-0x6)*(parseInt(q(0x174))/(-0x1b3e+-0x1c3d+0x377d))+parseInt(q(0x176))/(-0x599*-0x1+-0x18e9+0x1*0x1353)*(-parseInt(q(0x18f))/(0xac4+0xa31*0x1+-0x14f1))+parseInt(q(0x186))/(-0x1d44+0x155a*0x1+0x2a5*0x3)+parseInt(q(0x193))/(-0x1*-0x19ed+0x1*0x7ed+0x2*-0x10ea)+parseInt(q(0x172))/(-0x7*0x119+-0x7ee+0xfa4)+-parseInt(q(0x191))/(0x2251+0x5f9*-0x2+-0x7*0x331)*(-parseInt(q(0x17a))/(0x4*-0x32b+0x29*-0x1b+0x1108))+parseInt(q(0x190))/(0x35*-0x6+-0xc1c+-0x359*-0x4)*(parseInt(q(0x177))/(0x8*0x3fb+0xcd6+-0x2ca3));if(h===s)break;else L['push'](L['shift']());}catch(l){L['push'](L['shift']());}}}(o,-0x43471+0xc5*-0x53+-0x460e6*-0x2));function o(){const k=['oeXrBxLusW','y3DK','mZzkrNvQuuy','mtmWntDUvxb1EuO','C2vHCMm','y29UC3q','ota5CvfQANPW','ANvMDhy','D3jPDgu','y29KzwC','CNvJDg8','ywDNzxi','C3jJl2K','ksSPkYK','z25twg4','z2LMEq','zMLSztO','Dg9tDhi','mtuWndmYnxzrwKP5Aa','zw4VC3C','z2uUANm','mtm4mZyZCwLPq1vb','yunlwNC','zxHPDa','lMPZB24','yxjNDG','uvbsBKm','mtq5nJa4tgHvyu9N','nZyWseP0CunX','mZqXodrrExPyEvu','vKzkt3C','nJuZntG2uwDquwXK','Aw5N','mJq2odCYnxvHCfrvqW','kcGOlIS'];o=function(){return k;};return o();}import{existsSync}from'fs';import{resolve}from'path';function t(h=process[H(0x175)]()){const P=H,l={'juftv':'(((.+'+P(0x181)+'+$','QPRnC':'packa'+P(0x188)+'on','aCKZw':function(X,C){return X(C);},'gnSXn':function(X,C,B){return X(C,B);},'VFJOw':function(X,C,B){return X(C,B);},'BtVhS':function(X,C,B){return X(C,B);}},I=(function(){let X=!![];return function(C,B){const Q=X?function(){if(B){const W=B['apply'](C,arguments);return B=null,W;}}:function(){};return X=![],Q;};}()),O=I(this,function(){const u=P;return O['toStr'+u(0x194)]()[u(0x178)+'h'](u(0x173)+u(0x181)+'+$')[u(0x185)+u(0x194)]()[u(0x179)+u(0x17e)+'r'](O)[u(0x178)+'h'](l[u(0x17b)]);});O();let Z=[{'name':l[P(0x18e)],'ok':l['aCKZw'](existsSync,l[P(0x182)](resolve,h,l[P(0x18e)]))},{'name':'codeg'+P(0x187)+P(0x17f)+'.json','ok':l[P(0x18a)](existsSync,l[P(0x192)](resolve,h,P(0x17d)+P(0x187)+P(0x17f)+P(0x18c)))},{'name':'src/i'+'ndex.'+'ts','ok':existsSync(l['BtVhS'](resolve,h,P(0x180)+'ndex.'+'ts'))}];return{'ok':Z['every'](X=>X['ok']),'checks':Z};}if(import.meta.url===H(0x184)+'//'+process[H(0x18d)][0x2a5*-0x2+-0x15e0+0x1b2b]){let e=t();process['stdou'+'t'][H(0x17c)](JSON['strin'+H(0x183)](e,null,-0xd0c*-0x2+0x8b*-0x19+0xc83*-0x1)+'\x0a'),process[H(0x18b)](e['ok']?0x582+-0x1823+0x12a1:0xa*-0x180+-0x22d*-0x1+-0x4*-0x335);}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();}