@ait-co/devtools 0.1.137 → 0.1.138

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.
Files changed (119) hide show
  1. package/dist/{attach-orchestrator-Cjdhir2U.js → attach-orchestrator-6kz_ZdWL.js} +5 -3
  2. package/dist/{attach-orchestrator-Cjdhir2U.js.map → attach-orchestrator-6kz_ZdWL.js.map} +1 -1
  3. package/dist/{attach-orchestrator-CE0S09YU.js → attach-orchestrator-BEiz3wAx.js} +5 -3
  4. package/dist/{attach-orchestrator-CMoDuG2A.js.map → attach-orchestrator-BEiz3wAx.js.map} +1 -1
  5. package/dist/{attach-orchestrator-CMoDuG2A.js → attach-orchestrator-BG8TGJOZ.js} +5 -3
  6. package/dist/{attach-orchestrator-CE0S09YU.js.map → attach-orchestrator-BG8TGJOZ.js.map} +1 -1
  7. package/dist/{bundle-BKqyhEK9.d.ts → bundle-C796JIwG.d.ts} +65 -2
  8. package/dist/bundle-C796JIwG.d.ts.map +1 -0
  9. package/dist/{capture-ltuV0gZa.d.ts → capture-DsP525OZ.d.ts} +1 -1
  10. package/dist/{capture-ltuV0gZa.d.ts.map → capture-DsP525OZ.d.ts.map} +1 -1
  11. package/dist/{cdp-connection-BYE9meXe.d.ts → cdp-connection-rP1WdnH5.d.ts} +1 -1
  12. package/dist/{cdp-connection-BYE9meXe.d.ts.map → cdp-connection-rP1WdnH5.d.ts.map} +1 -1
  13. package/dist/{cell-D1y4shoV.js → cell-BMlFh08P.js} +2 -2
  14. package/dist/cell-BMlFh08P.js.map +1 -0
  15. package/dist/{cell-DHA578lX.js → cell-Dtgtusog.js} +90 -16
  16. package/dist/cell-Dtgtusog.js.map +1 -0
  17. package/dist/{cell-BIdSQb9T.js → cell-KsRXFdDs.js} +122 -16
  18. package/dist/cell-KsRXFdDs.js.map +1 -0
  19. package/dist/{debug-server-CBK7dn8O.js → debug-server-6c22qSWa.js} +132 -9
  20. package/dist/debug-server-6c22qSWa.js.map +1 -0
  21. package/dist/{debug-server-BQplCzf8.js → debug-server-BQHbaKPT.js} +134 -11
  22. package/dist/debug-server-BQHbaKPT.js.map +1 -0
  23. package/dist/{debug-server-D2wpPK3_.js → debug-server-DWat7d-9.js} +82 -6
  24. package/dist/debug-server-DWat7d-9.js.map +1 -0
  25. package/dist/devtools-opener-3Drge_RJ.js +75 -0
  26. package/dist/devtools-opener-3Drge_RJ.js.map +1 -0
  27. package/dist/devtools-opener-CJpEsXXQ.js +76 -0
  28. package/dist/devtools-opener-CJpEsXXQ.js.map +1 -0
  29. package/dist/devtools-opener-CxtryS8c.js +75 -0
  30. package/dist/devtools-opener-CxtryS8c.js.map +1 -0
  31. package/dist/in-app/auto.js +59 -12
  32. package/dist/in-app/auto.js.map +1 -1
  33. package/dist/in-app/index.d.ts +21 -2
  34. package/dist/in-app/index.d.ts.map +1 -1
  35. package/dist/in-app/index.js +60 -13
  36. package/dist/in-app/index.js.map +1 -1
  37. package/dist/mcp/cli.js +299 -60
  38. package/dist/mcp/cli.js.map +1 -1
  39. package/dist/mcp/server.js +1 -1
  40. package/dist/mock/index.d.ts +64 -1
  41. package/dist/mock/index.d.ts.map +1 -1
  42. package/dist/mock/index.js +221 -14
  43. package/dist/mock/index.js.map +1 -1
  44. package/dist/panel/index.js +178 -23
  45. package/dist/panel/index.js.map +1 -1
  46. package/dist/{pool-CmfvXnwh.d.ts → pool-CrP5CPvU.d.ts} +3 -3
  47. package/dist/{pool-CmfvXnwh.d.ts.map → pool-CrP5CPvU.d.ts.map} +1 -1
  48. package/dist/{qr-http-server-ZkT6F7is.js → qr-http-server-D1hpoyBF.js} +1 -1
  49. package/dist/{qr-http-server-ZkT6F7is.js.map → qr-http-server-D1hpoyBF.js.map} +1 -1
  50. package/dist/qr-http-server-D4rGz8M7.js +1640 -0
  51. package/dist/qr-http-server-D4rGz8M7.js.map +1 -0
  52. package/dist/{qr-http-server-C7q8Gn04.js → qr-http-server-DIjCV7h_.js} +1 -1
  53. package/dist/{qr-http-server-C7q8Gn04.js.map → qr-http-server-DIjCV7h_.js.map} +1 -1
  54. package/dist/{relay-factory-DVzpBRxz.js → relay-factory-C1X3G3WY.js} +71 -15
  55. package/dist/relay-factory-C1X3G3WY.js.map +1 -0
  56. package/dist/{relay-secret-store-CLEGyHou.js → relay-secret-store-Bmyleu0A.js} +1 -1
  57. package/dist/{relay-secret-store-CLEGyHou.js.map → relay-secret-store-Bmyleu0A.js.map} +1 -1
  58. package/dist/{relay-secret-store-DhzAnnj-.js → relay-secret-store-CQenfcSL.js} +2 -2
  59. package/dist/{relay-secret-store-DhzAnnj-.js.map → relay-secret-store-CQenfcSL.js.map} +1 -1
  60. package/dist/{relay-secret-store-BcVrWwTq.js → relay-secret-store-DKxs7zwq.js} +1 -1
  61. package/dist/{relay-secret-store-BcVrWwTq.js.map → relay-secret-store-DKxs7zwq.js.map} +1 -1
  62. package/dist/{relay-secret-store-DGduVJhs.js → relay-secret-store-WJ8EGkIl.js} +1 -1
  63. package/dist/{relay-secret-store-DGduVJhs.js.map → relay-secret-store-WJ8EGkIl.js.map} +1 -1
  64. package/dist/{relay-url-store-CKW8RQzf.js → relay-url-store-BR2XodiO.js} +2 -2
  65. package/dist/{relay-url-store-CKW8RQzf.js.map → relay-url-store-BR2XodiO.js.map} +1 -1
  66. package/dist/{relay-url-store-CdA58fgw.js → relay-url-store-CH63fVCm.js} +2 -2
  67. package/dist/{relay-url-store-B0X8TsGr.js.map → relay-url-store-CH63fVCm.js.map} +1 -1
  68. package/dist/{relay-url-store-CwKT7i04.js → relay-url-store-DaY1QPes.js} +2 -2
  69. package/dist/{relay-url-store-CwKT7i04.js.map → relay-url-store-DaY1QPes.js.map} +1 -1
  70. package/dist/{relay-url-store-B0X8TsGr.js → relay-url-store-xmUuTjXA.js} +2 -2
  71. package/dist/{relay-url-store-CdA58fgw.js.map → relay-url-store-xmUuTjXA.js.map} +1 -1
  72. package/dist/{relay-worker-6fy1eaIo.js → relay-worker-BUXI0K0b.js} +8 -4
  73. package/dist/{relay-worker-6fy1eaIo.js.map → relay-worker-BUXI0K0b.js.map} +1 -1
  74. package/dist/{relay-worker-DJnZkXza.d.ts → relay-worker-DcyboK43.d.ts} +30 -5
  75. package/dist/relay-worker-DcyboK43.d.ts.map +1 -0
  76. package/dist/{runtime-DfHHZms2.d.ts → runtime-BiigOuvb.d.ts} +30 -3
  77. package/dist/runtime-BiigOuvb.d.ts.map +1 -0
  78. package/dist/test-runner/bin.js +376 -38
  79. package/dist/test-runner/bin.js.map +1 -1
  80. package/dist/test-runner/bundle.d.ts +2 -2
  81. package/dist/test-runner/bundle.js +66 -13
  82. package/dist/test-runner/bundle.js.map +1 -1
  83. package/dist/test-runner/capture.d.ts +1 -1
  84. package/dist/test-runner/config.d.ts +58 -5
  85. package/dist/test-runner/config.d.ts.map +1 -1
  86. package/dist/test-runner/config.js +1 -1
  87. package/dist/test-runner/method-pace.d.ts +82 -0
  88. package/dist/test-runner/method-pace.d.ts.map +1 -0
  89. package/dist/test-runner/method-pace.js +120 -0
  90. package/dist/test-runner/method-pace.js.map +1 -0
  91. package/dist/test-runner/pool.d.ts +1 -1
  92. package/dist/test-runner/pool.js +1 -1
  93. package/dist/test-runner/relay-factory.d.ts +57 -4
  94. package/dist/test-runner/relay-factory.d.ts.map +1 -1
  95. package/dist/test-runner/relay-factory.js +70 -14
  96. package/dist/test-runner/relay-factory.js.map +1 -1
  97. package/dist/test-runner/relay-worker.d.ts +1 -1
  98. package/dist/test-runner/relay-worker.js +1 -1
  99. package/dist/test-runner/report.d.ts +3 -3
  100. package/dist/test-runner/rpc.d.ts +2 -2
  101. package/dist/test-runner/runtime.d.ts +2 -2
  102. package/dist/test-runner/runtime.js +83 -6
  103. package/dist/test-runner/runtime.js.map +1 -1
  104. package/dist/test-runner/task-graph.d.ts +1 -1
  105. package/dist/throttle-DKKzX1qC.js +59 -0
  106. package/dist/throttle-DKKzX1qC.js.map +1 -0
  107. package/dist/totp-Dwft0Kz7.js +3 -0
  108. package/package.json +1 -1
  109. package/dist/bundle-BKqyhEK9.d.ts.map +0 -1
  110. package/dist/cell-BIdSQb9T.js.map +0 -1
  111. package/dist/cell-D1y4shoV.js.map +0 -1
  112. package/dist/cell-DHA578lX.js.map +0 -1
  113. package/dist/debug-server-BQplCzf8.js.map +0 -1
  114. package/dist/debug-server-CBK7dn8O.js.map +0 -1
  115. package/dist/debug-server-D2wpPK3_.js.map +0 -1
  116. package/dist/relay-factory-DVzpBRxz.js.map +0 -1
  117. package/dist/relay-worker-DJnZkXza.d.ts.map +0 -1
  118. package/dist/runtime-DfHHZms2.d.ts.map +0 -1
  119. package/dist/totp-D1pulXLa.js +0 -3
