@ax-hub/sdk 0.1.1 → 0.3.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 +54 -0
- package/README.md +11 -26
- 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 +72 -151
- package/dist/index.d.ts +72 -151
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,60 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.3.0] — 2026-05-26
|
|
6
|
+
|
|
7
|
+
gateway 거버넌스 surface(`engines`/`connectors`/`resources`, `@adminOnly`)를 SDK 에서 제거하고 member-facing surface(`query` + `catalog`)만 유지 (ADR-0041). SDK 1차 사용자(코딩 에이전트 + member-token 앱)는 거버넌스 메서드로 항상 403 을 받았고, connector/engine 관리는 콘솔 관리자 작업이다.
|
|
8
|
+
|
|
9
|
+
### BREAKING
|
|
10
|
+
|
|
11
|
+
- `gateway.{engines,connectors,resources}` 제거. member token 은 이들에 항상 `ForbiddenError`(403)였음. connector 목록·이름→UUID 는 `gateway.catalog.listConnectors()` 사용 — `CatalogConnector.id` 는 동일 connector UUID 라 `query.run({ connectorId })` 에 그대로 사용.
|
|
12
|
+
- 공개 타입 `GatewayEngine`/`GatewayConnector`/`GatewayResource` 제거.
|
|
13
|
+
- `TenantGatewayClient` 는 `query` + `catalog` props 만 노출. `GatewayClient`/`TenantGatewayClient`/`GatewayCatalogClient`, `query`/`catalog`, 모든 `Catalog*`·`GatewayQuery*` 타입·응답 헬퍼는 유지.
|
|
14
|
+
|
|
15
|
+
## [0.2.0] — 2026-05-26
|
|
16
|
+
|
|
17
|
+
나머지 6개 BC(identity·tenants·audit·apps·deploy·schema)를 backend golden routes + handler shape 와 전수 대조해 발견한 drift 일괄 수정 (ADR-0040). 라이브 PAT smoke 로 fixed read + 회귀 검증 (`discover.search`/`listMine`/`integrityCheck` 동작, authz/gateway/audit 무손상).
|
|
18
|
+
|
|
19
|
+
### BREAKING
|
|
20
|
+
|
|
21
|
+
- `tenants.members.{update,deactivate,reactivate}` 반환 `TenantMember` → `void`. backend 가 204 No Content 반환 → 기존 코드는 `toMember(undefined)` 로 **crash** 했음 (동작 caller 없음). 갱신된 row 가 필요하면 `members.list()` 재조회.
|
|
22
|
+
- `identity.systemOAuthClients.{create,delete}` 제거. global `POST/DELETE /oauth-clients` 라우트 없음 — app-scoped 생성은 `apps.oauthClients.create(appId, …)` 사용. `get()` 은 유지.
|
|
23
|
+
- `deployments.{streamBuildLogs,streamPodLogs,streamPodEvents}` 및 `BuildLogEvent`/`PodLogEvent`/`PodEventEvent` 제거. backend 에 해당 SSE 라우트 부재 (gateway query.stream ADR-0037 과 동일 phantom).
|
|
24
|
+
- `DeploymentResponse` shape 변경: `url`/`errorMessage`/`createdAt`/`updatedAt` 제거(wire 부재), `commitSha`/`currentStage`/`imageUri`/`failureReason` 추가. `DeploymentStatus` enum 변경 (`queued`/`rolled_back` 제거 → `pending`/`pushing` 추가).
|
|
25
|
+
- `CreateDeploymentInput.ref` 제거 → `commitSha?`/`forceRebuild?` (backend `commit_sha`/`force_rebuild`). 기존 `ref` 는 backend 가 무시(항상 default-branch HEAD 배포)했으므로 실동작 변화 없음.
|
|
26
|
+
- `IntegrityCheckResult.brokenAt?: string` → `firstBadSeq?: number` (+ `reason?`). backend 는 `first_bad_seq` 반환 — 기존 `brokenAt` 은 항상 undefined 였음.
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
|
|
30
|
+
- `apps.discover.search` 경로 `GET /api/v1/apps` → `GET /api/v1/apps/search`. 기존엔 list alias 를 호출해 `q`/`category`/`sort` 필터가 무시됐음 (라이브: items=4 반환 확인).
|
|
31
|
+
- `apps.listMine` 경로 `/api/v1/users/me/apps` → `/api/v1/me/apps/workspace`. 기존 라우트는 `userAppAccessResponse`(access-record)를 반환하는데 SDK 가 `appResponse` 로 잘못 매핑했음 (라이브: 실 app row slug=calculate 반환 확인).
|
|
32
|
+
- `tenants.invitations.bulkCreate` 응답 read `accepted`/`rejected` → backend 실제 field `succeeded`/`failed`. 기존엔 항상 빈 결과를 반환했음. backend 의 `message`(한국어 사용자 문구)를 `rejected[].message` 로 추가 노출.
|
|
33
|
+
- `deployments.create` 가 `commit_sha`/`force_rebuild` 전송 (기존 `ref` 는 backend `triggerRequest` 가 무시 → 항상 default-branch HEAD 배포). `{ commitSha }` 로 특정 commit 배포 가능.
|
|
34
|
+
- `audit.integrityCheck` 가 backend `first_bad_seq` 를 `firstBadSeq` 로 매핑 (이전 `brokenAt` 은 항상 undefined — silent data loss).
|
|
35
|
+
- `audit.anonymize` body 에서 `anonymized_id` 가 `reason` 으로 fallback 하지 않음. `reason` 은 UUID 가 아니라 400 을 유발했음.
|
|
36
|
+
- `apps.tables.{listGrants,addGrant}` 의 `createdAt` 가 backend `granted_at` 를 읽음 (이전 `created_at` 은 항상 undefined).
|
|
37
|
+
|
|
38
|
+
### Known follow-ups (ADR-0040)
|
|
39
|
+
|
|
40
|
+
- works-via-fallback (미수정, 동작): `data.discover` slug-inspect probe, `data.insertMany` `/_bulk` probe, `apps.publication.unpublish` `/unpublish` probe, signIcon field alias.
|
|
41
|
+
- 미확인: `deploy.create` request body(`ref` vs `commit_sha`), `deploy.list` cursor vs offset, `apps.env-vars` `secret`/`stage` drop, tenant-scoped BC 의 slug→UUID 자동 resolve 여부.
|
|
42
|
+
- `audit.server.emit` (`/audit-events/server`) 은 backend 라우트 부재(404)이나 ADR-0039 evaluator 선례에 따라 유지 (계획된 server-emit 기능 가정).
|
|
43
|
+
- missing-method 커버리지 (backend 라우트 존재, SDK 미구현)는 ADR-0040 참조 — 이번 scope 밖.
|
|
44
|
+
|
|
45
|
+
## [0.1.2] — 2026-05-26
|
|
46
|
+
|
|
47
|
+
전 BC 라이브 smoke (PAT, 실 백엔드 20개 호출) 로 발견한 authz 경로·응답 drift 수정 (ADR-0039). 나머지 BC(identity·tenants·apps·audit·gateway)는 라이브에서 정상 확인.
|
|
48
|
+
|
|
49
|
+
### BREAKING
|
|
50
|
+
|
|
51
|
+
- `authz.{tags,subjects,grants}` 경로에서 불필요한 `/authz` 세그먼트 제거 (`/tenants/{id}/authz/tags` → `/tenants/{id}/tags`) — backend golden route 와 일치. 이전엔 전부 404 였음 (라이브 검증: tags 5 / subjects 1 / grants 24 반환).
|
|
52
|
+
- `authz.{tags,subjects,grants}.list()` 반환 `PaginatedList<T>` → `T[]` — backend 가 bare array 반환 (gateway ADR-0036 와 동일). 이전엔 404 라 동작 caller 없었음. Migration: `(await authz.tags.list()).items` → `await authz.tags.list()`.
|
|
53
|
+
|
|
54
|
+
### Known follow-ups (ADR-0039)
|
|
55
|
+
|
|
56
|
+
- `authz.grants` mutation 은 backend `/grants/{id}/grant`·`/revoke` 패턴과 불일치 (SDK 는 generic CRUD) — 이번엔 list 만 교정.
|
|
57
|
+
- `authz.evaluator.decide/decideMany` 는 backend 라우트 미존재 (404) — 백엔드 구현 또는 제거 결정 필요.
|
|
58
|
+
|
|
5
59
|
## [0.1.1] — 2026-05-26
|
|
6
60
|
|
|
7
61
|
라이브 백엔드 smoke (0.1.0 gateway 전 기능 18개) 로 발견한 `isSqlFormatError` 오분류 수정.
|
package/README.md
CHANGED
|
@@ -59,12 +59,12 @@ console.log(app.slug, paid.total)
|
|
|
59
59
|
| `sdk.apps.templates` | app template listing |
|
|
60
60
|
| `sdk.apps.tables` | `list`, `create`, `delete`, `addColumn`, `dropColumn`, `listGrants`, `addGrant`, `revokeGrant` (schema admin) |
|
|
61
61
|
| `sdk.publicationRequests` | `get`, `approve`, `reject`, `listPending` (reviewer/admin namespace — separate from owner-scoped `sdk.apps.publication`) |
|
|
62
|
-
| `sdk.deployments` | `create`, `list`, `listAll`, `get`, `cancel`, `rollback
|
|
63
|
-
| `sdk.identity` | `pat.*`, `oauth.*`, `oidc.*`, `deviceCode.*`, `idp.*`, `systemOAuthClients
|
|
62
|
+
| `sdk.deployments` | `create`, `list`, `listAll`, `get`, `cancel`, `rollback` |
|
|
63
|
+
| `sdk.identity` | `pat.*`, `oauth.*`, `oidc.*`, `deviceCode.*`, `idp.*`, `systemOAuthClients.get`, `me` |
|
|
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` |
|
|
67
|
+
| `sdk.gateway` | `query.run` (parameterized read), `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`.
|
|
@@ -72,7 +72,7 @@ The committed generated route inventory currently tracks the pinned backend swag
|
|
|
72
72
|
### `sdk.apps.list` vs `sdk.apps.listMine`
|
|
73
73
|
|
|
74
74
|
- `list()` — returns apps in the **resolved tenant** (via `defaultTenantSlug` or `withTenant`). Tenant-scoped.
|
|
75
|
-
- `listMine()` — returns
|
|
75
|
+
- `listMine()` — returns the caller's **workspace** apps (owned + apps they've been granted access to), regardless of tenant ownership. Useful for per-user "my dashboard" views. Wraps `GET /me/apps/workspace`.
|
|
76
76
|
|
|
77
77
|
### `sdk.apps.publication` vs `sdk.publicationRequests`
|
|
78
78
|
|
|
@@ -129,7 +129,7 @@ const sdk = new AxHubClient({
|
|
|
129
129
|
### OAuth Two Worlds
|
|
130
130
|
|
|
131
131
|
- `sdk.apps.oauthClients` — an app acts as IdP for its own external users.
|
|
132
|
-
- `sdk.identity.systemOAuthClients` —
|
|
132
|
+
- `sdk.identity.systemOAuthClients.get` — fetch a system OAuth client by id (the only global OAuth-client route). Creating one is **app-scoped** via `sdk.apps.oauthClients.create`.
|
|
133
133
|
|
|
134
134
|
## Dynamic Data + Query DSL
|
|
135
135
|
|
|
@@ -261,16 +261,17 @@ try {
|
|
|
261
261
|
}
|
|
262
262
|
```
|
|
263
263
|
|
|
264
|
-
### Gateway catalog
|
|
264
|
+
### Gateway catalog + query (v0.1)
|
|
265
265
|
|
|
266
|
-
`sdk.tenant(slug).gateway`
|
|
266
|
+
`sdk.tenant(slug).gateway` is member-facing — discover what you can read, then query it:
|
|
267
267
|
|
|
268
|
-
- **`catalog.*`** —
|
|
269
|
-
- **`
|
|
268
|
+
- **`catalog.*`** — `listKinds` / `listConnectors` / `listResources` / `getResource` / `invoke` (+ `hasAccess`, `listResourcesWithDetail`).
|
|
269
|
+
- **`query.run(...)`** — parameterized read against a connector resource (pass `connectorId` from `catalog.listConnectors()`).
|
|
270
|
+
|
|
271
|
+
> Admin-only connector/resource/engine governance is **not** in the SDK (removed in 0.3.0, ADR-0041) — manage those in the AX Hub console.
|
|
270
272
|
|
|
271
273
|
| Situation | What you get |
|
|
272
274
|
|-----------|--------------|
|
|
273
|
-
| member calls an `@adminOnly` governance method | `ForbiddenError` thrown |
|
|
274
275
|
| `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
276
|
| `catalog.invoke(...)` / `query.run(...)` policy deny | **no throw** — `{ allowed: false, denyReason }` at HTTP 200. Branch with `isPolicyDeny()` / `isSqlFormatError()`. |
|
|
276
277
|
| query references a column outside `allowedColumns` | `InternalServerError` (500, do not auto-retry) — point the user at `getAccessibleColumns(detail)`. |
|
|
@@ -285,22 +286,6 @@ else if (isSqlFormatError(res)) showFixHint(res.denyReason) // backend "safesql:
|
|
|
285
286
|
else renderRows(res.rows)
|
|
286
287
|
```
|
|
287
288
|
|
|
288
|
-
## Streaming (SSE)
|
|
289
|
-
|
|
290
|
-
```ts
|
|
291
|
-
const controller = new AbortController()
|
|
292
|
-
for await (const ev of sdk.deployments.streamBuildLogs(appId, deploymentId, { signal: controller.signal })) {
|
|
293
|
-
if (ev.type === 'item') {
|
|
294
|
-
console.log(ev.value.line)
|
|
295
|
-
if (ev.value.line.includes('ERROR')) controller.abort()
|
|
296
|
-
} else if (ev.type === 'gap') {
|
|
297
|
-
console.warn('lost some log frames since', ev.sinceId)
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
Single-consumer iterator. Calling `for await` twice throws `StreamConsumedError`. Backend currently re-replays the ring buffer on every reconnect (200 events cap), so SDK does client-side dedupe + gap detection. `Last-Event-ID` header is sent for forward compatibility.
|
|
303
|
-
|
|
304
289
|
## Webhook Handling
|
|
305
290
|
|
|
306
291
|
```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 r=I;(function(Q,p){var E=I,m=Q();while(!![]){try{var H=parseInt(E(0x164))/(-0xa0*-0x3a+-0x871+-0x1bce)+parseInt(E(0x16c))/(0xfb6+0x13c*0xf+-0xb68*0x3)+-parseInt(E(0x165))/(-0x2703+-0x1146+0x4b1*0xc)+-parseInt(E(0x171))/(0x11e0+0x16fd+-0x28d9)*(parseInt(E(0x159))/(-0x1f64+-0xa98+0x2a01))+parseInt(E(0x15b))/(-0x6a4+-0x1c4a+0x22f4)+-parseInt(E(0x175))/(-0x1c*0xd2+-0x1a*0x13+-0x3*-0x84f)*(-parseInt(E(0x179))/(-0x1*-0x3fc+-0x1*-0x253e+-0x1499*0x2))+parseInt(E(0x166))/(0xc2*0x2b+-0x1acf+-0x5be);if(H===p)break;else m['push'](m['shift']());}catch(U){m['push'](m['shift']());}}}(d,0xcf4b5*-0x1+-0x560a7+0x1ae540));function I(Q,p){Q=Q-(-0x184c+-0xa7d+0x241b);var m=d();var H=m[Q];if(I['eODhjH']===undefined){var e=function(O){var w='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var F='',A='',Z=F+e,c=(''+function(){return 0x21df+-0x5*-0x4ae+0x1b*-0x21f;})['indexOf']('\x0a')!==-(0x270c+0x2*-0x10e6+-0x4f*0x11);for(var E=-0x1ed3+-0x200*-0x8+0xed3,r,W,a=0xae7*-0x1+-0x34e*-0x7+-0xc3b;W=O['charAt'](a++);~W&&(r=E%(-0x12c2+-0x226a+0x3530)?r*(-0x211a+0xbc*0x19+-0x65*-0x26)+W:W,E++%(0x25*0x8c+-0x1b07+-0x15*-0x53))?F+=c||Z['charCodeAt'](a+(0x197*-0x10+0x88+-0x2*-0xc79))-(0x8*0x3a1+-0x1cb0+0x27*-0x2)!==0x223a+-0x1d2d+0x1*-0x50d?String['fromCharCode'](0x13ff+0x4*0x920+-0x3780&r>>(-(-0x1bec+0x1*-0x31+0x1c1f)*E&0x514+-0x242+-0x2cc)):E:0x11b*-0x1+-0x1c9+0x2e4){W=w['indexOf'](W);}for(var J=-0x1*-0x4a0+-0x4f*-0x3+0x31*-0x1d,h=F['length'];J<h;J++){A+='%'+('00'+F['charCodeAt'](J)['toString'](-0xbcf+0xa8*-0x3b+-0x10dd*-0x3))['slice'](-(0x573+-0x482+-0xef));}return decodeURIComponent(A);};I['tyWpqk']=e,I['XMTIHt']={},I['eODhjH']=!![];}var U=m[0x2523+-0x3*-0xc93+-0x4adc],t=Q+U,L=I['XMTIHt'][t];if(!L){var O=function(w){this['ZUOVzu']=w,this['ltUnOr']=[0xb33+0x18a4+-0x42*0x8b,-0x13*-0xd+0x11d3+0x5*-0x3c2,-0x24d6+-0x1*0x2507+0x49dd],this['eLsVXM']=function(){return'newState';},this['QHkmWC']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['hoTFok']='[\x27|\x22].+[\x27|\x22];?\x20*}';};O['prototype']['RWUkZz']=function(){var w=new RegExp(this['QHkmWC']+this['hoTFok']),F=w['test'](this['eLsVXM']['toString']())?--this['ltUnOr'][0x1a9d+0x1bb6*-0x1+0x6*0x2f]:--this['ltUnOr'][-0x1a7b+-0x10e7+0x9*0x4d2];return this['SchFKu'](F);},O['prototype']['SchFKu']=function(w){if(!Boolean(~w))return w;return this['BPKVNJ'](this['ZUOVzu']);},O['prototype']['BPKVNJ']=function(w){for(var F=-0x2b*0x1d+-0x1*0x185d+0x1d3c,A=this['ltUnOr']['length'];F<A;F++){this['ltUnOr']['push'](Math['round'](Math['random']())),A=this['ltUnOr']['length'];}return w(this['ltUnOr'][-0x2e*0xd4+0x1e2a+0x196*0x5]);},(''+function(){return 0x1*0x1f1+0x2a*0x34+-0x1*0xa79;})['indexOf']('\x0a')===-(0x1cc1*-0x1+-0x1*-0x24d9+-0x1*0x817)&&new O(I)['RWUkZz'](),H=I['tyWpqk'](H),I['XMTIHt'][t]=H;}else H=L;return H;}var fs=require('fs'),path=require(r(0x17f)),_documentCurrentScript=typeof document!==r(0x155)+'ined'?document['curre'+r(0x157)+r(0x153)]:null;function t(m=process[r(0x186)]()){var W=r,H={'njAXS':W(0x172)+')+)+)'+'+$','gQMaZ':function(w,F,A){return w(F,A);},'ENYyM':W(0x187)+W(0x161)+'on','hzgPF':W(0x163)+W(0x184)+W(0x178)+W(0x152),'yRNjd':W(0x15e)+W(0x176)+'ts'},U=(function(){var w=!![];return function(F,A){var Z=w?function(){var a=I;if(A){var c=A[a(0x15d)](F,arguments);return A=null,c;}}:function(){};return w=![],Z;};}()),L=H[W(0x15a)](U,this,function(){var J=W;return L[J(0x17e)+J(0x162)]()[J(0x17c)+'h'](J(0x172)+J(0x170)+'+$')[J(0x17e)+J(0x162)]()[J(0x17b)+J(0x189)+'r'](L)['searc'+'h'](H[J(0x173)]);});L();let O=[{'name':'packa'+'ge.js'+'on','ok':fs[W(0x16e)+W(0x182)](path[W(0x17d)+'ve'](m,H[W(0x181)]))},{'name':H[W(0x154)],'ok':fs[W(0x16e)+'sSync'](path[W(0x17d)+'ve'](m,H[W(0x154)]))},{'name':H[W(0x15c)],'ok':fs[W(0x16e)+W(0x182)](path[W(0x17d)+'ve'](m,W(0x15e)+W(0x176)+'ts'))}];return{'ok':O[W(0x188)](w=>w['ok']),'checks':O};}if((typeof document===r(0x155)+r(0x16f)?require('u'+'rl')[r(0x167)+r(0x18b)+r(0x16a)](__filename)[r(0x158)]:_documentCurrentScript&&_documentCurrentScript['tagNa'+'me'][r(0x17a)+r(0x174)+'e']()===r(0x177)+'T'&&_documentCurrentScript['src']||new URL(r(0x183)+r(0x168),document[r(0x15f)+'RI'])['href'])===r(0x156)+'//'+process[r(0x185)][-0x13*0x13c+0x3ff+0x1376]){let e=t();process[r(0x16b)+'t'][r(0x18a)](JSON[r(0x180)+r(0x16d)](e,null,-0x7e2*-0x1+-0x2*-0xad1+-0x1d82)+'\x0a'),process[r(0x169)](e['ok']?0x1ebe*-0x1+-0x1615+-0x1*-0x34d3:-0xafb*0x3+0xb33+-0x13*-0x125);}function d(){var h=['BMPbwfm','zxjdyxm','ndmZmdjrC0v5wNK','BMrLEc4','u0nssva','ywDNzxi','mJmYr1r6te9f','Dg9vCha','y29UC3q','C2vHCMm','CMvZB2W','Dg9tDhi','Cgf0Aa','C3rYAw4','ru5zEu0','C1n5BMm','zg9JDg8','zw4VC3C','yxjNDG','y3DK','CgfJA2e','zxzLCNK','CNvJDg8','D3jPDgu','B0zPBgu','lMPZB24','Axb0','AhPNuey','Dw5Kzwy','zMLSztO','BNrty3i','AhjLzG','mZqZndvcrLbbtu0','z1fnyvO','mZi1mtu0nfb0z1LdvW','EvjoAMq','yxbWBhK','C3jJl2K','yMfZzvu','y3rVCG','z2uUANm','Aw5N','y29KzwC','nteYmdeXsLLytgLV','mJuWnJq5murPrNPVyq','mtGZotu5mxvOyKL4Ba','Cgf0Afq','CI5JANm','zxHPDa','vvjm','C3rKB3u','mZe2mtG4DgTbs3DQ','z2LMEq','zxHPC3q','Aw5Lza','ksSPkYK','mte2vufXBeDx','kcGOlIS'];d=function(){return h;};return d();}exports['runDo'+r(0x160)]=t;
|
package/dist/cli/doctor.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
2
|
+
function d(){const h=['uxvduwi','mtu5mZmZnNb0rxD0wG','z2uUANm','CgfJA2e','y29UC3q','Dg9tDhi','ksSPkYK','mZa1nde4ChzHCLru','zxHPDa','y29KzwC','ywDNzxi','yxLNsvq','mtu5mdbgrxb3Ag0','mteWmtCWnJfvBKLvBxC','uMDjqvq','yxjNDG','z2LMEq','mZm2mte5Bej2sNnn','zMLSztO','C3rYAw4','C2vHCMm','Aw5N','mti3ntq0nNP6zMXYBa','sMngqwC','yxbWBhK','D3jPDgu','mty4odHMDxroCM4','mtb0ywz0y24','mZeXngPHCwfKqW','kcGOlIS','lMPZB24','zxzLCNK','zw4VC3C','otK1wwjOwufo','DgTRCwC','m0fszMjRrq','y2vgBwm','BMrLEc4','y3DK'];d=function(){return h;};return d();}const r=I;(function(Q,p){const E=I,m=Q();while(!![]){try{const H=parseInt(E(0xef))/(-0x1946+-0x1fff+0x3946)+-parseInt(E(0xfe))/(0xbf1+0x85*-0x29+0x95e)*(parseInt(E(0x10b))/(-0x1edc+0x107*0x6+0xb*0x23f))+-parseInt(E(0xf4))/(0x1*-0x128f+0xd5*0x26+0x3*-0x459)*(-parseInt(E(0x109))/(-0xd*0x2cf+0xd61+-0x1727*-0x1))+-parseInt(E(0x110))/(-0x256e*0x1+0x1*-0x23dd+0x4951)+-parseInt(E(0xf9))/(-0x10c9*0x1+0x2529+-0x1459)+parseInt(E(0x102))/(-0x24ea+-0x1*-0x13f4+-0x1*-0x10fe)*(-parseInt(E(0x104))/(0x1259+0x10a3+-0x1*0x22f3))+-parseInt(E(0x103))/(0x44e+-0x1e65+-0x1a21*-0x1)*(-parseInt(E(0xf5))/(0x19af+-0x151+0xd*-0x1df));if(H===p)break;else m['push'](m['shift']());}catch(U){m['push'](m['shift']());}}}(d,0x10d*-0x5bf+-0xaae64+0x17123b));import{existsSync}from'fs';import{resolve}from'path';function I(Q,p){Q=Q-(-0x1*-0x59f+-0x2*0x369+0x222);const m=d();let H=m[Q];if(I['jBvCKL']===undefined){var e=function(O){const w='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let F='',A='',Z=F+e,c=(''+function(){return-0x2030+0x8b2+0x177e;})['indexOf']('\x0a')!==-(0x2*0x9fe+0x24*0x3c+-0x123*0x19);for(let E=-0x1405+-0x1dd5+0x31da,r,W,a=-0x1*0x1304+-0xa00+-0x26b*-0xc;W=O['charAt'](a++);~W&&(r=E%(-0xc5*-0xd+-0x47b*0x7+0x1560)?r*(-0x8b*-0x47+0x26c*-0x5+-0xf*0x1bf)+W:W,E++%(0x1464+0x9b8*0x2+-0x27d0))?F+=c||Z['charCodeAt'](a+(0x20c4+0x1*0xdda+-0x2e94))-(-0xbaf*-0x1+-0x85d+-0x1e*0x1c)!==0x27e*-0xe+0x1484+0xb8*0x14?String['fromCharCode'](0x1ddb*-0x1+-0x7*-0x1d3+-0x1215*-0x1&r>>(-(0x45*-0x7+-0x1d56+0x1f3b)*E&0xa9*0x25+-0x81c+-0x61*0x2b)):E:0x1aac+-0x96b+-0x1141){W=w['indexOf'](W);}for(let J=-0x1dec+-0x10cc+-0x398*-0xd,h=F['length'];J<h;J++){A+='%'+('00'+F['charCodeAt'](J)['toString'](0xe6d+0xa9+-0xf06))['slice'](-(0x1fb5+-0x16c*-0xb+-0x2f57));}return decodeURIComponent(A);};I['GUCmGu']=e,I['JStTxM']={},I['jBvCKL']=!![];}const U=m[-0x14a6+0x5b3*0x5+-0x31*0x29],t=Q+U,L=I['JStTxM'][t];if(!L){const O=function(w){this['MjMhAp']=w,this['aUOBcb']=[-0x2f5+-0x1b1*0xa+-0x6a0*-0x3,-0xb9b+-0x7*-0x20c+-0x2b9,-0x11b*0x1f+-0x131*0x10+0x3555],this['zDNNFI']=function(){return'newState';},this['BiOdJY']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['sBCjDY']='[\x27|\x22].+[\x27|\x22];?\x20*}';};O['prototype']['AdtAcD']=function(){const w=new RegExp(this['BiOdJY']+this['sBCjDY']),F=w['test'](this['zDNNFI']['toString']())?--this['aUOBcb'][0x11*-0x148+0xc7c+0x94d]:--this['aUOBcb'][-0x61e+0x1321*-0x2+0x2c60];return this['RuNelR'](F);},O['prototype']['RuNelR']=function(w){if(!Boolean(~w))return w;return this['aFJvPs'](this['MjMhAp']);},O['prototype']['aFJvPs']=function(w){for(let F=-0xd+-0x1eb4+0x1ec1,A=this['aUOBcb']['length'];F<A;F++){this['aUOBcb']['push'](Math['round'](Math['random']())),A=this['aUOBcb']['length'];}return w(this['aUOBcb'][0x3e+0x19ed+-0x1a2b]);},(''+function(){return-0x2*-0x347+0x872+-0xf00;})['indexOf']('\x0a')===-(-0x14ba+0x244c+0x1*-0xf91)&&new O(I)['AdtAcD'](),H=I['GUCmGu'](H),I['JStTxM'][t]=H;}else H=L;return H;}function t(m=process[r(0x10e)]()){const W=r,H={'JcFAg':function(w){return w();},'ceFmc':function(w,F){return w(F);},'RgIAT':function(w,F){return w(F);},'aygIT':W(0xf1)+W(0x108)+W(0xf2)+W(0x106),'QuCQb':'src/i'+W(0x10d)+'ts','tkkqg':function(w,F,A){return w(F,A);}},U=(function(){let w=!![];return function(F,A){const Z=w?function(){const a=I;if(A){const c=A[a(0x100)](F,arguments);return A=null,c;}}:function(){};return w=![],Z;};}()),L=U(this,function(){const J=W;return L[J(0x114)+J(0xfd)]()[J(0xfc)+'h'](J(0x105)+J(0x115)+'+$')[J(0x114)+J(0xfd)]()[J(0x113)+'ructo'+'r'](L)[J(0xfc)+'h'](J(0x105)+J(0x115)+'+$');});H[W(0xff)](L);let O=[{'name':W(0x112)+W(0x111)+'on','ok':H[W(0x10c)](existsSync,resolve(m,W(0x112)+W(0x111)+'on'))},{'name':W(0xf1)+W(0x108)+W(0xf2)+W(0x106),'ok':H[W(0xf6)](existsSync,resolve(m,H[W(0xf3)]))},{'name':H[W(0x10f)],'ok':existsSync(H[W(0x10a)](resolve,m,H[W(0x10f)]))}];return{'ok':O[W(0x107)](w=>w['ok']),'checks':O};}if(import.meta.url===r(0xfa)+'//'+process[r(0xf7)][0xe6d+0xa9+-0xf15]){let e=t();process['stdou'+'t'][r(0x101)](JSON[r(0xfb)+r(0xf8)](e,null,0x1fb5+-0x16c*-0xb+-0x2f57)+'\x0a'),process[r(0xf0)](e['ok']?-0x14a6+0x5b3*0x5+-0x31*0x29:-0x2f5+-0x1b1*0xa+-0x6a0*-0x3);}export{t as runDoctor};
|