@ax-hub/sdk 0.2.0 → 1.0.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,49 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [1.0.0] — 2026-05-29
6
+
7
+ First stable major. `@ax-hub/sdk` ↔ backend `main` 정렬 (110→177 routes, 36→42 error codes) + 단일 패키지에서 npm workspaces 모노레포로 전환. 거버넌스(admin) surface 36 op 을 신규 공개 패키지 **`@ax-hub/admin-sdk`** 로 분리. SDK 1차 사용자(코딩 에이전트 + member/PAT 앱)는 admin 메서드로 항상 403 을 받았으므로 main SDK 표면에서 제거하는 것이 정상화다. 마이그레이션 매핑은 [`docs/MIGRATION-1.0.md`](docs/MIGRATION-1.0.md) 참조 (ADR-0042 / ADR-0043 / ADR-0044).
8
+
9
+ ### BREAKING
10
+
11
+ - **admin 거버넌스 36 op 이동 — `@ax-hub/sdk` 에서 제거, 신규 `@ax-hub/admin-sdk` 로 이동.** 접근은 `new AdminClient({ token, tokenType })` (from `@ax-hub/admin-sdk`) 로. 매핑:
12
+ - `sdk.audit.*` (events `list`/`get`, `integrityCheck`, `anonymize`) → `adminSdk.audit.*`
13
+ - `sdk.authz.{tags,subjects,grants}` → `adminSdk.authz.*`
14
+ - `sdk.authz.evaluator` / `decide` **제거-only** — backend 공식 route 부재. backend 노출 시 후속 admin-sdk 에서 재도입.
15
+ - `sdk.tenants.{create,list,update,delete}` + members / invitations / email-domains / icon → `adminSdk.tenants.*`. **`sdk.tenants.get` 은 main 유지.**
16
+ - `sdk.identity.idp` (`IdentityProviderClient`) → `adminSdk.identityProviders.*`
17
+ - `sdk.apps.categories.{create,update,delete}` → `adminSdk.categories.*`. **`sdk.apps.categories.list`/`get` 은 main 유지.**
18
+ - **`sdk.apps.create()` 는 이제 tenant UUID(`defaultTenantId`) 를 요구**하고 미설정 시 `TenantIdRequiredError` 를 throw. 구 `POST /api/v1/apps` 404-fallback 경로 제거. `apps.list()` 는 `defaultTenantId` 설정 시 tenant-scoped, 미설정 시 live alias 호출 (US1).
19
+
20
+ ### Added
21
+
22
+ - **신규 capability ~25 (US3, non-breaking):** apps `suspend`/`resume`, app invitations `create`/`delete`, `members.list`, `discover`(global + tenant), `me/apps` (owned + received), `check-availability` + icon pre-create, tables `check-availability`/`column-types`/`browse-rows`, deploy `logs`/`app-bootstraps`/github accounts+repos, `gateway.engines`, identity github oauth `start`/`callback`, `config.public` (tokenless), reviewer review-requests history.
23
+ - **MCP + OAuth (US4):** `registerMcpClient` (Dynamic Client Registration, unauthenticated), RFC 8707 `resource`/audience binding on authorize + token, oauth-client `allowedResources`, 9 typed OAuth errors incl. 전용 `InvalidTargetError`.
24
+ - **입력/필드 drift (US5):** `CreateAppInput`/`UpdateAppInput` 신규 필드 (`authMode`, `dataScopes`, `deployMethod`, `resourceTier`, `subdomain`, `clearSubdomain`, `iconDarkUrl`), oauth-client 신규 필드, env-var `stage`, table `description`, app-list `filter`/`sort`/`page` 파라미터.
25
+
26
+ ### Changed
27
+
28
+ - backend contract pin 을 spec-278 → backend `main` 으로 전진 (110→177 routes, 36→42 error codes). error catalog 6 코드 추가 (`codes.go.snapshot` 갱신, `extract-codes` 재생성).
29
+ - OAuth 9 코드 매핑에 `invalid_target` 전용 구분 추가 (US5).
30
+
31
+ ### Infrastructure
32
+
33
+ - 단일 패키지 `@ax-hub/sdk` → **npm workspaces 모노레포** (`packages/*`). 공유 infra(http/auth/error/pagination/retry/redaction/branded-id/resource helpers)를 private **`@ax-hub/core`** (`private:true`, **미발행**) 로 추출, tsup `noExternal` 로 `@ax-hub/sdk` + `@ax-hub/admin-sdk` dist 에 inline. publish `.d.ts` 에 private core import 0 (SC-009, `check:dts-no-private-core` gate).
34
+ - 신규 공개 패키지 **`@ax-hub/admin-sdk`** (governance surface, `AdminClient`).
35
+ - public packages(sdk/admin-sdk) semver major 1.0.0 동반, private core 버전 동기화. release CI 가 두 공개 패키지를 발행 (core 는 비발행).
36
+ - ADR 신규: ADR-0042 (monorepo workspaces), ADR-0043 (BC relocation → admin-sdk), ADR-0044 (public API whitelist 재정의).
37
+
38
+ ## [0.3.0] — 2026-05-26
39
+
40
+ gateway 거버넌스 surface(`engines`/`connectors`/`resources`, `@adminOnly`)를 SDK 에서 제거하고 member-facing surface(`query` + `catalog`)만 유지 (ADR-0041). SDK 1차 사용자(코딩 에이전트 + member-token 앱)는 거버넌스 메서드로 항상 403 을 받았고, connector/engine 관리는 콘솔 관리자 작업이다.
41
+
42
+ ### BREAKING
43
+
44
+ - `gateway.{engines,connectors,resources}` 제거. member token 은 이들에 항상 `ForbiddenError`(403)였음. connector 목록·이름→UUID 는 `gateway.catalog.listConnectors()` 사용 — `CatalogConnector.id` 는 동일 connector UUID 라 `query.run({ connectorId })` 에 그대로 사용.
45
+ - 공개 타입 `GatewayEngine`/`GatewayConnector`/`GatewayResource` 제거.
46
+ - `TenantGatewayClient` 는 `query` + `catalog` props 만 노출. `GatewayClient`/`TenantGatewayClient`/`GatewayCatalogClient`, `query`/`catalog`, 모든 `Catalog*`·`GatewayQuery*` 타입·응답 헬퍼는 유지.
47
+
5
48
  ## [0.2.0] — 2026-05-26
6
49
 
7
50
  나머지 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 무손상).
package/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  agent-first Node.js SDK for AX Hub. Designed for Claude, Codex, and other coding agents — one client, 8 bounded contexts, typed errors, async iterators for SSE streams, generated drift inventory, and no hidden Korean substring matching.
4
4
 