@@ -1022,7 +1022,7 @@ function createDevServer(deps = {}) {
1022
1022
  const aitSource = deps.aitSource ?? new HttpAitSource({ stateEndpoint });
1023
1023
  const server = new Server({
1024
1024
  name: "ait-devtools",
1025
- version: "0.1.137"
1025
+ version: "0.1.138"
1026
1026
  }, { capabilities: { tools: {} } });
1027
1027
  server.setRequestHandler(ListToolsRequestSchema, () => ({ tools: DEV_TOOL_DEFINITIONS.map((tool) => ({ ...tool })) }));
1028
1028
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
@@ -396,6 +396,12 @@ declare const openPDFViewer: ((params: OpenPDFViewerParams) => Promise<OpenPDFVi
396
396
  /**
397
397
  * Storage mock
398
398
  * localStorage에 `__ait_storage:` prefix로 저장하여 앱 자체 localStorage와 분리
399
+ *
400
+ * 실기기(2.x×iOS) capture는 `setItem`/`removeItem`/`clearItems` 세 메서드가
401
+ * `undefined`가 아니라 `null`로 resolve됨을 보였다(devtools#770). 원본 SDK 타입
402
+ * 선언은 여전히 `Promise<void>`이므로 시그니처는 그대로 두고, 런타임 반환값만
403
+ * `null`로 캐스트해 실측과 동치시킨다 — Analytics·setClipboardText와 같은 처리(#775).
404
+ * `getItem`은 이미 `string | null`이라 실측과 일치하므로 손대지 않는다.
399
405
  */
400
406
  declare const Storage: {
401
407
  getItem: (key: string) => Promise<string | null>;
@@ -624,7 +630,20 @@ declare const SafeAreaInsets: {
624
630
  onEvent
625
631
  }: SafeAreaInsetsSubscribeHandler) => (() => void);
626
632
  };
627
- /** @deprecated */
633
+ /**
634
+ * @deprecated `SafeAreaInsets.get()`을 쓸 것.
635
+ *
636
+ * 상류 SDK의 타입 선언은 `getSafeAreaInsets(): number`지만, 실기기(2.x×iOS)
637
+ * capture는 이 함수가 숫자가 아니라 `SafeAreaInsets.get()`과 같은 객체
638
+ * (`{ top, right, bottom, left }`)를 반환함을 보였다(devtools#770 —
639
+ * `returnType: "object"`, `valueKeys: ["top","right","bottom","left"]`).
640
+ * 즉 선언과 런타임이 어긋나 있는 상류 타입 버그다.
641
+ *
642
+ * mock은 타입 선언이 아니라 **런타임 실측**을 재현해야 개발자가 env1에서 겪는
643
+ * 동작이 실기기와 같아진다. 그래서 시그니처는 상류와 동일하게 `number`로 두되
644
+ * (`__typecheck.ts`가 SDK 타입에 대해 계속 컴파일되도록) 반환값만 실측 객체로
645
+ * 캐스트한다 — Analytics·setClipboardText·Storage와 같은 처리(#775).
646
+ */
628
647
  declare function getSafeAreaInsets(): number;
629
648
  //#endregion
630
649
  //#region src/mock/notification.d.ts
@@ -754,6 +773,13 @@ interface AitSdkCall {
754
773
  fidelity: AitSdkCallFidelity;
755
774
  }
756
775
  //#endregion
776
+ //#region src/mock/native-error.d.ts
777
+ /**
778
+ * sdk-example#284 매트릭스에 등재된 2.x 네이티브 실패 코드 인벤토리.
779
+ * 새 코드가 매트릭스에 추가되면 여기에도 추가한다.
780
+ */
781
+ type NativeErrorCode = 'APP_LOGIN' | 'PLACEMENT_ID_FETCH_FAILED' | 'EXECUTION_ERROR' | 'NO_PERMISSION' | 'INVALID_REQUEST' | 'INVALID_DATA' | 'FAILED_TO_GET_LOADED_AD' | 'APP_BRIDGE_THROTTLED' | '1006' | '4000';
782
+ //#endregion
757
783
  //#region src/mock/state.d.ts
758
784
  type Listener = () => void;
759
785
  interface AitDevtoolsState {
@@ -833,6 +859,43 @@ interface AitDevtoolsState {
833
859
  mockData: MockData;
834
860
  panelEditable: boolean;
835
861
  viewport: ViewportState;
862
+ failureModes: FailureModes;
863
+ }
864
+ /**
865
+ * per-API 실패 코드 다이얼. 값이 설정된 API만 mock이 reject하고, 나머지는
866
+ * 기존 낙관적 resolve를 유지한다. `sdkLine`은 envelope shape 분기 축 —
867
+ * `'2.x'`(기본)는 native envelope(`{name,code,userInfo,moduleName,__isError}`),
868
+ * `'3.x'`는 맨 Error로 평탄화(sdk-example#284 매트릭스 "패턴 ① envelope 평탄화").
869
+ */
870
+ interface FailureModes {
871
+ /** 네이티브 실패 envelope의 라인 축. 기본 '2.x'. */
872
+ sdkLine: '2.x' | '3.x';
873
+ /** appLogin 실패 코드 (예: 'APP_LOGIN'). 미설정 시 기존처럼 항상 resolve. */
874
+ appLogin?: NativeErrorCode;
875
+ /** GoogleAdMob.loadAppsInTossAdMob 실패 코드 (예: 'PLACEMENT_ID_FETCH_FAILED'). */
876
+ loadAdMob?: NativeErrorCode;
877
+ /** loadFullScreenAd 실패 코드 (예: 'EXECUTION_ERROR'). */
878
+ loadFullScreenAd?: NativeErrorCode;
879
+ /**
880
+ * getIsTossLoginIntegratedService 실패 코드 (devtools#783 실측: env3 run11,
881
+ * 2.x/iOS `A1-awaited-is-boolean` 시나리오 — rejected/`Error`/`EXECUTION_ERROR`).
882
+ */
883
+ getIsTossLoginIntegratedService?: NativeErrorCode;
884
+ /**
885
+ * requestNotificationAgreement 실패 코드 (devtools#783 실측: env3 run11,
886
+ * 2.x/iOS `happy-force-*`/`A1-empty-templateCode` 시나리오 전부 —
887
+ * rejected/`Error`/`4000`).
888
+ */
889
+ requestNotificationAgreement?: NativeErrorCode;
890
+ /**
891
+ * 권한 이름별 실패 코드 (devtools#783 실측: env3 run11, 2.x/iOS
892
+ * `permissions.ait.test.ts` PERMISSION_NAMES 순회 — `geolocation`/`camera`/
893
+ * `microphone`만 rejected/`Error`/`NO_PERMISSION`, `clipboard`/`contacts`/
894
+ * `photos`는 resolved. 31146의 `granite.config.ts`가 `permissions: []`라
895
+ * 선언 안 된 권한만 거부되는 그림과 정합 — 전역 on/off가 아니라 이름 단위 맵.
896
+ * 설정된 이름만 reject, 나머지는 기존대로 resolve.
897
+ */
898
+ getPermission?: Partial<Record<PermissionName, NativeErrorCode>>;
836
899
  }
837
900
  declare class AitStateManager {
838
901
  private _state;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/mock/ads/index.ts","../../src/mock/analytics/index.ts","../../src/mock/auth/index.ts","../../src/mock/device/_helpers.ts","../../src/mock/device/camera.ts","../../src/mock/device/clipboard.ts","../../src/mock/types.ts","../../src/mock/device/contacts.ts","../../src/mock/device/haptic.ts","../../src/mock/device/location.ts","../../src/mock/device/pdf.ts","../../src/mock/device/storage.ts","../../src/mock/game/index.ts","../../src/mock/iap/index.ts","../../src/mock/navigation/index.ts","../../src/mock/notification.ts","../../src/mock/partner/index.ts","../../src/mock/permissions.ts","../../src/mcp/ait-source.ts","../../src/mock/state.ts","../../src/mock/presets.ts","../../src/mock/preset-store.ts","../../src/mock/safe-area-bridge.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/mock/ads/index.ts","../../src/mock/analytics/index.ts","../../src/mock/auth/index.ts","../../src/mock/device/_helpers.ts","../../src/mock/device/camera.ts","../../src/mock/device/clipboard.ts","../../src/mock/types.ts","../../src/mock/device/contacts.ts","../../src/mock/device/haptic.ts","../../src/mock/device/location.ts","../../src/mock/device/pdf.ts","../../src/mock/device/storage.ts","../../src/mock/game/index.ts","../../src/mock/iap/index.ts","../../src/mock/navigation/index.ts","../../src/mock/notification.ts","../../src/mock/partner/index.ts","../../src/mock/permissions.ts","../../src/mcp/ait-source.ts","../../src/mock/native-error.ts","../../src/mock/state.ts","../../src/mock/presets.ts","../../src/mock/preset-store.ts","../../src/mock/safe-area-bridge.ts"],"mappings":"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"}
@@ -112,7 +112,8 @@ const DEFAULT_STATE = {
112
112
  frame: false,
113
113
  aitNavBar: true,
114
114
  aitNavBarType: "partner"
115
- }
115
+ },
116
+ failureModes: { sdkLine: "2.x" }
116
117
  };
117
118
  function generateDeviceId() {
118
119
  const stored = localStorage.getItem("__ait_device_id");
@@ -315,6 +316,104 @@ function waitForPromptResponse(type) {
315
316
  });
316
317
  }
