@ait-co/devtools 0.1.137 → 0.1.139
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/dist/{attach-orchestrator-Cjdhir2U.js → attach-orchestrator-6kz_ZdWL.js} +5 -3
- package/dist/{attach-orchestrator-Cjdhir2U.js.map → attach-orchestrator-6kz_ZdWL.js.map} +1 -1
- package/dist/{attach-orchestrator-CE0S09YU.js → attach-orchestrator-BEiz3wAx.js} +5 -3
- package/dist/{attach-orchestrator-CMoDuG2A.js.map → attach-orchestrator-BEiz3wAx.js.map} +1 -1
- package/dist/{attach-orchestrator-CMoDuG2A.js → attach-orchestrator-BG8TGJOZ.js} +5 -3
- package/dist/{attach-orchestrator-CE0S09YU.js.map → attach-orchestrator-BG8TGJOZ.js.map} +1 -1
- package/dist/{bundle-BKqyhEK9.d.ts → bundle-C796JIwG.d.ts} +65 -2
- package/dist/bundle-C796JIwG.d.ts.map +1 -0
- package/dist/{capture-ltuV0gZa.d.ts → capture-DsP525OZ.d.ts} +1 -1
- package/dist/{capture-ltuV0gZa.d.ts.map → capture-DsP525OZ.d.ts.map} +1 -1
- package/dist/{cdp-connection-BYE9meXe.d.ts → cdp-connection-rP1WdnH5.d.ts} +1 -1
- package/dist/{cdp-connection-BYE9meXe.d.ts.map → cdp-connection-rP1WdnH5.d.ts.map} +1 -1
- package/dist/{cell-D1y4shoV.js → cell-BMlFh08P.js} +2 -2
- package/dist/cell-BMlFh08P.js.map +1 -0
- package/dist/{cell-DHA578lX.js → cell-Dtgtusog.js} +90 -16
- package/dist/cell-Dtgtusog.js.map +1 -0
- package/dist/{cell-BIdSQb9T.js → cell-KsRXFdDs.js} +122 -16
- package/dist/cell-KsRXFdDs.js.map +1 -0
- package/dist/{debug-server-CBK7dn8O.js → debug-server-6c22qSWa.js} +132 -9
- package/dist/debug-server-6c22qSWa.js.map +1 -0
- package/dist/{debug-server-BQplCzf8.js → debug-server-BQHbaKPT.js} +134 -11
- package/dist/debug-server-BQHbaKPT.js.map +1 -0
- package/dist/{debug-server-D2wpPK3_.js → debug-server-DWat7d-9.js} +82 -6
- package/dist/debug-server-DWat7d-9.js.map +1 -0
- package/dist/devtools-opener-3Drge_RJ.js +75 -0
- package/dist/devtools-opener-3Drge_RJ.js.map +1 -0
- package/dist/devtools-opener-CJpEsXXQ.js +76 -0
- package/dist/devtools-opener-CJpEsXXQ.js.map +1 -0
- package/dist/devtools-opener-CxtryS8c.js +75 -0
- package/dist/devtools-opener-CxtryS8c.js.map +1 -0
- package/dist/in-app/auto.js +59 -12
- package/dist/in-app/auto.js.map +1 -1
- package/dist/in-app/index.d.ts +21 -2
- package/dist/in-app/index.d.ts.map +1 -1
- package/dist/in-app/index.js +60 -13
- package/dist/in-app/index.js.map +1 -1
- package/dist/mcp/cli.js +299 -60
- package/dist/mcp/cli.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mock/index.d.ts +79 -1
- package/dist/mock/index.d.ts.map +1 -1
- package/dist/mock/index.js +218 -14
- package/dist/mock/index.js.map +1 -1
- package/dist/panel/index.js +171 -10
- package/dist/panel/index.js.map +1 -1
- package/dist/{pool-CmfvXnwh.d.ts → pool-CrP5CPvU.d.ts} +3 -3
- package/dist/{pool-CmfvXnwh.d.ts.map → pool-CrP5CPvU.d.ts.map} +1 -1
- package/dist/{qr-http-server-ZkT6F7is.js → qr-http-server-D1hpoyBF.js} +1 -1
- package/dist/{qr-http-server-ZkT6F7is.js.map → qr-http-server-D1hpoyBF.js.map} +1 -1
- package/dist/qr-http-server-D4rGz8M7.js +1640 -0
- package/dist/qr-http-server-D4rGz8M7.js.map +1 -0
- package/dist/{qr-http-server-C7q8Gn04.js → qr-http-server-DIjCV7h_.js} +1 -1
- package/dist/{qr-http-server-C7q8Gn04.js.map → qr-http-server-DIjCV7h_.js.map} +1 -1
- package/dist/{relay-factory-DVzpBRxz.js → relay-factory-C1X3G3WY.js} +71 -15
- package/dist/relay-factory-C1X3G3WY.js.map +1 -0
- package/dist/{relay-secret-store-CLEGyHou.js → relay-secret-store-Bmyleu0A.js} +1 -1
- package/dist/{relay-secret-store-CLEGyHou.js.map → relay-secret-store-Bmyleu0A.js.map} +1 -1
- package/dist/{relay-secret-store-DhzAnnj-.js → relay-secret-store-CQenfcSL.js} +2 -2
- package/dist/{relay-secret-store-DhzAnnj-.js.map → relay-secret-store-CQenfcSL.js.map} +1 -1
- package/dist/{relay-secret-store-BcVrWwTq.js → relay-secret-store-DKxs7zwq.js} +1 -1
- package/dist/{relay-secret-store-BcVrWwTq.js.map → relay-secret-store-DKxs7zwq.js.map} +1 -1
- package/dist/{relay-secret-store-DGduVJhs.js → relay-secret-store-WJ8EGkIl.js} +1 -1
- package/dist/{relay-secret-store-DGduVJhs.js.map → relay-secret-store-WJ8EGkIl.js.map} +1 -1
- package/dist/{relay-url-store-CKW8RQzf.js → relay-url-store-BR2XodiO.js} +2 -2
- package/dist/{relay-url-store-CKW8RQzf.js.map → relay-url-store-BR2XodiO.js.map} +1 -1
- package/dist/{relay-url-store-CdA58fgw.js → relay-url-store-CH63fVCm.js} +2 -2
- package/dist/{relay-url-store-B0X8TsGr.js.map → relay-url-store-CH63fVCm.js.map} +1 -1
- package/dist/{relay-url-store-CwKT7i04.js → relay-url-store-DaY1QPes.js} +2 -2
- package/dist/{relay-url-store-CwKT7i04.js.map → relay-url-store-DaY1QPes.js.map} +1 -1
- package/dist/{relay-url-store-B0X8TsGr.js → relay-url-store-xmUuTjXA.js} +2 -2
- package/dist/{relay-url-store-CdA58fgw.js.map → relay-url-store-xmUuTjXA.js.map} +1 -1
- package/dist/{relay-worker-6fy1eaIo.js → relay-worker-BUXI0K0b.js} +8 -4
- package/dist/{relay-worker-6fy1eaIo.js.map → relay-worker-BUXI0K0b.js.map} +1 -1
- package/dist/{relay-worker-DJnZkXza.d.ts → relay-worker-DcyboK43.d.ts} +30 -5
- package/dist/relay-worker-DcyboK43.d.ts.map +1 -0
- package/dist/{runtime-DfHHZms2.d.ts → runtime-BiigOuvb.d.ts} +30 -3
- package/dist/runtime-BiigOuvb.d.ts.map +1 -0
- package/dist/test-runner/bin.js +376 -38
- package/dist/test-runner/bin.js.map +1 -1
- package/dist/test-runner/bundle.d.ts +2 -2
- package/dist/test-runner/bundle.js +66 -13
- package/dist/test-runner/bundle.js.map +1 -1
- package/dist/test-runner/capture.d.ts +1 -1
- package/dist/test-runner/config.d.ts +58 -5
- package/dist/test-runner/config.d.ts.map +1 -1
- package/dist/test-runner/config.js +1 -1
- package/dist/test-runner/method-pace.d.ts +82 -0
- package/dist/test-runner/method-pace.d.ts.map +1 -0
- package/dist/test-runner/method-pace.js +120 -0
- package/dist/test-runner/method-pace.js.map +1 -0
- package/dist/test-runner/pool.d.ts +1 -1
- package/dist/test-runner/pool.js +1 -1
- package/dist/test-runner/relay-factory.d.ts +57 -4
- package/dist/test-runner/relay-factory.d.ts.map +1 -1
- package/dist/test-runner/relay-factory.js +70 -14
- package/dist/test-runner/relay-factory.js.map +1 -1
- package/dist/test-runner/relay-worker.d.ts +1 -1
- package/dist/test-runner/relay-worker.js +1 -1
- package/dist/test-runner/report.d.ts +3 -3
- package/dist/test-runner/rpc.d.ts +2 -2
- package/dist/test-runner/runtime.d.ts +2 -2
- package/dist/test-runner/runtime.js +83 -6
- package/dist/test-runner/runtime.js.map +1 -1
- package/dist/test-runner/task-graph.d.ts +1 -1
- package/dist/throttle-DKKzX1qC.js +59 -0
- package/dist/throttle-DKKzX1qC.js.map +1 -0
- package/dist/totp-Dwft0Kz7.js +3 -0
- package/package.json +1 -1
- package/dist/bundle-BKqyhEK9.d.ts.map +0 -1
- package/dist/cell-BIdSQb9T.js.map +0 -1
- package/dist/cell-D1y4shoV.js.map +0 -1
- package/dist/cell-DHA578lX.js.map +0 -1
- package/dist/debug-server-BQplCzf8.js.map +0 -1
- package/dist/debug-server-CBK7dn8O.js.map +0 -1
- package/dist/debug-server-D2wpPK3_.js.map +0 -1
- package/dist/relay-factory-DVzpBRxz.js.map +0 -1
- package/dist/relay-worker-DJnZkXza.d.ts.map +0 -1
- package/dist/runtime-DfHHZms2.d.ts.map +0 -1
- package/dist/totp-D1pulXLa.js +0 -3
package/dist/panel/index.js
CHANGED
|
@@ -25897,7 +25897,8 @@ const DEFAULT_STATE = {
|
|
|
25897
25897
|
frame: false,
|
|
25898
25898
|
aitNavBar: true,
|
|
25899
25899
|
aitNavBarType: "partner"
|
|
25900
|
-
}
|
|
25900
|
+
},
|
|
25901
|
+
failureModes: { sdkLine: "2.x" }
|
|
25901
25902
|
};
|
|
25902
25903
|
function generateDeviceId() {
|
|
25903
25904
|
const stored = localStorage.getItem("__ait_device_id");
|
|
@@ -26409,6 +26410,104 @@ function waitForPromptResponse(type) {
|
|
|
26409
26410
|
});
|
|
26410
26411
|
}
|
|
26411
26412
|
//#endregion
|
|
26413
|
+
//#region src/mock/native-error.ts
|
|
26414
|
+
/**
|
|
26415
|
+
* 실패-모드 다이얼 — 네이티브 에러 envelope 조립 (devtools#770).
|
|
26416
|
+
*
|
|
26417
|
+
* env1(mock)이 env3(실기기)의 프로비저닝-의존 reject 계약을 재현할 수 있게 하는
|
|
26418
|
+
* 공용 헬퍼. `aitState.failureModes`(state.ts)에 per-API 코드를 설정하면, 각
|
|
26419
|
+
* mock 도메인(auth/ads 등)이 이 모듈의 {@link buildNativeError}로 실기기 캡처와
|
|
26420
|
+
* 필드 단위로 일치하는 에러 객체를 만들어 reject/onError한다.
|
|
26421
|
+
*
|
|
26422
|
+
* 코드 인벤토리와 envelope shape의 정본은 sdk-example#284 2.x↔3.0 diff
|
|
26423
|
+
* 매트릭스(2026-07-10 iOS run10 캡처 + 이후 manual 패스)다:
|
|
26424
|
+
*
|
|
26425
|
+
* - 2.x 라인: 네이티브 브리지가 `{ name, code, userInfo, moduleName, __isError }`
|
|
26426
|
+
* envelope을 얹은 `Error` 인스턴스로 reject한다. `errorKeys` 관측이 이 5개
|
|
26427
|
+
* 필드로 고정.
|
|
26428
|
+
* - 3.x 라인: 같은 실패가 "맨 Error"(위 envelope 필드 없음)로 평탄화된다 —
|
|
26429
|
+
* sdk-example#284 "패턴 ① 오류 envelope 평탄화" 표.
|
|
26430
|
+
*
|
|
26431
|
+
* `src/test-runner/bridge-stub.ts`의 `NativeBridgeErrorShape`/`makeNativeError`가
|
|
26432
|
+
* 같은 shape을 이미 CI 러너 쪽에서 재현하고 있다(devtools#740) — 이 모듈은 그
|
|
26433
|
+
* shape을 mock 소비자 표면(`src/mock/**`)에 대해 재사용 가능한 형태로 옮긴 것이다.
|
|
26434
|
+
* 두 모듈은 레이어가 다르다: test-runner 쪽은 env3 blocking-call 인터셉터(빌드에
|
|
26435
|
+
* 안 실림, CI 전용), 이쪽은 `@ait-co/devtools` 소비자가 `pnpm dev`에서 실제로
|
|
26436
|
+
* import하는 mock 런타임이다 — 서로 import하지 않는다(devtools#740이 test-runner
|
|
26437
|
+
* 전용 모듈임을 명시).
|
|
26438
|
+
*/
|
|
26439
|
+
/** 코드별 기본 message/moduleName — 실기기 캡처 관측값. */
|
|
26440
|
+
const CODE_META = {
|
|
26441
|
+
APP_LOGIN: {
|
|
26442
|
+
message: "Login failed",
|
|
26443
|
+
moduleName: "RNTossLogin"
|
|
26444
|
+
},
|
|
26445
|
+
PLACEMENT_ID_FETCH_FAILED: {
|
|
26446
|
+
message: "Failed to fetch placement id",
|
|
26447
|
+
moduleName: "RNAdMob"
|
|
26448
|
+
},
|
|
26449
|
+
EXECUTION_ERROR: {
|
|
26450
|
+
message: "Execution error",
|
|
26451
|
+
moduleName: "RNFullScreenAd"
|
|
26452
|
+
},
|
|
26453
|
+
NO_PERMISSION: {
|
|
26454
|
+
message: "No permission",
|
|
26455
|
+
moduleName: "RNPermissions"
|
|
26456
|
+
},
|
|
26457
|
+
INVALID_REQUEST: {
|
|
26458
|
+
message: "Invalid request",
|
|
26459
|
+
moduleName: "RNPermissions"
|
|
26460
|
+
},
|
|
26461
|
+
INVALID_DATA: {
|
|
26462
|
+
message: "Invalid data",
|
|
26463
|
+
moduleName: "RNFileSystem"
|
|
26464
|
+
},
|
|
26465
|
+
FAILED_TO_GET_LOADED_AD: {
|
|
26466
|
+
message: "Failed to get loaded ad",
|
|
26467
|
+
moduleName: "RNAdMob"
|
|
26468
|
+
},
|
|
26469
|
+
APP_BRIDGE_THROTTLED: {
|
|
26470
|
+
message: "Too many app bridge calls from this method.",
|
|
26471
|
+
moduleName: "RNBridge"
|
|
26472
|
+
},
|
|
26473
|
+
"1006": {
|
|
26474
|
+
message: "광고가 로드 중이거나 준비되지 않았습니다",
|
|
26475
|
+
moduleName: "RNFullScreenAd"
|
|
26476
|
+
},
|
|
26477
|
+
"4000": {
|
|
26478
|
+
message: "Notification agreement failed",
|
|
26479
|
+
moduleName: "RNNotification"
|
|
26480
|
+
}
|
|
26481
|
+
};
|
|
26482
|
+
/**
|
|
26483
|
+
* `aitState.failureModes.sdkLine`이 가리키는 라인으로 네이티브 실패를 조립한다.
|
|
26484
|
+
*
|
|
26485
|
+
* - `'2.x'`(기본): {@link NativeErrorEnvelope} 필드가 실린 `Error` — 실기기 2.x
|
|
26486
|
+
* 캡처(`{name, code, userInfo, moduleName, __isError}`)와 필드 단위 일치.
|
|
26487
|
+
* - `'3.x'`: 같은 실패가 "맨 Error"로 평탄화된 것을 재현 — envelope 필드 없이
|
|
26488
|
+
* message만 실린 순수 `Error` 인스턴스.
|
|
26489
|
+
*
|
|
26490
|
+
* 호출부는 두 종류다:
|
|
26491
|
+
*
|
|
26492
|
+
* - **다이얼 게이트 뒤**(대부분): 프로비저닝처럼 환경에 따라 갈리는 실패는
|
|
26493
|
+
* 다이얼이 설정된 경우에만 재현한다 — 미설정 시 기존 동작 무변화
|
|
26494
|
+
* (zero behavior change). 호출 전에 다이얼 값을 명시적으로 확인한다.
|
|
26495
|
+
* - **무조건**(입력 검증): 빈 `data`나 알 수 없는 haptic type처럼 환경과 무관하게
|
|
26496
|
+
* 실기기가 **항상** 거부하는 입력은 다이얼 없이 바로 던진다. 이건 "가끔 일어나는
|
|
26497
|
+
* 실패"의 시뮬레이션이 아니라 결정적 계약이므로 opt-in 대상이 아니다.
|
|
26498
|
+
*/
|
|
26499
|
+
function buildNativeError(code) {
|
|
26500
|
+
const meta = CODE_META[code];
|
|
26501
|
+
if (aitState.state.failureModes.sdkLine === "3.x") return new Error(meta.message);
|
|
26502
|
+
const err = new Error(meta.message);
|
|
26503
|
+
err.name = "Error";
|
|
26504
|
+
err.code = code;
|
|
26505
|
+
err.userInfo = {};
|
|
26506
|
+
err.moduleName = meta.moduleName;
|
|
26507
|
+
err.__isError = true;
|
|
26508
|
+
return err;
|
|
26509
|
+
}
|
|
26510
|
+
//#endregion
|
|
26412
26511
|
//#region src/mock/permissions.ts
|
|
26413
26512
|
/**
|
|
26414
26513
|
* web-framework 3.0+ 권한 에러 기반 클래스.
|
|
@@ -26466,9 +26565,42 @@ const permissionErrorMap = {
|
|
|
26466
26565
|
setClipboardText: SetClipboardTextPermissionError
|
|
26467
26566
|
};
|
|
26468
26567
|
async function getPermission(permission) {
|
|
26568
|
+
const failureCode = permissionGateCode(permission);
|
|
26569
|
+
if (failureCode) throw buildNativeError(failureCode);
|
|
26469
26570
|
return aitState.state.permissions[permission.name];
|
|
26470
26571
|
}
|
|
26572
|
+
/**
|
|
26573
|
+
* 선언 게이트에 걸리는 이름·access 조합이면 다이얼에 등록된 native errorCode를
|
|
26574
|
+
* 돌려준다. 세 권한 API(`getPermission`/`requestPermission`/`openPermissionDialog`)가
|
|
26575
|
+
* **걸리는 조건**은 공유하지만 **떨어지는 코드**는 공유하지 않는다 — 아래 참조.
|
|
26576
|
+
*/
|
|
26577
|
+
function permissionGateCode(permission) {
|
|
26578
|
+
if (permission.access === "access") return;
|
|
26579
|
+
return aitState.state.failureModes.getPermission?.[permission.name];
|
|
26580
|
+
}
|
|
26581
|
+
/**
|
|
26582
|
+
* `openPermissionDialog`가 선언 게이트에 걸렸을 때의 코드.
|
|
26583
|
+
*
|
|
26584
|
+
* 형제 API와 갈린다 — env3 run11 실측(2.x/iOS, sdk-example#313에서 시나리오 키가
|
|
26585
|
+
* 통일되며 비교 대상에 들어온 값):
|
|
26586
|
+
*
|
|
26587
|
+
* getPermission { geolocation, read } → rejected NO_PERMISSION
|
|
26588
|
+
* requestPermission { geolocation, read } → rejected NO_PERMISSION
|
|
26589
|
+
* openPermissionDialog { geolocation, read } → rejected INVALID_REQUEST
|
|
26590
|
+
* openPermissionDialog { camera, access } → resolved
|
|
26591
|
+
*
|
|
26592
|
+
* 즉 **걸리는 조건은 셋이 같고(access 축 모델 그대로) 코드만 갈린다.** 처음엔
|
|
26593
|
+
* `requestPermission`이 `openPermissionDialog`에 위임하니 게이트도 위임하면
|
|
26594
|
+
* 된다고 보고 한 지점에만 배선했는데, 그 모델은 코드 층위에서 실측과 어긋났다
|
|
26595
|
+
* (env1 NO_PERMISSION ↔ env3 INVALID_REQUEST). 그래서 `requestPermission`은
|
|
26596
|
+
* 위임 **전에** 자기 게이트를 먼저 타고, 다이얼로그를 여는 호출만 이 코드를 쓴다.
|
|
26597
|
+
*
|
|
26598
|
+
* 관측이 geolocation/read 한 조합뿐이라 이름·access별 분기는 두지 않는다 —
|
|
26599
|
+
* 근거 없는 확장은 #783에서 이름 단위 맵을 택한 원칙에 어긋난다.
|
|
26600
|
+
*/
|
|
26601
|
+
const OPEN_DIALOG_GATE_CODE = "INVALID_REQUEST";
|
|
26471
26602
|
async function openPermissionDialog(permission) {
|
|
26603
|
+
if (permissionGateCode(permission)) throw buildNativeError(OPEN_DIALOG_GATE_CODE);
|
|
26472
26604
|
if (aitState.state.permissions[permission.name] === "allowed") return "allowed";
|
|
26473
26605
|
aitState.patch("permissions", { [permission.name]: "allowed" });
|
|
26474
26606
|
return "allowed";
|
|
@@ -26693,9 +26825,10 @@ const _setClipboardText = async (text) => {
|
|
|
26693
26825
|
checkPermission("clipboard", "setClipboardText");
|
|
26694
26826
|
if (aitState.state.deviceModes.clipboard === "mock") {
|
|
26695
26827
|
aitState.patch("mockData", { clipboardText: text });
|
|
26696
|
-
return;
|
|
26828
|
+
return { text };
|
|
26697
26829
|
}
|
|
26698
26830
|
await navigator.clipboard.writeText(text);
|
|
26831
|
+
return { text };
|
|
26699
26832
|
};
|
|
26700
26833
|
withPermission(_setClipboardText, "clipboard");
|
|
26701
26834
|
//#endregion
|
|
@@ -26789,6 +26922,7 @@ function callVibrate(pattern) {
|
|
|
26789
26922
|
return typeof navigator.vibrate === "function" ? navigator.vibrate(pattern) : false;
|
|
26790
26923
|
}
|
|
26791
26924
|
async function generateHapticFeedback(options) {
|
|
26925
|
+
if (!Object.hasOwn(HAPTIC_VIBRATE_PATTERN, options.type)) throw buildNativeError("EXECUTION_ERROR");
|
|
26792
26926
|
const timestamp = Date.now();
|
|
26793
26927
|
aitState.logAnalytics({
|
|
26794
26928
|
type: "haptic",
|
|
@@ -26821,7 +26955,11 @@ function buildLocation() {
|
|
|
26821
26955
|
};
|
|
26822
26956
|
}
|
|
26823
26957
|
async function getCurrentLocationMock() {
|
|
26824
|
-
|
|
26958
|
+
const { coords, timestamp } = buildLocation();
|
|
26959
|
+
return {
|
|
26960
|
+
coords,
|
|
26961
|
+
timestamp
|
|
26962
|
+
};
|
|
26825
26963
|
}
|
|
26826
26964
|
async function getCurrentLocationWeb() {
|
|
26827
26965
|
return new Promise((resolve) => {
|
|
@@ -26840,8 +26978,7 @@ async function getCurrentLocationWeb() {
|
|
|
26840
26978
|
altitudeAccuracy: pos.coords.altitudeAccuracy ?? 0,
|
|
26841
26979
|
heading: pos.coords.heading ?? 0
|
|
26842
26980
|
},
|
|
26843
|
-
timestamp: pos.timestamp
|
|
26844
|
-
accessLocation: "FINE"
|
|
26981
|
+
timestamp: pos.timestamp
|
|
26845
26982
|
});
|
|
26846
26983
|
}, () => {
|
|
26847
26984
|
console.warn("[@ait-co/devtools] Geolocation failed, falling back to mock");
|
|
@@ -26850,7 +26987,11 @@ async function getCurrentLocationWeb() {
|
|
|
26850
26987
|
});
|
|
26851
26988
|
}
|
|
26852
26989
|
async function getCurrentLocationPrompt() {
|
|
26853
|
-
|
|
26990
|
+
const { coords, timestamp } = await waitForPromptResponse("location");
|
|
26991
|
+
return {
|
|
26992
|
+
coords,
|
|
26993
|
+
timestamp
|
|
26994
|
+
};
|
|
26854
26995
|
}
|
|
26855
26996
|
const _getCurrentLocation = async (_options) => {
|
|
26856
26997
|
checkPermission("geolocation", "getCurrentLocation");
|
|
@@ -26968,13 +27109,16 @@ createMockProxy("Storage", {
|
|
|
26968
27109
|
},
|
|
26969
27110
|
setItem: async (key, value) => {
|
|
26970
27111
|
localStorage.setItem(`__ait_storage:${key}`, value);
|
|
27112
|
+
return null;
|
|
26971
27113
|
},
|
|
26972
27114
|
removeItem: async (key) => {
|
|
26973
27115
|
localStorage.removeItem(`__ait_storage:${key}`);
|
|
27116
|
+
return null;
|
|
26974
27117
|
},
|
|
26975
27118
|
clearItems: async () => {
|
|
26976
27119
|
const keys = Object.keys(localStorage).filter((k) => k.startsWith("__ait_storage:"));
|
|
26977
27120
|
for (const k of keys) localStorage.removeItem(k);
|
|
27121
|
+
return null;
|
|
26978
27122
|
}
|
|
26979
27123
|
});
|
|
26980
27124
|
//#endregion
|
|
@@ -27313,6 +27457,11 @@ function _nextSlotId(adGroupId) {
|
|
|
27313
27457
|
const GoogleAdMob = createMockProxy("GoogleAdMob", {
|
|
27314
27458
|
loadAppsInTossAdMob: withIsSupported(observe("GoogleAdMob.loadAppsInTossAdMob", "faithful", (args) => {
|
|
27315
27459
|
setTimeout(() => {
|
|
27460
|
+
const failureCode = aitState.state.failureModes.loadAdMob;
|
|
27461
|
+
if (failureCode) {
|
|
27462
|
+
args.onError(buildNativeError(failureCode));
|
|
27463
|
+
return;
|
|
27464
|
+
}
|
|
27316
27465
|
if (aitState.state.ads.forceNoFill) {
|
|
27317
27466
|
args.onError(/* @__PURE__ */ new Error("No fill"));
|
|
27318
27467
|
return;
|
|
@@ -27344,7 +27493,10 @@ const GoogleAdMob = createMockProxy("GoogleAdMob", {
|
|
|
27344
27493
|
}, 1500);
|
|
27345
27494
|
return () => {};
|
|
27346
27495
|
})),
|
|
27347
|
-
isAppsInTossAdMobLoaded: withIsSupported(observe("GoogleAdMob.isAppsInTossAdMobLoaded", "faithful", async (_options) =>
|
|
27496
|
+
isAppsInTossAdMobLoaded: withIsSupported(observe("GoogleAdMob.isAppsInTossAdMobLoaded", "faithful", async (_options) => {
|
|
27497
|
+
if (_options?.adGroupId !== void 0 && _options.adGroupId.trim() === "") throw buildNativeError("INVALID_REQUEST");
|
|
27498
|
+
return aitState.state.ads.isLoaded;
|
|
27499
|
+
}))
|
|
27348
27500
|
});
|
|
27349
27501
|
const TossAds = createMockProxy("TossAds", {
|
|
27350
27502
|
initialize: withIsSupported(observe("TossAds.initialize", "partial", (options) => {
|
|
@@ -27433,6 +27585,11 @@ const TossAds = createMockProxy("TossAds", {
|
|
|
27433
27585
|
});
|
|
27434
27586
|
const loadFullScreenAd = withIsSupported(observe("loadFullScreenAd", "faithful", (args) => {
|
|
27435
27587
|
setTimeout(() => {
|
|
27588
|
+
const failureCode = aitState.state.failureModes.loadFullScreenAd;
|
|
27589
|
+
if (failureCode) {
|
|
27590
|
+
args.onError(buildNativeError(failureCode));
|
|
27591
|
+
return;
|
|
27592
|
+
}
|
|
27436
27593
|
if (aitState.state.ads.forceNoFill) {
|
|
27437
27594
|
args.onError(/* @__PURE__ */ new Error("No fill"));
|
|
27438
27595
|
return;
|
|
@@ -27764,12 +27921,15 @@ const IAP = createMockProxy("IAP", {
|
|
|
27764
27921
|
})) };
|
|
27765
27922
|
},
|
|
27766
27923
|
async getPendingOrders() {
|
|
27767
|
-
|
|
27924
|
+
const orders = [...aitState.state.iap.pendingOrders];
|
|
27925
|
+
return {
|
|
27926
|
+
orders,
|
|
27927
|
+
orderIds: orders.map((o) => o.orderId)
|
|
27928
|
+
};
|
|
27768
27929
|
},
|
|
27769
27930
|
async getCompletedOrRefundedOrders() {
|
|
27770
27931
|
return {
|
|
27771
27932
|
hasNext: false,
|
|
27772
|
-
nextKey: null,
|
|
27773
27933
|
orders: [...aitState.state.iap.completedOrders]
|
|
27774
27934
|
};
|
|
27775
27935
|
},
|
|
@@ -27792,6 +27952,7 @@ const IAP = createMockProxy("IAP", {
|
|
|
27792
27952
|
return true;
|
|
27793
27953
|
},
|
|
27794
27954
|
async getSubscriptionInfo(_args) {
|
|
27955
|
+
if (aitState.state.failureModes.softResolve?.getSubscriptionInfo) return {};
|
|
27795
27956
|
return { subscription: {
|
|
27796
27957
|
catalogId: 1,
|
|
27797
27958
|
status: "ACTIVE",
|
|
@@ -30146,7 +30307,7 @@ function Panel() {
|
|
|
30146
30307
|
color: "#666",
|
|
30147
30308
|
fontWeight: 400
|
|
30148
30309
|
},
|
|
30149
|
-
children: ["v", "0.1.
|
|
30310
|
+
children: ["v", "0.1.139"]
|
|
30150
30311
|
}),
|
|
30151
30312
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
30152
30313
|
type: "button",
|