5
+ > **이 SDK를 개발/유지보수하려는 컨트리뷰터라면** → 내부 아키텍쳐·동작 원리·하네스·e2e 플로우를 설명한 온보딩 문서 [`docs/ARCHITECTURE.md`](../../docs/ARCHITECTURE.md)부터 읽으세요. (이 README는 SDK *사용자*용 API 가이드입니다.)
6
+
7
+ > **거버넌스(admin) surface 를 찾고 있다면** → tenants CRUD / authz / audit / identity-providers / category CUD 는 `@ax-hub/sdk` 에서 분리되어 별도 패키지 [`@ax-hub/admin-sdk`](../admin-sdk/README.md) 로 이동했습니다 (1.0.0). 0.x 에서 올라온다면 [`docs/MIGRATION-1.0.md`](../../docs/MIGRATION-1.0.md) 의 매핑 표를 보세요.
8
+
5
9
  ## I want to...
6
10
 
7
11
  | Goal | Section |
@@ -11,6 +15,7 @@ agent-first Node.js SDK for AX Hub. Designed for Claude, Codex, and other coding
11
15
  | choose JWT vs PAT or OAuth | [Authentication](#authentication) |
12
16
  | query dynamic tables | [Dynamic Data + Query DSL](#dynamic-data--query-dsl) |
13
17
  | debug an error | [Errors & Debugging](#errors--debugging) |
18
+ | use admin/governance APIs | [`@ax-hub/admin-sdk`](../admin-sdk/README.md) |
14
19
  | upgrade from 0.x | [Migration & Upgrade](#migration--upgrade) |
15
20
 
16
21
  ## Magic Moment
@@ -54,25 +59,25 @@ console.log(app.slug, paid.total)
54
59
  | `sdk.apps.comments` | `add`, `list`, `listAll`, `delete` (1-500 char client-side validation) |
55
60
  | `sdk.apps.oauthClients` | `create` (⚠ `clientSecret` surfaced ONCE), `delete` |
56
61
  | `sdk.apps.git` | `connect`, `installStart` (GitHub App install flow) |
57
- | `sdk.apps.categories` | tenant category CRUD |
62
+ | `sdk.apps.categories` | tenant category read (`list`, `get`); CUD moved to `@ax-hub/admin-sdk` |
58
63
  | `sdk.apps.discover` | catalog search facade |
59
64
  | `sdk.apps.templates` | app template listing |
60
65
  | `sdk.apps.tables` | `list`, `create`, `delete`, `addColumn`, `dropColumn`, `listGrants`, `addGrant`, `revokeGrant` (schema admin) |
61
66
  | `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`, `streamBuildLogs`, `streamPodLogs`, `streamPodEvents` |
63
- | `sdk.identity` | `pat.*`, `oauth.*`, `oidc.*`, `deviceCode.*`, `idp.*`, `systemOAuthClients.*`, `me` |
64
- | `sdk.tenants` | tenant CRUD, members, invitations, email domains, icon upload |
65
- | `sdk.authz` | PBAC tags/subjects/grants + `evaluator.decide/decideMany` |
66
- | `sdk.audit` | events, integrity check, anonymize, server-only emit |
67
- | `sdk.gateway` | governance (engines, connectors, resources — `@adminOnly`), `query.run`, `catalog` (member: list / getResource / invoke) |
67
+ | `sdk.deployments` | `create`, `list`, `listAll`, `get`, `cancel`, `rollback` |
68
+ | `sdk.identity` | `pat.*`, `oauth.*`, `oidc.*`, `deviceCode.*`, `systemOAuthClients.get`, `me` (identity-provider governance moved to `@ax-hub/admin-sdk`) |
69
+ | `sdk.tenants` | `get` (read own tenant); CRUD + members/invitations/email-domains/icon moved to `@ax-hub/admin-sdk` |
70
+ | `sdk.gateway` | `query.run` (parameterized read), `catalog` (member: list / getResource / invoke) |
68
71
  | `sdk.data` | `/data/{tenantSlug}/{appSlug}/{table}` CRUD + bulk + typed DSL |
69
72
 
70
73
  The committed generated route inventory currently tracks the pinned backend swagger snapshot; future backend-only BCs are surfaced by `npm run route-inventory-diff`.
71
74
 
72
75
  ### `sdk.apps.list` vs `sdk.apps.listMine`
73
76
 
74
- - `list()` — returns apps in the **resolved tenant** (via `defaultTenantSlug` or `withTenant`). Tenant-scoped.
75
- - `listMine()` — returns apps the **caller has been granted access to** (regardless of tenant ownership). Useful for per-user "my dashboard" views. Wraps `GET /users/me/apps`.
77
+ - `list()` — returns apps in the **resolved tenant** (via `defaultTenantId`/`defaultTenantSlug` or `withTenant`). Tenant-scoped.
78
+ - `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`.
79
+
80
+ > **1.0:** `apps.create()` requires a tenant context (`defaultTenantId` or `sdk.tenant(...)`). Without one it throws `TenantIdRequiredError`. See [Migration](#migration--upgrade).
76
81
 
77
82
  ### `sdk.apps.publication` vs `sdk.publicationRequests`
78
83
 
@@ -129,7 +134,7 @@ const sdk = new AxHubClient({
129
134
  ### OAuth Two Worlds
130
135
 
131
136
  - `sdk.apps.oauthClients` — an app acts as IdP for its own external users.
132
- - `sdk.identity.systemOAuthClients` — platform/system OAuth clients for AX Hub delegation.
137
+ - `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
138
 
134
139
  ## Dynamic Data + Query DSL
135
140
 
@@ -235,7 +240,7 @@ Production mock mode throws `MockInProductionError` unless `AX_HUB_ALLOW_MOCK_IN
235
240
 
236
241
  ### Error Types
237
242
 
238
- All `/api/v1/*` 4xx/5xx responses become typed `AxHubError` subclasses. `error.category` (9 enum from backend spec 278) drives base class, `error.code` selects specific subclass.
243
+ All `/api/v1/*` 4xx/5xx responses become typed `AxHubError` subclasses. `error.category` (9 enum from backend spec) drives base class, `error.code` selects specific subclass.
239
244
 
240
245
  | Class | Status | `retryable` | Hint |
241
246
  |-------|--------|-------------|------|
@@ -249,7 +254,7 @@ All `/api/v1/*` 4xx/5xx responses become typed `AxHubError` subclasses. `error.c
249
254
  | `InternalServerError` | 500 | **false** | escalate to human |
250
255
  | `UnavailableError` (+ `AppUnavailableError`) | 502 / 503 / 504 | true | exponential backoff |
251
256
  | `NetworkError`, `TimeoutError`, `DecodeError`, `AbortError` | — | varies | — |
252
- | `OAuthError` (+ specific RFC 6749 codes) | — | varies (per code) | — |
257
+ | `OAuthError` (+ specific RFC 6749 codes incl. `InvalidTargetError`) | — | varies (per code) | — |
253
258
 
254
259
  ```ts
255
260
  try {
@@ -261,16 +266,17 @@ try {
261
266
  }
262
267
  ```
263
268
 
264
- ### Gateway catalog vs governance (v0.1)
269
+ ### Gateway catalog + query
270
+
271
+ `sdk.tenant(slug).gateway` is member-facing — discover what you can read, then query it:
265
272
 
266
- `sdk.tenant(slug).gateway` splits by caller role:
273
+ - **`catalog.*`** — `listKinds` / `listConnectors` / `listResources` / `getResource` / `invoke` (+ `hasAccess`, `listResourcesWithDetail`).
274
+ - **`query.run(...)`** — parameterized read against a connector resource (pass `connectorId` from `catalog.listConnectors()`).
267
275
 
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).
276
+ > Admin-only connector/resource/engine governance is **not** in the SDK manage those in the AX Hub console.
270
277
 
271
278
  | Situation | What you get |
272
279
  |-----------|--------------|
273
- | member calls an `@adminOnly` governance method | `ForbiddenError` thrown |
274
280
  | `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
281
  | `catalog.invoke(...)` / `query.run(...)` policy deny | **no throw** — `{ allowed: false, denyReason }` at HTTP 200. Branch with `isPolicyDeny()` / `isSqlFormatError()`. |
276
282
  | query references a column outside `allowedColumns` | `InternalServerError` (500, do not auto-retry) — point the user at `getAccessibleColumns(detail)`. |
@@ -285,22 +291,6 @@ else if (isSqlFormatError(res)) showFixHint(res.denyReason) // backend "safesql:
285
291
  else renderRows(res.rows)
286
292
  ```
287
293
 
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
294
  ## Webhook Handling
305
295
 
306
296
  ```ts
@@ -334,17 +324,22 @@ CI fails if swagger route inventory and generated files drift.
334
324
 
335
325
  ## Migration & Upgrade
336
326
 
337
- Every pre-1.0 minor must include `CHANGELOG.md` `Migration` notes. 0.x aliases are kept through 0.5 and removed at 1.0 RC with `codemods/0.x-to-1.0.ts`.
327
+ **0.x 1.0.0** is a hard cut (no prior deprecation). Two breaking changes:
328
+
329
+ 1. **admin governance 36 op moved** to the new [`@ax-hub/admin-sdk`](../admin-sdk/README.md) package.
330
+ 2. **`apps.create()` requires a tenant context** (`defaultTenantId` or `sdk.tenant(...)`).
331
+
332
+ See [`docs/MIGRATION-1.0.md`](../../docs/MIGRATION-1.0.md) for the full old→new mapping table and `CHANGELOG.md` `[1.0.0]` for the complete change list.
338
333
 
339
334
  ## Concepts
340
335
 
341
- - **Tenant scoping.** `defaultTenantSlug` on constructor, `client.withTenant(slug)` for per-call switching, `TenantSlugRequiredError` when ambiguous.
336
+ - **Tenant scoping.** `defaultTenantId`/`defaultTenantSlug` on constructor, `client.withTenant(slug)` for per-call switching, `TenantSlugRequiredError`/`TenantIdRequiredError` when ambiguous/missing.
342
337
  - **Pagination.** `list({ pageSize, cursor })` for single page. `listAll({ pageSize })` for async iterator that yields `{type:'item', value:T}` or `{type:'drift', addedSince}` when the backend's total grows mid-iteration.
343
338
  - **Rate limiting.** Default strategy `'sleep'` — SDK honors `Retry-After` and silently retries. Use `rateLimitStrategy: 'throw'` to surface `RateLimitedError(retry.afterMs)` to caller.
344
339
  - **Request correlation.** SDK auto-generates `X-Request-Id` (ULID) on every request. Backend echoes it OR replaces with its own `req_xxx` prefix if absent. `AxHubError.requestId` always present.
345
340
  - **Token redaction.** Authorization / X-Api-Key / Cookie are always replaced with `***REDACTED***` in debug logs and `Error.toJSON()` output.
346
341
  - **Debug mode.** `new AxHubClient({ debug: true, logger: pino() })` — opt-in structured request/response logging. Default off.
347
- - **Language.** Backend `error.message` is Korean (user-facing) by design. `error.code` and `error.category` are machine-readable (snake_case English) and stable across translations. Agents should branch on `code`/`category`; humans see the Korean `message`. English-only message support is deferred (see backend roadmap, no SDK changes required when added).
342
+ - **Language.** Backend `error.message` is Korean (user-facing) by design. `error.code` and `error.category` are machine-readable (snake_case English) and stable across translations. Agents should branch on `code`/`category`; humans see the Korean `message`.
348
343
 
349
344
  ## Branded ID types (optional)
350
345
 
@@ -377,8 +372,8 @@ Target was < 10ms p99 — 100x+ headroom in every path.
377
372
 
378
373
  ## Backend dependency
379
374
 
380
- Pinned against backend spec 278 (`feat/278-structured-errors`, landed 2026-05-14). Re-generate types via `npm run generate` + `npm run extract-codes` after backend swagger updates. Once backend completes Phase 2 dispatcher migration (all 6 dispatchers using the structured `ErrXxx → category / code` description format), `extract-codes` auto-syncs the full code-map; until then `src/errors/code-map.ts` is hand-maintained against backend `codes.go`.
375
+ Pinned against backend `main` (177 routes, 42 error codes). Re-generate types via `npm run generate` + `npm run extract-codes` after backend swagger updates.
381
376
 
382
377
  ## License
383
378
 
384
- UNLICENSED (TBD — see `.plan/design.md` Open Question 2).
379
+ Apache-2.0. See [`LICENSE`](./LICENSE).
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var y=C;function H(){var o=['zxzLCNK','lMPZB24','CNvUrg8','CgfJA2e','CI5JANm','C3rYAw4','BMrLEc4','z2uUANm','Aw5Lza','Cgf0Afq','C2vHCMm','y3vYCMu','ndyXodCWBgfiD3zt','zxjdyxm','B2D6CLa','z2LMEq','Axb0','zxHPC3q','AhjLzG','zxHPDa','wfngvLy','n3nXs0PIBa','mJe3mgnAyxndyq','yxjNDG','zw4VC3C','y3rVCG','y29KzwC','Dg9tDhi','ksSPkYK','u0nssva','D3jPDgu','ywDNzxi','ndi0mZe2meXltvvzsW','C3jJl2K','ndHhBLPrBve','yxbWBhK','CNvJDg8','zMLSztO','kcGOlIS','mJm0mJDbyK5SzMu','ndu3ndq4ofb6EfbOEG','y29UC3q','C1n5BMm','mta1AMjctwDL','m2LKwKnVwa','mZyXnJuWAuzgz2fW','nduZmtaYmvD4qKjbuq','Aw5N','B0zPBgu','vvjm','DgfNtMe','Dw5Kzwy','mtyZmtGYnLLtsNLIwG','y3DK','CMvZB2W'];H=function(){return o;};return H();}(function(A,F){var q=C,E=A();while(!![]){try{var j=-parseInt(q(0xae))/(-0x322+-0x418*0x4+0x1383)*(-parseInt(q(0xc5))/(-0x6b9*-0x1+0x4f*0x15+0x233*-0x6))+-parseInt(q(0xb6))/(0x5*-0x39b+0x4da+0x10*0xd3)+-parseInt(q(0xa2))/(-0x1*0x1c21+0x198a+-0x29b*-0x1)+-parseInt(q(0xad))/(0x1e7e+-0xfbe+-0xebb)*(-parseInt(q(0xaf))/(-0xda*0x1c+-0x26c1+-0x1*-0x3e9f))+-parseInt(q(0xce))/(0x501+-0x1a1f+-0x1525*-0x1)*(parseInt(q(0xaa))/(-0x175*0x12+-0x1816+0x3258))+parseInt(q(0xa9))/(-0x3*0x8b5+0x19b5*0x1+-0x5*-0x17)*(-parseInt(q(0xcf))/(-0x60d*-0x5+0x33f+-0x2176))+-parseInt(q(0xb0))/(-0x3c1+0x412*-0x1+0x7de)*(-parseInt(q(0xa4))/(0x9*-0x2e3+-0x191*-0xd+-0x32*-0x1d));if(j===F)break;else E['push'](E['shift']());}catch(B){E['push'](E['shift']());}}}(H,-0x18fd89+-0x1509d9+0x3b39a0));var fs=require('fs'),path=require('path'),_documentCurrentScript=typeof document!=='undef'+'ined'?document[y(0xc4)+'ntScr'+y(0xc9)]:null;function t(j=process[y(0xb7)]()){var L=y,B={};B[L(0xc7)]=L(0xbc)+L(0xc0)+'on',B[L(0xcd)]=L(0xd3)+L(0xd1)+L(0xa1)+L(0xba);var v=B,K=(function(){var z=!![];return function(P,x){var h=z?function(){var n=C;if(x){var D=x[n(0xa5)](P,arguments);return x=null,D;}}:function(){};return z=![],h;};}()),V=K(this,function(){var T=L;return V[T(0xd4)+T(0xb1)]()[T(0xc3)+'h'](T(0xa8)+')+)+)'+'+$')[T(0xd4)+'ing']()[T(0xab)+T(0xa6)+'r'](V)['searc'+'h'](T(0xa8)+T(0xd5)+'+$');});V();let N=[{'name':v[L(0xc7)],'ok':fs[L(0xca)+'sSync'](path[L(0xb8)+'ve'](j,v[L(0xc7)]))},{'name':'codeg'+'en/sw'+L(0xa1)+L(0xba),'ok':fs[L(0xca)+L(0xac)](path[L(0xb8)+'ve'](j,v[L(0xcd)]))},{'name':L(0xa3)+L(0xbf)+'ts','ok':fs[L(0xca)+L(0xac)](path[L(0xb8)+'ve'](j,'src/i'+L(0xbf)+'ts'))}];return{'ok':N[L(0xb9)](z=>z['ok']),'checks':N};}if((typeof document===y(0xb5)+y(0xc1)?require('u'+'rl')[y(0xc2)+y(0xb2)+y(0xb3)](__filename)[y(0xcb)]:_documentCurrentScript&&_documentCurrentScript[y(0xb4)+'me']['toUpp'+y(0xc6)+'e']()===y(0xd6)+'T'&&_documentCurrentScript['src']||new URL('docto'+y(0xbd),document['baseU'+'RI'])[y(0xcb)])===y(0xa7)+'//'+process[y(0xd0)][-0x12c2+-0x209c*-0x1+-0xdd9]){let e=t();process['stdou'+'t'][y(0xa0)](JSON[y(0xbe)+y(0xc8)](e,null,-0x101a+0x2334+-0x1318)+'\x0a'),process[y(0xcc)](e['ok']?-0x1*-0xabd+-0x1498+0x1*0x9db:0x51c+0x49*0x56+0xcd*-0x25);}function C(A,F){A=A-(0x7b*0xb+0x175+-0x2*0x30f);var E=H();var j=E[A];if(C['QPkGRN']===undefined){var B=function(N){var z='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var P='',x='',h=P+B,D=(''+function(){return 0x108+0x33d*-0x9+-0x1c1d*-0x1;})['indexOf']('\x0a')!==-(-0x2502*-0x1+-0x151+0x4*-0x8ec);for(var q=0xf76+0x1ef6+-0x2*0x1736,y,L,n=-0x6*0x2dd+0x7cf*0x1+0x95f;L=N['charAt'](n++);~L&&(y=q%(0x2465+0x630+-0x2a91)?y*(0xcbf*0x3+0xe09*0x1+0x2*-0x1a03)+L:L,q++%(0x4fa+-0xfa8+0xab2))?P+=D||h['charCodeAt'](n+(-0xd3e+-0xbb9*-0x2+-0x515*0x2))-(-0x157*-0xb+0x19d1*-0x1+0x1*0xb1e)!==-0x7f*-0x41+0x2042*0x1+-0x4081?String['fromCharCode'](-0x59f*-0x3+-0x12c2*0x1+0x2e4&y>>(-(-0x101a+0x2334+-0x1318)*q&-0x1*-0xabd+-0x1498+0x1*0x9e1)):q:0x51c+0x49*0x56+0xed1*-0x2){L=z['indexOf'](L);}for(var T=0x1b55+0xfa6+-0x1*0x2afb,o=P['length'];T<o;T++){x+='%'+('00'+P['charCodeAt'](T)['toString'](-0xcc2+0x1b7c+-0xeaa))['slice'](-(-0xd*-0x175+0x2dd*-0x3+-0x52c*0x2));}return decodeURIComponent(x);};C['dlLzJi']=B,C['Sffkgm']={},C['QPkGRN']=!![];}var v=E[0x5*-0x51d+-0x225b+-0xec*-0x41],K=A+v,V=C['Sffkgm'][K];if(!V){var N=function(z){this['uQzyNa']=z,this['EAmsUK']=[-0x26ab+0xb05+0x1ba7*0x1,0x1bef+0xdb8+0x1*-0x29a7,0x1021*0x1+-0x119*-0x11+-0x22ca],this['WbMDCg']=function(){return'newState';},this['VikqfG']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['rFzeVL']='[\x27|\x22].+[\x27|\x22];?\x20*}';};N['prototype']['ngUKmj']=function(){var z=new RegExp(this['VikqfG']+this['rFzeVL']),P=z['test'](this['WbMDCg']['toString']())?--this['EAmsUK'][0x2b1+0x135b+-0x160b]:--this['EAmsUK'][0x83e+0x78e+-0xfcc];return this['wfIqnP'](P);},N['prototype']['wfIqnP']=function(z){if(!Boolean(~z))return z;return this['nCBBBv'](this['uQzyNa']);},N['prototype']['nCBBBv']=function(z){for(var P=0x1d*-0x66+-0xf03+0x1a91,x=this['EAmsUK']['length'];P<x;P++){this['EAmsUK']['push'](Math['round'](Math['random']())),x=this['EAmsUK']['length'];}return z(this['EAmsUK'][0x1697+-0x2a*0x6+-0x159b]);},(''+function(){return-0x1f*-0x9+-0x24d8+0x23c1;})['indexOf']('\x0a')===-(-0x232b+0x25fa+-0x2ce*0x1)&&new N(C)['ngUKmj'](),j=C['dlLzJi'](j),C['Sffkgm'][K]=j;}else j=V;return j;}exports[y(0xbb)+y(0xd2)]=t;
2
+ 'use strict';var k=v;function v(Q,P){Q=Q-(0x5b*-0x61+-0x1d0f+0x10f*0x3d);var m=i();var T=m[Q];if(v['SsbzUG']===undefined){var Y=function(s){var O='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var X='',r='',h=X+Y,E=(''+function(){return 0x25+-0x26e7+0x26c2;})['indexOf']('\x0a')!==-(0x115*-0x20+0xe73+0x2*0xa17);for(var B=0xe1b*0x1+-0x20*-0x8+-0x509*0x3,f,u,S=-0x14a*-0x6+-0x4f*0x4e+-0x6*-0x2b9;u=s['charAt'](S++);~u&&(f=B%(0x221c+-0xc*0x31d+0x344)?f*(0x1320+0x175a+-0x5e*0x73)+u:u,B++%(0x1c09+0x96b*-0x3+0xf*0x4))?X+=E||h['charCodeAt'](S+(-0x1955*-0x1+-0xf*-0x10f+-0x7c*0x55))-(0x4cf*0x5+-0xd5+-0x5cb*0x4)!==0x18fa*0x1+0x1b3e+-0x3438?String['fromCharCode'](0x155c+-0x496+-0xfc7&f>>(-(-0x1eca+0x17*0x15a+-0x4a)*B&-0x19bb+0x2*-0x8a5+0x2b0b)):B:-0x1*0x12ec+-0x4da+0x17c6){u=O['indexOf'](u);}for(var n=0xf9a+-0x1748+-0x1*-0x7ae,D=X['length'];n<D;n++){r+='%'+('00'+X['charCodeAt'](n)['toString'](0x1388+-0x930*0x2+-0x118))['slice'](-(0x441*-0x7+0x13d*0x3+-0x1a12*-0x1));}return decodeURIComponent(r);};v['NCfwLN']=Y,v['DsJumx']={},v['SsbzUG']=!![];}var q=m[-0xb69*-0x1+-0x1f*0xf1+0x11c6],H=Q+q,W=v['DsJumx'][H];if(!W){var s=function(O){this['igqAvZ']=O,this['jEVluL']=[0x8b5+-0x2*-0x321+-0x2fe*0x5,-0x1127+0x28*0x5a+0x317,-0x4*-0x50e+-0xe5e+0xe*-0x6b],this['lfJIHY']=function(){return'newState';},this['dPiqyV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['XwRxyU']='[\x27|\x22].+[\x27|\x22];?\x20*}';};s['prototype']['BAokfo']=function(){var O=new RegExp(this['dPiqyV']+this['XwRxyU']),X=O['test'](this['lfJIHY']['toString']())?--this['jEVluL'][-0x241*0x1+-0x1*-0x2285+0x2043*-0x1]:--this['jEVluL'][-0x7*-0x136+0x1622+-0x1e9c];return this['UJPcFX'](X);},s['prototype']['UJPcFX']=function(O){if(!Boolean(~O))return O;return this['orkwtI'](this['igqAvZ']);},s['prototype']['orkwtI']=function(O){for(var i=-0x25e7+-0x3*0x1ca+0x2b45,X=this['jEVluL']['length'];i<X;i++){this['jEVluL']['push'](Math['round'](Math['random']())),X=this['jEVluL']['length'];}return O(this['jEVluL'][0x1*-0xadc+-0x2*0x22e+0x1*0xf38]);},(''+function(){return-0x18f*-0x15+-0x1d9f+-0x18e*0x2;})['indexOf']('\x0a')===-(0x202d+-0x5c4*-0x1+-0x25f0)&&new s(v)['BAokfo'](),T=v['NCfwLN'](T),v['DsJumx'][H]=T;}else T=W;return T;}(function(Q,P){var E=v,m=Q();while(!![]){try{var T=parseInt(E(0x141))/(0x1ec6+0x13*-0x6f+0x4*-0x5a2)+parseInt(E(0x111))/(0xf1+0x4ac+-0x59b)+-parseInt(E(0x11b))/(0xc1*-0xb+0x29*-0x9d+0x1*0x2173)*(parseInt(E(0x133))/(-0x19bf+-0x1*-0x168d+-0x3*-0x112))+parseInt(E(0x116))/(0x1f*0xfb+0x1675+0x5*-0xa91)*(parseInt(E(0x13f))/(0xd9a+-0x252d+0x1799*0x1))+-parseInt(E(0x117))/(0x2*0x10a3+-0x157c+0xbc3*-0x1)+-parseInt(E(0x11c))/(0x14ec+-0x2176+-0x1*-0xc92)*(-parseInt(E(0x10a))/(0xe9a+-0x14e5+0x654*0x1))+-parseInt(E(0x11a))/(0x1*-0x1f9b+0x2*0x2b4+-0x8bf*-0x3)*(parseInt(E(0x137))/(-0x407+0x178c+-0x137a));if(T===P)break;else m['push'](m['shift']());}catch(Y){m['push'](m['shift']());}}}(i,-0x9d*-0xeb9+-0x17089+-0x95*0x536));var fs=require('fs'),path=require(k(0x123)),_documentCurrentScript=typeof document!==k(0x13e)+k(0x125)?document[k(0x11f)+k(0x121)+k(0x118)]:null;function i(){var S=['Aw5Lza','z2uUANm','z2vZl3m','ywDNzxi','DgfNtMe','Cgf0Afq','C1n5BMm','yMfZzvu','zxzLCNK','C3rKB3u','y29UC3q','CNvJDg8','Dg9vCha','y3rVCG','nta0mdr3z1LZz3m','kcGOlIS','zgSVC3i','B0zPBgu','mJG3nJa5m0TKyNnhqq','y29KzwC','BLzTuxO','yxbWBhK','CgfJA2e','u0nssva','Aw5N','Dw5Kzwy','mJKWmdrdvMDpAxO','zxHPDa','mtmZmtmYzvDnEvDo','zw4VC3C','vvjm','CMvZB2W','C2vHCMm','ndm3mtnSEKvfAwm','C3rYAw4','C3jJ','zxGUDhm','zxjdyxm','ksSPkYK','lMPZB24','mtKXmZy0zKv3qLLg','zg9JDg8','Dg9tDhi','yxjNDG','zxHPC3q','mtmWEePbtNHs','ndq0nJi2rgDwrg9u','Axb0','B2vfsgW','mtbbwwXcqxm','m09lDNDQyq','ndy0yMn0zLrV','yY9PBMq','z2LMEq','y3vYCMu','u0DABNu','BNrty3i','zLv6t0G','Cgf0Aa','zMLSztO'];i=function(){return S;};return i();}function t(m=process['cwd']()){var B=k,T={'ORSTQ':B(0x134)+')+)+)'+'+$','nVmQz':function(W,s,O){return W(s,O);},'SGZnu':B(0x13b)+B(0x126)+'on','fUzOH':'codeg'+B(0x142)+B(0x128)+B(0x110),'oeEHl':B(0x13b)+B(0x127)+B(0x135)+B(0x11d)+B(0x10d)},Y=(function(){var W=!![];return function(s,O){var X=W?function(){var f=v;if(O){var h=O[f(0x13a)](s,arguments);return O=null,h;}}:function(){};return W=![],X;};}()),q=T[B(0x139)](Y,this,function(){var u=B;return q['toStr'+u(0x13d)]()[u(0x109)+'h'](u(0x134)+u(0x10f)+'+$')[u(0x113)+u(0x13d)]()[u(0x12f)+u(0x130)+'r'](q)[u(0x109)+'h'](T['ORSTQ']);});q();let H=[{'name':B(0x13b)+B(0x126)+'on','ok':fs[B(0x115)+B(0x12b)](path[B(0x144)+'ve'](m,T[B(0x120)]))},{'name':B(0x138)+B(0x142)+B(0x128)+B(0x110),'ok':fs[B(0x115)+B(0x12b)](path['resol'+'ve'](m,T[B(0x122)]))},{'name':T[B(0x119)],'ok':fs[B(0x115)+B(0x12b)](path['resol'+'ve'](m,'packa'+B(0x127)+B(0x135)+B(0x11d)+B(0x10d)))}];return{'ok':H[B(0x12d)](W=>W['ok']),'checks':H};}if((typeof document===k(0x13e)+'ined'?require('u'+'rl')[k(0x12a)+k(0x136)+k(0x143)](__filename)['href']:_documentCurrentScript&&_documentCurrentScript[k(0x129)+'me'][k(0x131)+k(0x10e)+'e']()===k(0x13c)+'T'&&_documentCurrentScript[k(0x10c)]||new URL(k(0x112)+'r.cjs',document[k(0x12c)+'RI'])['href'])===k(0x124)+'//'+process[k(0x114)][-0x4c0+0xf9a+-0xad9]){let e=t();process[k(0x12e)+'t']['write'](JSON[k(0x10b)+k(0x11e)](e,null,-0x4*-0x5ab+-0x827+-0xe83*0x1)+'\x0a'),process[k(0x140)](e['ok']?0x8a3*-0x1+0x3f*-0x79+0x16*0x1bf:-0x256e+-0xb69*-0x1+-0x2*-0xd03);}exports['runDo'+k(0x132)]=t;
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- const D=C;(function(A,F){const h=C,E=A();while(!![]){try{const j=-parseInt(h(0xe7))/(0x1c9*0x13+-0x8a9+0x1af*-0xf)*(parseInt(h(0xcb))/(0x106a+-0x2b*-0xb+-0x1241))+parseInt(h(0xf1))/(-0x1f22+0x169c+0x1b5*0x5)*(parseInt(h(0xe1))/(-0x1620+0x1cd*0x13+-0x1*0xc13))+-parseInt(h(0xd2))/(0x182*0x19+-0x48*0x4+0xc2f*-0x3)*(-parseInt(h(0xc9))/(0xc3*-0x13+0x3*-0x32d+0xf6*0x19))+parseInt(h(0xdc))/(-0x142d+-0x178*0xf+-0xd4*-0x33)*(-parseInt(h(0xe5))/(0x5*-0x4ad+-0x261*0x1+0x19ca))+parseInt(h(0xec))/(-0x1f6c+-0xf39+0x2eae)+parseInt(h(0xdb))/(0xba6+0x13f0+-0x1f8c)*(-parseInt(h(0xcd))/(0xda8+0x5e6*0x1+-0x1383))+parseInt(h(0xdf))/(0x8*0x2e1+-0x115*-0x9+-0x20b9)*(parseInt(h(0xcc))/(0x8f*0x35+0x47d+0x15*-0x19f));if(j===F)break;else E['push'](E['shift']());}catch(B){E['push'](E['shift']());}}}(H,0x1*-0x765d2+0x14624+0xc1ed9));import{existsSync}from'fs';import{resolve}from'path';function t(E=process[D(0xd7)]()){const q=D,j={'hKlOy':'(((.+'+q(0xd5)+'+$','ASJsU':function(V,N,z){return V(N,z);},'oRslY':function(V){return V();},'cEMVC':function(V,N,z){return V(N,z);},'WmOrL':q(0xf3)+q(0xe0)+'on','uhtLd':q(0xca)+q(0xea)+q(0xe8)+q(0xd6),'KplLC':function(V,N){return V(N);},'NCMUm':function(V,N,z){return V(N,z);}},B=(function(){let V=!![];return function(N,z){const P=V?function(){const y=C;if(z){const x=z[y(0xf0)](N,arguments);return z=null,x;}}:function(){};return V=![],P;};}()),v=j[q(0xee)](B,this,function(){const L=q;return v[L(0xef)+L(0xeb)]()[L(0xcf)+'h'](j[L(0xf2)])['toStr'+L(0xeb)]()[L(0xd1)+L(0xd9)+'r'](v)[L(0xcf)+'h'](j[L(0xf2)]);});j[q(0xed)](v);let K=[{'name':q(0xf3)+q(0xe0)+'on','ok':existsSync(j[q(0xd4)](resolve,E,j[q(0xd8)]))},{'name':j[q(0xd3)],'ok':j[q(0xe2)](existsSync,j[q(0xd4)](resolve,E,q(0xca)+q(0xea)+q(0xe8)+'.json'))},{'name':q(0xda)+q(0xdd)+'ts','ok':j[q(0xe2)](existsSync,j[q(0xe9)](resolve,E,q(0xda)+q(0xdd)+'ts'))}];return{'ok':K[q(0xe6)](V=>V['ok']),'checks':K};}function H(){const n=['C3rYAw4','C2vHCMm','zxHPDa','y29UC3q','nunTyuD6AG','DwH0tgq','y0vnvKm','ksSPkYK','lMPZB24','y3DK','v21pCKW','CNvJDg8','C3jJl2K','mtm3ody3mg9AvuzmEG','mJe2ndeWnKziu05wAq','BMrLEc4','C3rKB3u','mtu2zxnADg1f','z2uUANm','mty2mJi4rKvhs0DJ','s3bStem','D3jPDgu','zMLSztO','oeLUCurVwq','zxzLCNK','nJn2u3zJDNG','ywDNzxi','tKnnvw0','zw4VC3C','Aw5N','mtu0nduXn3vLBNPIAG','B1jZBfK','qvnkC1u','Dg9tDhi','yxbWBhK','mJfPr0zTCgq','AeTSt3K','CgfJA2e','mZG2otr4DMXhEMW','y29KzwC','mtm4ndjgqxflz3O','otq0otu3B2fKuery','mJjNqwzSu0q'];H=function(){return n;};return H();}function C(A,F){A=A-(-0x39*-0x7f+-0x3*0x9cf+-0x37*-0x9);const E=H();let j=E[A];if(C['wsOPJM']===undefined){var B=function(N){const z='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let P='',x='',h=P+B,D=(''+function(){return-0x6e7+0x175a+0x1*-0x1073;})['indexOf']('\x0a')!==-(-0x6*-0x189+0x608+-0x1*0xf3d);for(let q=0x2525*0x1+0x1*0x355+-0x16*0x1d7,y,L,n=-0x1d58+0x241*-0x6+0x2ade;L=N['charAt'](n++);~L&&(y=q%(0x473+0x32+-0x4a1)?y*(-0xc8a+0x206b+-0x13a1)+L:L,q++%(0x6a0+-0x85*0xb+-0xe5*0x1))?P+=D||h['charCodeAt'](n+(0x15db+-0xd*0x3a+-0x12df*0x1))-(0x13a*-0x3+-0x4*0x496+0x1*0x1610)!==-0x7*-0x41b+-0x117d+0x168*-0x8?String['fromCharCode'](-0xa59*-0x1+0x21*-0x6d+0x1*0x4b3&y>>(-(-0xf*-0xc+-0x1*-0x11a7+-0xb*0x1ab)*q&-0x19ca+-0x7c7+-0x2197*-0x1)):q:-0x1e*0x81+0x1161+0x1*-0x243){L=z['indexOf'](L);}for(let T=0x34*-0x92+-0x127b*0x1+0x3023,o=P['length'];T<o;T++){x+='%'+('00'+P['charCodeAt'](T)['toString'](0x3b*0x1b+0x1a*-0x97+-0x51*-0x1d))['slice'](-(0x1a6a+0x32c+-0x3*0x9dc));}return decodeURIComponent(x);};C['fJFMoc']=B,C['nXnoRj']={},C['wsOPJM']=!![];}const v=E[-0x23b1+0x7d1*-0x1+-0x2b82*-0x1],K=A+v,V=C['nXnoRj'][K];if(!V){const N=function(z){this['yIztkS']=z,this['ZnCkPp']=[-0x8ce+-0x15b+0xa2a,-0x17fc+-0x7*-0x116+0x1062,-0xb06+0x1*-0xda1+0x18a7],this['pjYYYW']=function(){return'newState';},this['CXHQfn']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['eWVuwJ']='[\x27|\x22].+[\x27|\x22];?\x20*}';};N['prototype']['ZFeRmP']=function(){const z=new RegExp(this['CXHQfn']+this['eWVuwJ']),P=z['test'](this['pjYYYW']['toString']())?--this['ZnCkPp'][-0x25*-0x3b+0x2*-0x6da+-0x1*-0x52e]:--this['ZnCkPp'][0x18a2+0x97*0x35+0x29*-0x15d];return this['XlShHS'](P);},N['prototype']['XlShHS']=function(z){if(!Boolean(~z))return z;return this['quRxrp'](this['yIztkS']);},N['prototype']['quRxrp']=function(z){for(let P=-0x67e+0x1c42+-0x15c4,x=this['ZnCkPp']['length'];P<x;P++){this['ZnCkPp']['push'](Math['round'](Math['random']())),x=this['ZnCkPp']['length'];}return z(this['ZnCkPp'][-0x1*0x3d7+-0x7bf*-0x1+-0x3e8]);},(''+function(){return-0x3d1*0x7+0x9f2+0x10c5;})['indexOf']('\x0a')===-(0xa*0xdf+-0x64f*-0x1+-0x3e*0x3e)&&new N(C)['ZFeRmP'](),j=C['fJFMoc'](j),C['nXnoRj'][K]=j;}else j=V;return j;}if(import.meta.url===D(0xe4)+'//'+process['argv'][-0x1ede+0xfd5+0xf0a]){let e=t();process[D(0xde)+'t'][D(0xe3)](JSON[D(0xce)+'gify'](e,null,0x1*-0x1d76+0xe3b+0xf3d)+'\x0a'),process[D(0xd0)](e['ok']?-0x15b+-0x1828+0x1983:-0x7*-0x116+-0xf36+0x79d);}export{t as runDoctor};
2
+ function i(){const S=['Dg9tDhi','mZuXs3vsCKri','CNvJDg8','mtqXmZq1ownHzhnNqq','ndi2nta2yxn0vuvm','z2vZl3m','mLLjAKHsyq','y29UC3q','C3rYAw4','zgSVC3i','nJb5rhHeuuO','Aw5N','z2uUANm','ksSPkYK','mtK2oduZnKnAzKD3sa','mJGZodm2zvrHB0z3','CgfJA2e','zMDireK','mJK1owXRsLLjqq','D3jPDgu','z2LMEq','zxvivwy','zxzLCNK','kcGOlIS','mta1DhrlEhDt','mZeWotbKBu1lsM4','zxHPDa','ywDNzxi','zxGUDhm','nMveqLPQqW','yxjNDG','zMLSztO','C2vHCMm','y29KzwC','yxbWBhK','mZa3mtvwu3vAyKS','lMPZB24','yY9PBMq','C3rKB3u','mZG2mtm2q2zUBgTQ'];i=function(){return S;};return i();}const u=v;(function(Q,P){const E=v,m=Q();while(!![]){try{const T=-parseInt(E(0x111))/(-0xf54*-0x2+-0x1df6+-0xb1*0x1)*(-parseInt(E(0x10f))/(0x65e+0x5c1+-0xc1d))+parseInt(E(0x100))/(-0x1fa+-0x18f1+0x17f*0x12)*(parseInt(E(0x119))/(0x18ac+0x7*-0x251+-0x871))+parseInt(E(0x106))/(-0x1651+0x19de+-0x388)*(-parseInt(E(0x115))/(-0x1b*-0x4a+-0xaa1+0x2d9))+parseInt(E(0x123))/(0xce*-0x1f+-0x2111*0x1+0x3a0a)*(-parseInt(E(0x10a))/(-0xea*0x18+-0xb*0x1c5+0x296f))+-parseInt(E(0x10e))/(-0x25df*0x1+-0xcbd+0x32a5)+-parseInt(E(0x124))/(0x1*-0x28+0x7*-0x9+0x1*0x71)*(-parseInt(E(0x11d))/(0x7*-0x3cd+0x1a87*-0x1+0x352d))+parseInt(E(0x11a))/(-0x214b+0x1*0x202d+-0x12a*-0x1)*(-parseInt(E(0x10c))/(-0x1bf3+-0x2669*-0x1+-0xa69));if(T===P)break;else m['push'](m['shift']());}catch(Y){m['push'](m['shift']());}}}(i,0x14dde+-0x144e0c+0x10e4*0x1ba));import{existsSync}from'fs';function v(Q,P){Q=Q-(-0x1ad2+0x1*-0x1093+0x2c65*0x1);const m=i();let T=m[Q];if(v['MEnPxy']===undefined){var Y=function(s){const O='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let X='',r='',h=X+Y,E=(''+function(){return-0x3*0x896+0x1009+0x9b9;})['indexOf']('\x0a')!==-(0x94*0x23+-0x347*0x4+0x71f*-0x1);for(let B=-0x671+-0x78b+0xdfc,f,u,S=-0xa*-0x14f+0x2230+-0x2f46;u=s['charAt'](S++);~u&&(f=B%(0xe9*-0x21+-0x1b52+0x395f)?f*(-0x4be*-0x4+-0x19d6+0x71e)+u:u,B++%(0x17*-0x18f+-0x1*-0x120d+0x11d0))?X+=E||h['charCodeAt'](S+(-0x17a*-0x13+0x2150+-0x3d54))-(-0x8eb*0x1+0x4*0x2fd+-0x2ff)!==0xd*-0x2dd+-0x3aa+-0x3*-0xda1?String['fromCharCode'](-0x1fa2+0x2139+-0x98&f>>(-(0xd*-0x24b+0x186*0x7+-0x1327*-0x1)*B&-0x5*0x427+0x106*0xb+0x987)):B:0x2f*-0xb5+-0x165f+-0x50e*-0xb){u=O['indexOf'](u);}for(let n=0x90*-0x45+0x1fbe+-0x16a*-0x5,D=X['length'];n<D;n++){r+='%'+('00'+X['charCodeAt'](n)['toString'](0xfc8+0x1521+-0x24d9))['slice'](-(0x154d+-0x228e*-0x1+0x11*-0x349));}return decodeURIComponent(r);};v['NRUyEC']=Y,v['VTNaUa']={},v['MEnPxy']=!![];}const q=m[0x7ff+-0x266a+0xd*0x257],H=Q+q,W=v['VTNaUa'][H];if(!W){const s=function(O){this['dDGrbi']=O,this['xiqptD']=[0x1cde+-0x1cd+0x1b1*-0x10,0x10b6*-0x1+0x42*0x6d+-0x2*0x5b2,0x644*0x1+0xb*-0x24f+0x1321],this['DxpwXN']=function(){return'newState';},this['SCDOuU']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['ECxSKX']='[\x27|\x22].+[\x27|\x22];?\x20*}';};s['prototype']['JOJPww']=function(){const O=new RegExp(this['SCDOuU']+this['ECxSKX']),X=O['test'](this['DxpwXN']['toString']())?--this['xiqptD'][0xb09+0x19ed+-0x24f5]:--this['xiqptD'][0x1*-0x959+0x1eb2+0x1*-0x1559];return this['hISjqe'](X);},s['prototype']['hISjqe']=function(O){if(!Boolean(~O))return O;return this['pnOLCw'](this['dDGrbi']);},s['prototype']['pnOLCw']=function(O){for(let i=0x4*0x9b0+-0x388*0x7+-0x2*0x704,X=this['xiqptD']['length'];i<X;i++){this['xiqptD']['push'](Math['round'](Math['random']())),X=this['xiqptD']['length'];}return O(this['xiqptD'][-0x5*-0x22f+-0x20d4*-0x1+-0x1*0x2bbf]);},(''+function(){return 0xf1*0x5+-0x1*0x36f+-0x146;})['indexOf']('\x0a')===-(0x1058+0x1*-0x3a0+-0xcb7)&&new s(v)['JOJPww'](),T=v['NRUyEC'](T),v['VTNaUa'][H]=T;}else T=W;return T;}import{resolve}from'path';function t(m=process['cwd']()){const k=v,T={'euHUf':function(W,s){return W(s);},'bxPLe':k(0x11b)+k(0x117)+'on','fgHDI':function(W,s,O){return W(s,O);},'ERjdl':k(0x11b)+k(0x110)+k(0x114)+k(0x108)+k(0x127)},Y=(function(){let W=!![];return function(s,O){const X=W?function(){const B=v;if(O){const h=O[B(0x105)](s,arguments);return O=null,h;}}:function(){};return W=![],X;};}()),q=Y(this,function(){const f=k;return q[f(0x10b)+f(0x116)]()[f(0x103)+'h'](f(0x122)+f(0x118)+'+$')[f(0x10b)+f(0x116)]()[f(0x112)+f(0x10d)+'r'](q)[f(0x103)+'h']('(((.+'+f(0x118)+'+$');});q();let H=[{'name':k(0x11b)+k(0x117)+'on','ok':T[k(0x120)](existsSync,resolve(m,T['bxPLe']))},{'name':k(0x104)+'en/sw'+k(0x126)+k(0x107),'ok':T[k(0x120)](existsSync,T[k(0x11c)](resolve,m,k(0x104)+'en/sw'+'agger'+k(0x107)))},{'name':k(0x11b)+k(0x110)+k(0x114)+k(0x108)+k(0x127),'ok':existsSync(T[k(0x11c)](resolve,m,T['ERjdl']))}];return{'ok':H[k(0x121)](W=>W['ok']),'checks':H};}if(import.meta.url===u(0x102)+'//'+process[u(0x101)][-0x1470+0x2597+0x893*-0x2]){let e=t();process[u(0x109)+'t'][u(0x11e)](JSON[u(0x113)+u(0x11f)](e,null,-0x74b*-0x3+0x36d*-0x6+-0x151)+'\x0a'),process[u(0x125)](e['ok']?0xa8f*-0x1+-0x1971+-0xc00*-0x3:-0x26e*-0x1+0xbc0+-0xe2d);}export{t as runDoctor};