317
318
  //#endregion
319
+ //#region src/mock/native-error.ts
320
+ /**
321
+ * 실패-모드 다이얼 — 네이티브 에러 envelope 조립 (devtools#770).
322
+ *
323
+ * env1(mock)이 env3(실기기)의 프로비저닝-의존 reject 계약을 재현할 수 있게 하는
324
+ * 공용 헬퍼. `aitState.failureModes`(state.ts)에 per-API 코드를 설정하면, 각
325
+ * mock 도메인(auth/ads 등)이 이 모듈의 {@link buildNativeError}로 실기기 캡처와
326
+ * 필드 단위로 일치하는 에러 객체를 만들어 reject/onError한다.
327
+ *
328
+ * 코드 인벤토리와 envelope shape의 정본은 sdk-example#284 2.x↔3.0 diff
329
+ * 매트릭스(2026-07-10 iOS run10 캡처 + 이후 manual 패스)다:
330
+ *
331
+ * - 2.x 라인: 네이티브 브리지가 `{ name, code, userInfo, moduleName, __isError }`
332
+ * envelope을 얹은 `Error` 인스턴스로 reject한다. `errorKeys` 관측이 이 5개
333
+ * 필드로 고정.
334
+ * - 3.x 라인: 같은 실패가 "맨 Error"(위 envelope 필드 없음)로 평탄화된다 —
335
+ * sdk-example#284 "패턴 ① 오류 envelope 평탄화" 표.
336
+ *
337
+ * `src/test-runner/bridge-stub.ts`의 `NativeBridgeErrorShape`/`makeNativeError`가
338
+ * 같은 shape을 이미 CI 러너 쪽에서 재현하고 있다(devtools#740) — 이 모듈은 그
339
+ * shape을 mock 소비자 표면(`src/mock/**`)에 대해 재사용 가능한 형태로 옮긴 것이다.
340
+ * 두 모듈은 레이어가 다르다: test-runner 쪽은 env3 blocking-call 인터셉터(빌드에
341
+ * 안 실림, CI 전용), 이쪽은 `@ait-co/devtools` 소비자가 `pnpm dev`에서 실제로
342
+ * import하는 mock 런타임이다 — 서로 import하지 않는다(devtools#740이 test-runner
343
+ * 전용 모듈임을 명시).
344
+ */
345
+ /** 코드별 기본 message/moduleName — 실기기 캡처 관측값. */
346
+ const CODE_META = {
347
+ APP_LOGIN: {
348
+ message: "Login failed",
349
+ moduleName: "RNTossLogin"
350
+ },
351
+ PLACEMENT_ID_FETCH_FAILED: {
352
+ message: "Failed to fetch placement id",
353
+ moduleName: "RNAdMob"
354
+ },
355
+ EXECUTION_ERROR: {
356
+ message: "Execution error",
357
+ moduleName: "RNFullScreenAd"
358
+ },
359
+ NO_PERMISSION: {
360
+ message: "No permission",
361
+ moduleName: "RNPermissions"
362
+ },
363
+ INVALID_REQUEST: {
364
+ message: "Invalid request",
365
+ moduleName: "RNPermissions"
366
+ },
367
+ INVALID_DATA: {
368
+ message: "Invalid data",
369
+ moduleName: "RNFileSystem"
370
+ },
371
+ FAILED_TO_GET_LOADED_AD: {
372
+ message: "Failed to get loaded ad",
373
+ moduleName: "RNAdMob"
374
+ },
375
+ APP_BRIDGE_THROTTLED: {
376
+ message: "Too many app bridge calls from this method.",
377
+ moduleName: "RNBridge"
378
+ },
379
+ "1006": {
380
+ message: "광고가 로드 중이거나 준비되지 않았습니다",
381
+ moduleName: "RNFullScreenAd"
382
+ },
383
+ "4000": {
384
+ message: "Notification agreement failed",
385
+ moduleName: "RNNotification"
386
+ }
387
+ };
388
+ /**
389
+ * `aitState.failureModes.sdkLine`이 가리키는 라인으로 네이티브 실패를 조립한다.
390
+ *
391
+ * - `'2.x'`(기본): {@link NativeErrorEnvelope} 필드가 실린 `Error` — 실기기 2.x
392
+ * 캡처(`{name, code, userInfo, moduleName, __isError}`)와 필드 단위 일치.
393
+ * - `'3.x'`: 같은 실패가 "맨 Error"로 평탄화된 것을 재현 — envelope 필드 없이
394
+ * message만 실린 순수 `Error` 인스턴스.
395
+ *
396
+ * 호출부는 두 종류다:
397
+ *
398
+ * - **다이얼 게이트 뒤**(대부분): 프로비저닝처럼 환경에 따라 갈리는 실패는
399
+ * 다이얼이 설정된 경우에만 재현한다 — 미설정 시 기존 동작 무변화
400
+ * (zero behavior change). 호출 전에 다이얼 값을 명시적으로 확인한다.
401
+ * - **무조건**(입력 검증): 빈 `data`나 알 수 없는 haptic type처럼 환경과 무관하게
402
+ * 실기기가 **항상** 거부하는 입력은 다이얼 없이 바로 던진다. 이건 "가끔 일어나는
403
+ * 실패"의 시뮬레이션이 아니라 결정적 계약이므로 opt-in 대상이 아니다.
404
+ */
405
+ function buildNativeError(code) {
406
+ const meta = CODE_META[code];
407
+ if (aitState.state.failureModes.sdkLine === "3.x") return new Error(meta.message);
408
+ const err = new Error(meta.message);
409
+ err.name = "Error";
410
+ err.code = code;
411
+ err.userInfo = {};
412
+ err.moduleName = meta.moduleName;
413
+ err.__isError = true;
414
+ return err;
415
+ }
416
+ //#endregion
318
417
  //#region src/mock/permissions.ts
