@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 +31 -0
- package/README.md +25 -1
- package/dist/cli/doctor.cjs +1 -1
- package/dist/cli/doctor.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +179 -1
- package/dist/index.d.ts +179 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
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
|
|
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
|
package/dist/cli/doctor.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
'use strict';var
|
|
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;
|
package/dist/cli/doctor.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const
|
|
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};
|