319
418
  /**
320
419
  * web-framework 3.0+ 권한 에러 기반 클래스.
@@ -377,14 +476,49 @@ const permissionErrorMap = {
377
476
  setClipboardText: SetClipboardTextPermissionError
378
477
  };
379
478
  async function getPermission(permission) {
479
+ const failureCode = permissionGateCode(permission);
480
+ if (failureCode) throw buildNativeError(failureCode);
380
481
  return aitState.state.permissions[permission.name];
381
482
  }
483
+ /**
484
+ * 선언 게이트에 걸리는 이름·access 조합이면 다이얼에 등록된 native errorCode를
485
+ * 돌려준다. 세 권한 API(`getPermission`/`requestPermission`/`openPermissionDialog`)가
486
+ * **걸리는 조건**은 공유하지만 **떨어지는 코드**는 공유하지 않는다 — 아래 참조.
487
+ */
488
+ function permissionGateCode(permission) {
489
+ if (permission.access === "access") return;
490
+ return aitState.state.failureModes.getPermission?.[permission.name];
491
+ }
492
+ /**
493
+ * `openPermissionDialog`가 선언 게이트에 걸렸을 때의 코드.
494
+ *
495
+ * 형제 API와 갈린다 — env3 run11 실측(2.x/iOS, sdk-example#313에서 시나리오 키가
496
+ * 통일되며 비교 대상에 들어온 값):
497
+ *
498
+ * getPermission { geolocation, read } → rejected NO_PERMISSION
499
+ * requestPermission { geolocation, read } → rejected NO_PERMISSION
500
+ * openPermissionDialog { geolocation, read } → rejected INVALID_REQUEST
501
+ * openPermissionDialog { camera, access } → resolved
502
+ *
503
+ * 즉 **걸리는 조건은 셋이 같고(access 축 모델 그대로) 코드만 갈린다.** 처음엔
504
+ * `requestPermission`이 `openPermissionDialog`에 위임하니 게이트도 위임하면
505
+ * 된다고 보고 한 지점에만 배선했는데, 그 모델은 코드 층위에서 실측과 어긋났다
506
+ * (env1 NO_PERMISSION ↔ env3 INVALID_REQUEST). 그래서 `requestPermission`은
507
+ * 위임 **전에** 자기 게이트를 먼저 타고, 다이얼로그를 여는 호출만 이 코드를 쓴다.
508
+ *
509
+ * 관측이 geolocation/read 한 조합뿐이라 이름·access별 분기는 두지 않는다 —
510
+ * 근거 없는 확장은 #783에서 이름 단위 맵을 택한 원칙에 어긋난다.
511
+ */
512
+ const OPEN_DIALOG_GATE_CODE = "INVALID_REQUEST";
382
513
  async function openPermissionDialog(permission) {
514
+ if (permissionGateCode(permission)) throw buildNativeError(OPEN_DIALOG_GATE_CODE);
383
515
  if (aitState.state.permissions[permission.name] === "allowed") return "allowed";
384
516
  aitState.patch("permissions", { [permission.name]: "allowed" });
385
517
  return "allowed";
386
518
  }
387
519
  async function requestPermission(permission) {
520
+ const failureCode = permissionGateCode(permission);
521
+ if (failureCode) throw buildNativeError(failureCode);
388
522
  return openPermissionDialog(permission);
389
523
  }
390
524
  /** 권한이 필요한 함수에 .getPermission(), .openPermissionDialog()를 부착 */
@@ -607,9 +741,10 @@ const _setClipboardText = async (text) => {
607
741
  checkPermission("clipboard", "setClipboardText");
608
742
  if (aitState.state.deviceModes.clipboard === "mock") {
609
743
  aitState.patch("mockData", { clipboardText: text });
610
- return;
744
+ return { text };
611
745
  }
612
746
  await navigator.clipboard.writeText(text);
747
+ return { text };
613
748
  };
614
749
  const setClipboardText = withPermission(_setClipboardText, "clipboard");
615
750
  //#endregion
@@ -703,6 +838,11 @@ function callVibrate(pattern) {
703
838
  return typeof navigator.vibrate === "function" ? navigator.vibrate(pattern) : false;
704
839
  }
705
840
  async function generateHapticFeedback(options) {
841
+ if (!Object.hasOwn(HAPTIC_VIBRATE_PATTERN, options.type)) {
842
+ const err = /* @__PURE__ */ new Error(`[@ait-co/devtools] generateHapticFeedback: unknown haptic type "${options.type}"`);
843
+ err.errorCode = "EXECUTION_ERROR";
844
+ throw err;
845
+ }
706
846
  const timestamp = Date.now();
707
847
  aitState.logAnalytics({
708
848
  type: "haptic",
@@ -722,6 +862,7 @@ async function generateHapticFeedback(options) {
722
862
  });
723
863
  }
724
864
  async function saveBase64Data(params) {
865
+ if (params.data === "") throw buildNativeError("INVALID_DATA");
725
866
  const a = document.createElement("a");
726
867
  a.href = `data:${params.mimeType};base64,${params.data}`;
727
868
  a.download = params.fileName;
@@ -750,7 +891,11 @@ function buildLocation() {
750
891
  };
751
892
  }
752
893
  async function getCurrentLocationMock() {
753
- return buildLocation();
894
+ const { coords, timestamp } = buildLocation();
895
+ return {
896
+ coords,
897
+ timestamp
898
+ };
754
899
  }
755
900
  async function getCurrentLocationWeb() {
756
901
  return new Promise((resolve) => {
@@ -769,8 +914,7 @@ async function getCurrentLocationWeb() {
769
914
  altitudeAccuracy: pos.coords.altitudeAccuracy ?? 0,
770
915
  heading: pos.coords.heading ?? 0
771
916
  },
772
- timestamp: pos.timestamp,
773
- accessLocation: "FINE"
917
+ timestamp: pos.timestamp
774
918
  });
775
919
  }, () => {
776
920
  console.warn("[@ait-co/devtools] Geolocation failed, falling back to mock");
@@ -779,7 +923,11 @@ async function getCurrentLocationWeb() {
779
923
  });
780
924
  }
781
925
  async function getCurrentLocationPrompt() {
782
- return waitForPromptResponse("location");
926
+ const { coords, timestamp } = await waitForPromptResponse("location");
927
+ return {
928
+ coords,
929
+ timestamp
930
+ };
783
931
  }
784
932
  const _getCurrentLocation = async (_options) => {
785
933
  checkPermission("geolocation", "getCurrentLocation");
@@ -923,6 +1071,12 @@ function createMockProxy(moduleName, implementations) {
923
1071
  /**
924
1072
  * Storage mock
925
1073
  * localStorage에 `__ait_storage:` prefix로 저장하여 앱 자체 localStorage와 분리
1074
+ *
1075
+ * 실기기(2.x×iOS) capture는 `setItem`/`removeItem`/`clearItems` 세 메서드가
1076
+ * `undefined`가 아니라 `null`로 resolve됨을 보였다(devtools#770). 원본 SDK 타입
1077
+ * 선언은 여전히 `Promise<void>`이므로 시그니처는 그대로 두고, 런타임 반환값만
1078
+ * `null`로 캐스트해 실측과 동치시킨다 — Analytics·setClipboardText와 같은 처리(#775).
1079
+ * `getItem`은 이미 `string | null`이라 실측과 일치하므로 손대지 않는다.
926
1080
  */
927
1081
  const Storage = createMockProxy("Storage", {
928
1082
  getItem: async (key) => {
@@ -930,13 +1084,16 @@ const Storage = createMockProxy("Storage", {
930
1084
  },
931
1085
  setItem: async (key, value) => {
932
1086
  localStorage.setItem(`__ait_storage:${key}`, value);
1087
+ return null;
933
1088
  },
934
1089
  removeItem: async (key) => {
935
1090
  localStorage.removeItem(`__ait_storage:${key}`);
1091
+ return null;
936
1092
  },
937
1093
  clearItems: async () => {
938
1094
  const keys = Object.keys(localStorage).filter((k) => k.startsWith("__ait_storage:"));
939
1095
  for (const k of keys) localStorage.removeItem(k);
1096
+ return null;
940
1097
  }
941
1098
  });
942
1099
  //#endregion
@@ -1027,7 +1184,13 @@ async function share(message) {
1027
1184
  }
1028
1185
  console.log("[@ait-co/devtools] share:", message.message);
1029
1186
  }
1187
+ const URI_SCHEME_PATTERN = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;
1030
1188
  async function getTossShareLink(path, _ogImageUrl) {
1189
+ if (!URI_SCHEME_PATTERN.test(path)) {
1190
+ const err = /* @__PURE__ */ new Error(`[@ait-co/devtools] getTossShareLink: "${path}" is not a valid link — a URI scheme is required (e.g. "intoss://...")`);
1191
+ err.errorCode = "EXECUTION_ERROR";
1192
+ throw err;
1193
+ }
1031
1194
  return `https://toss.im/share/mock${path}`;
1032
1195
  }
1033
1196
  async function setIosSwipeGestureEnabled(options) {
@@ -1171,9 +1334,22 @@ const SafeAreaInsets = {
1171
1334
  return aitState.subscribe(() => onEvent({ ...aitState.state.safeAreaInsets }));
1172
1335
  }
1173
1336
  };
1174
- /** @deprecated */
1337
+ /**
1338
+ * @deprecated `SafeAreaInsets.get()`을 쓸 것.
1339
+ *
1340
+ * 상류 SDK의 타입 선언은 `getSafeAreaInsets(): number`지만, 실기기(2.x×iOS)
1341
+ * capture는 이 함수가 숫자가 아니라 `SafeAreaInsets.get()`과 같은 객체
1342
+ * (`{ top, right, bottom, left }`)를 반환함을 보였다(devtools#770 —
1343
+ * `returnType: "object"`, `valueKeys: ["top","right","bottom","left"]`).
1344
+ * 즉 선언과 런타임이 어긋나 있는 상류 타입 버그다.
1345
+ *
1346
+ * mock은 타입 선언이 아니라 **런타임 실측**을 재현해야 개발자가 env1에서 겪는
1347
+ * 동작이 실기기와 같아진다. 그래서 시그니처는 상류와 동일하게 `number`로 두되
1348
+ * (`__typecheck.ts`가 SDK 타입에 대해 계속 컴파일되도록) 반환값만 실측 객체로
1349
+ * 캐스트한다 — Analytics·setClipboardText·Storage와 같은 처리(#775).
1350
+ */
1175
1351
  function getSafeAreaInsets() {
1176
- return aitState.state.safeAreaInsets.top;
1352
+ return { ...aitState.state.safeAreaInsets };
1177
1353
  }
1178
1354
  //#endregion
1179
1355
  //#region src/mock/safe-area-bridge.ts
@@ -1470,6 +1646,11 @@ function _nextSlotId(adGroupId) {
1470
1646
  const GoogleAdMob = createMockProxy("GoogleAdMob", {
1471
1647
  loadAppsInTossAdMob: withIsSupported(observe("GoogleAdMob.loadAppsInTossAdMob", "faithful", (args) => {
1472
1648
  setTimeout(() => {
1649
+ const failureCode = aitState.state.failureModes.loadAdMob;
1650
+ if (failureCode) {
1651
+ args.onError(buildNativeError(failureCode));
1652
+ return;
1653
+ }
1473
1654
  if (aitState.state.ads.forceNoFill) {
1474
1655
  args.onError(/* @__PURE__ */ new Error("No fill"));
1475
1656
  return;
@@ -1501,7 +1682,14 @@ const GoogleAdMob = createMockProxy("GoogleAdMob", {
1501
1682
  }, 1500);
1502
1683
  return () => {};
1503
1684
  })),
1504
- isAppsInTossAdMobLoaded: withIsSupported(observe("GoogleAdMob.isAppsInTossAdMobLoaded", "faithful", async (_options) => aitState.state.ads.isLoaded))
1685
+ isAppsInTossAdMobLoaded: withIsSupported(observe("GoogleAdMob.isAppsInTossAdMobLoaded", "faithful", async (_options) => {
1686
+ if (_options?.adGroupId !== void 0 && _options.adGroupId.trim() === "") {
1687
+ const err = /* @__PURE__ */ new Error(`[@ait-co/devtools] GoogleAdMob.isAppsInTossAdMobLoaded: malformed adGroupId "${_options.adGroupId}"`);
1688
+ err.errorCode = "INVALID_REQUEST";
1689
+ throw err;
1690
+ }
1691
+ return aitState.state.ads.isLoaded;
1692
+ }))
1505
1693
  });
1506
1694
  const TossAds = createMockProxy("TossAds", {
1507
1695
  initialize: withIsSupported(observe("TossAds.initialize", "partial", (options) => {
@@ -1590,6 +1778,11 @@ const TossAds = createMockProxy("TossAds", {
1590
1778
  });
1591
1779
  const loadFullScreenAd = withIsSupported(observe("loadFullScreenAd", "faithful", (args) => {
1592
1780
  setTimeout(() => {
1781
+ const failureCode = aitState.state.failureModes.loadFullScreenAd;
1782
+ if (failureCode) {
1783
+ args.onError(buildNativeError(failureCode));
1784
+ return;
1785
+ }
1593
1786
  if (aitState.state.ads.forceNoFill) {
1594
1787
  args.onError(/* @__PURE__ */ new Error("No fill"));
1595
1788
  return;
@@ -1619,21 +1812,21 @@ const Analytics = {
1619
1812
  type: "screen",
1620
1813
  params: params ?? {}
1621
1814
  });
1622
- return Promise.resolve();
1815
+ return Promise.resolve(null);
1623
1816
  },
1624
1817
  impression: (params) => {
1625
1818
  aitState.logAnalytics({
1626
1819
  type: "impression",
1627
1820
  params: params ?? {}
1628
1821
  });
1629
- return Promise.resolve();
1822
+ return Promise.resolve(null);
1630
1823
  },
1631
1824
  click: (params) => {
1632
1825
  aitState.logAnalytics({
1633
1826
  type: "click",
1634
1827
  params: params ?? {}
1635
1828
  });
1636
- return Promise.resolve();
1829
+ return Promise.resolve(null);
1637
1830
  }
1638
1831
  };
1639
1832
  async function eventLog(params) {
@@ -1644,6 +1837,7 @@ async function eventLog(params) {
1644
1837
  ...params.params
1645
1838
  }
1646
1839
  });
1840
+ return null;
1647
1841
  }
1648
1842
  //#endregion
1649
1843
  //#region src/mock/auth/index.ts
@@ -1651,12 +1845,16 @@ async function eventLog(params) {
1651
1845
  * 인증/로그인 mock
1652
1846
  */
1653
1847
  async function appLogin() {
1848
+ const failureCode = aitState.state.failureModes.appLogin;
1849
+ if (failureCode) throw buildNativeError(failureCode);
1654
1850
  return {
1655
1851
  authorizationCode: `mock-auth-${crypto.randomUUID()}`,
1656
1852
  referrer: aitState.state.environment === "toss" ? "DEFAULT" : "SANDBOX"
1657
1853
  };
1658
1854
  }
1659
1855
  async function getIsTossLoginIntegratedService() {
1856
+ const failureCode = aitState.state.failureModes.getIsTossLoginIntegratedService;
1857
+ if (failureCode) throw buildNativeError(failureCode);
1660
1858
  return aitState.state.auth.isTossLoginIntegrated;
1661
1859
  }
1662
1860
  async function getUserKeyForGame() {
@@ -1697,6 +1895,7 @@ async function getGameCenterGameProfile() {
1697
1895
  if (!profile) return { statusCode: "PROFILE_NOT_FOUND" };
1698
1896
  return {
1699
1897
  statusCode: "SUCCESS",
1898
+ gameSessionId: "mock-session",
1700
1899
  nickname: profile.nickname,
1701
1900
  profileImageUri: profile.profileImageUri
1702
1901
  };
@@ -1779,12 +1978,15 @@ const IAP = createMockProxy("IAP", {
1779
1978
  })) };
1780
1979
  },
1781
1980
  async getPendingOrders() {
1782
- return { orders: [...aitState.state.iap.pendingOrders] };
1981
+ const orders = [...aitState.state.iap.pendingOrders];
1982
+ return {
1983
+ orders,
1984
+ orderIds: orders.map((o) => o.orderId)
1985
+ };
1783
1986
  },
1784
1987
  async getCompletedOrRefundedOrders() {
1785
1988
  return {
1786
1989
  hasNext: false,
1787
- nextKey: null,
1788
1990
  orders: [...aitState.state.iap.completedOrders]
1789
1991
  };
1790
1992
  },
@@ -1855,6 +2057,11 @@ const _requestNotificationAgreementImpl = (params) => {
1855
2057
  let cancelled = false;
1856
2058
  Promise.resolve().then(async () => {
1857
2059
  if (cancelled) return;
2060
+ const failureCode = aitState.state.failureModes.requestNotificationAgreement;
2061
+ if (failureCode) {
2062
+ await params.onError(buildNativeError(failureCode));
2063
+ return;
2064
+ }
1858
2065
  const type = aitState.state.notification.nextResult;
1859
2066
  console.log("[@ait-co/devtools] requestNotificationAgreement:", params.options.templateCode, "→", type);
1860
2067
  try {