@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.
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 +79 -1
  41. package/dist/mock/index.d.ts.map +1 -1
  42. package/dist/mock/index.js +218 -14
  43. package/dist/mock/index.js.map +1 -1
  44. package/dist/panel/index.js +171 -10
  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.139"
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,58 @@ 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>>;
899
+ /**
900
+ * soft-resolve 다이얼 (#789) — reject가 아니라 "다른 shape로 resolve"하는 env3
901
+ * 프로비저닝-의존 실패를 재현한다. 켠 API만 실측 대체 shape로 resolve하고, 미설정
902
+ * API는 선언 타입대로 성공 shape를 유지한다(다이얼 미사용 시 zero behavior change).
903
+ * shape는 API별 고정(env3 run11 2.x/iOS 실측 — valueKeys만 실측, 문자열 내용은 예시):
904
+ * grantPromotionReward/grantPromotionRewardForGame → { errorCode, message }
905
+ * getSubscriptionInfo → {}
906
+ * (checkoutPayment/requestTossPayPaysBilling은 valueKeys=['false','reason']로 실측됐으나
907
+ * 값 수준 재확인이 폰-gated라 여기 아직 배선 안 함 — #303/#789.)
908
+ */
909
+ softResolve?: {
910
+ grantPromotionReward?: boolean;
911
+ grantPromotionRewardForGame?: boolean;
912
+ getSubscriptionInfo?: boolean;
913
+ };
836
914
  }
837
915
  declare class AitStateManager {
838
916
  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":";;;;cAmDa,WAAA;;aAMI,gBAAA;cACC,KAAA,EAAO,cAAA;cACP,KAAA;EAAA;;;;aAuBD,gBAAA;cACC,KAAA,EAAO,cAAA;cACP,KAAA;EAAA;;;;;;;;;cAmCL,OAAA;;;MAMS,aAAA;MAA4B,sBAAA,IAA0B,KAAA,EAAO,KAAA;IAAA;EAAA;;;;;;;;;;;MAyCvE,YAAA,IAAgB,OAAA;QACd,MAAA;QACA,SAAA;QACA,UAAA;UAAc,UAAA;UAAoB,SAAA;QAAA;MAAA;MAEpC,YAAA,IAAgB,OAAA;QACd,MAAA;QACA,SAAA;QACA,UAAA;UAAc,UAAA;UAAoB,SAAA;QAAA;MAAA;MAEpC,WAAA,IAAe,OAAA;QACb,MAAA;QACA,SAAA;QACA,UAAA;UAAc,UAAA;UAAoB,SAAA;QAAA;MAAA;MAEpC,cAAA,IAAkB,OAAA;QAChB,MAAA;QACA,SAAA;QACA,UAAA;UAAc,UAAA;UAAoB,SAAA;QAAA;MAAA;MAEpC,kBAAA,IAAsB,OAAA;QACpB,MAAA;QACA,SAAA;QACA,UAAA,EAAY,MAAA;QACZ,KAAA;UAAS,IAAA;UAAc,OAAA;UAAiB,MAAA;QAAA;MAAA;MAE1C,QAAA,IAAY,OAAA;QACV,MAAA;QACA,SAAA;QACA,UAAA,EAAY,MAAA;MAAA;IAAA;EAAA;;;;;;;;;;;;cA6Fb,gBAAA,IAAgB,IAAA;WAKd,uBAAA;YACC,KAAA,EAAO,qBAAA;YACP,KAAA;AAAA;;;cAeH,gBAAA,IAAgB,IAAA;WAKd,uBAAA;YACC,KAAA,EAAO,qBAAA;YACP,KAAA;AAAA;;;;;;;;KCvTX,WAAA;AAAA,KACA,YAAA;EAAiB,QAAA;AAAA,IAAsB,MAAA,SAAe,WAAA;AAAA,cAI9C,SAAA;oBACO,YAAA,KAAe,OAAA;wBAIX,YAAA,KAAe,OAAA;mBAIpB,YAAA,KAAe,OAAA;AAAA;AAAA,iBAMZ,QAAA,CAAS,MAAA;EAC7B,QAAA;EACA,QAAA;EACA,MAAA,EAAQ,MAAA,SAAe,WAAA;AAAA,IACrB,OAAA;;;;;;iBCxBkB,QAAA,CAAA,GAAY,OAAA;EAChC,iBAAA;EACA,QAAA;AAAA;AAAA,iBAQoB,+BAAA,CAAA,GAAmC,OAAA;AAAA,iBAMnC,iBAAA,CAAA,GAAqB,OAAA;EAAU,IAAA;EAAc,IAAA;AAAA;AAAA,iBAI7C,eAAA,CAAA,GAAmB,OAAA;EACrC,IAAA;EAAc,IAAA;AAAA;AAAA,UAMD,4BAAA;EACf,IAAA;AAAA;AAAA,iBAGoB,sBAAA,CAAuB,OAAA,EAAS,4BAAA,GAA+B,OAAA;;;;;;iBCIrE,2BAAA,CAAA;;;;;;;KC9BJ,aAAA;AAAA,cAwDC,UAAA,IAAU,QAAA;EATrB,MAAA;EACA,QAAA;AAAA,MACE,OAAA;EAAU,EAAA;EAAY,OAAA;AAAA;+BAAf,8BAAA,CAAA,gBAAA;;;cA8EE,gBAAA,IAAgB,OAAA;EAX3B,QAAA;EACA,QAAA;EACA,MAAA;AAAA,MACE,OAAA,CAAQ,KAAA;EAAQ,EAAA;EAAY,OAAA;AAAA;+BAArB,8BAAA,CAAA,gBAAA;;;UAYM,sBAAA;EACf,KAAA,GAAQ,aAAA;EACR,QAAA;EACA,QAAA;EACA,MAAA;AAAA;AAAA,UAGe,iBAAA;EACf,EAAA;EACA,OAAA;EACA,IAAA,EAAM,aAAA;AAAA;AAAA,cAyEF,8BAAA,IAA8B,OAAA,GATM,sBAAA,KAAyB,OAAA,CAAQ,iBAAA;+BAAD,8BAAA,CAAA,gBAAA;;;cAU7D,eAAA,SAAwB,8BAAA;EACnC,WAAA;AAAA;;;;;;;cChNW,gBAAA,SAXuB,OAAA;+BAAO,8BAAA,CAAA,gBAAA;;;cAuB9B,gBAAA,IAAgB,IAAA,aAVmB,OAAA;+BAAO,8BAAA,CAAA,gBAAA;;;;;KCrB3C,SAAA;AAAA,KAEA,UAAA;AAAA,KACA,sBAAA;AAAA,KACA,aAAA;AAAA,KACA,gBAAA;AAAA,KACA,cAAA;AAAA,KAOA,kBAAA;AAAA,KAYA,aAAA;AAAA,UAEK,WAAA;EACf,MAAA,EAAQ,aAAA;EACR,MAAA,EAAQ,aAAA;EACR,QAAA,EAAU,aAAA;EACV,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,QAAA;EACf,MAAA;EACA,aAAA;AAAA;AAAA,UAGe,cAAA;EACf,QAAA;EACA,SAAA;EACA,QAAA;EACA,QAAA;EACA,gBAAA;EACA,OAAA;AAAA;AAAA,UAGe,YAAA;EACf,MAAA,EAAQ,cAAA;EACR,SAAA;EACA,cAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA;EACA,WAAA;AAAA;AAAA,UAGe,cAAA;EACf,GAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,KAGU,aAAA;AAAA,KASA,2BAAA;AAAA,UAEK,iBAAA;EACf,SAAA;EACA,IAAA;EACA,MAAA,EAAQ,MAAA;AAAA;AAAA,UAGO,gBAAA;EACf,GAAA;EACA,MAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,KAGU,gBAAA;;;;;;;;KAwBA,mBAAA;;;;;KAMA,cAAA;;;;;;KAiBA,aAAA;AAAA,UAkFK,aAAA;EACf,MAAA,EAAQ,gBAAA;ELzNO;EK2Nf,WAAA,EAAa,mBAAA;EL3NmC;;;;EKgOhD,cAAA,EAAgB,cAAA;EAChB,WAAA;EACA,YAAA;EACA,KAAA;;EAEA,SAAA;ELhOiC;EKkOjC,aAAA,EAAe,aAAA;AAAA;;;;;;cClNJ,aAAA,IAAa,OAAA;EApBxB,IAAA;EACA,MAAA;EACA,KAAA;IAAU,QAAA;EAAA;AAAA,MACX,OAAA;UAiBsE,WAAA;;;;+BAjBtE,8BAAA,CAAA,gBAAA;;;;;iBC2CqB,sBAAA,CAAuB,OAAA;EAAW,IAAA,EAAM,kBAAA;AAAA,IAAuB,OAAA;AAAA,iBAiB/D,cAAA,CAAe,MAAA;EACnC,IAAA;EACA,QAAA;EACA,QAAA;AAAA,IACE,OAAA;;;aCjEC,QAAA;EACH,MAAA;EACA,GAAA;EACA,QAAA;EACA,IAAA;EACA,OAAA;EACA,iBAAA;AAAA;AAAA,cA4DW,kBAAA,IAAkB,QAAA;EAPiB,QAAA,EAAU,QAAA;AAAA,MAAa,OAAA,CAAQ,YAAA;+BAAD,8BAAA,CAAA,gBAAA;;;UAWpE,8BAAA;EACR,OAAA,GAAU,QAAA,EAAU,YAAA;EACpB,OAAA,GAAU,KAAA;EACV,OAAA;IAAW,QAAA,EAAU,QAAA;IAAU,YAAA;IAAsB,gBAAA;EAAA;AAAA;AAAA,cA2D1C,mBAAA,IAAmB,WAAA,EANW,8BAAA;+BAA8B,8BAAA,CAAA,gBAAA;;;;;;;;;ATrFzE;UU7CiB,mBAAA;EACf,IAAA;EACA,QAAA;AAAA;AAAA,KAGU,mBAAA;AAAA,cAWC,aAAA,IAAiB,MAAA,EAAQ,mBAAA,KAAwB,OAAA,CAAQ,mBAAA;EACpE,WAAA;AAAA;;;;;;;cChBW,OAAA;4BACmB,OAAA;yBAGH,KAAA,aAAkB,OAAA;+BAGZ,OAAA;oBAGX,OAAA;AAAA;;;iBCJF,oBAAA,CACpB,MAAA,EAAQ,0BAAA,GACP,OAAA,CAAQ,4BAAA;AAAA,iBAMW,2BAAA,CACpB,MAAA,EAAQ,0BAAA,GACP,OAAA,CAAQ,4BAAA;AAAA,iBAKW,gCAAA,CAAiC,MAAA;EACrD,KAAA;AAAA,IACE,OAAA;EACE,UAAA;AAAA;AAAA,iBAYgB,wBAAA,CAAA,GAA4B,OAAA;EAC5C,UAAA;EAAuB,QAAA;EAAkB,eAAA;AAAA;EACzC,UAAA;AAAA;AAAA,iBAYgB,yBAAA,CAAA,GAA6B,OAAA;AAAA,iBAInC,aAAA,CAAc,MAAA;EAC5B,OAAA;IAAW,QAAA;EAAA;EACX,OAAA,GAAU,KAAA,EAAO,kBAAA;EACjB,OAAA,GAAU,KAAA;AAAA;;;UChDF,oCAAA;EACR,OAAA;IACE,GAAA;IACA,SAAA;IACA,mBAAA,GAAsB,MAAA;MAAU,OAAA;IAAA,gBAAgC,OAAA;EAAA;EAElE,OAAA,GAAU,KAAA;IAAS,IAAA;IAAiB,IAAA,EAAM,cAAA;EAAA,aAA4B,OAAA;EACtE,OAAA,GAAU,KAAA,qBAA0B,OAAA;AAAA;AAAA,UAG5B,sCAAA;EACR,OAAA;IACE,GAAA;IACA,OAAA;IACA,mBAAA,GAAsB,MAAA;MACpB,OAAA;MACA,cAAA;IAAA,gBACc,OAAA;EAAA;EAElB,OAAA,GAAU,KAAA;IAAS,IAAA;IAAiB,IAAA,EAAM,cAAA;EAAA,aAA4B,OAAA;EACtE,OAAA,GAAU,KAAA,qBAA0B,OAAA;AAAA;AAAA,UAG5B,cAAA;EACR,OAAA;EACA,WAAA;EACA,aAAA;EACA,MAAA;EACA,QAAA;EACA,QAAA;EACA,cAAA;AAAA;AAAA,cAiEW,GAAA;qCAEwB,oCAAA;0CAQK,sCAAA;wBAUZ,OAAA;IAAU,QAAA,EAAU,kBAAA;EAAA;sBAStB,OAAA;IACxB,MAAA,EAAQ,KAAA;MAAQ,OAAA;MAAiB,GAAA;MAAa,oBAAA;IAAA;EAAA;kCAKV,OAAA;IACpC,OAAA;IACA,OAAA;IACA,MAAA,EAAQ,KAAA;MAAQ,OAAA;MAAiB,GAAA;MAAa,MAAA;MAAkC,IAAA;IAAA;EAAA;;IAS/C,MAAA;MAAU,OAAA;IAAA;EAAA,IAAsB,OAAA;;IAuBjE,MAAA;MAAU,OAAA;IAAA;EAAA,IACR,OAAA;IAAU,YAAA,EAAc,yBAAA;EAAA;AAAA;AAAA,iBAgBR,eAAA,CAAgB,OAAA;EACpC,MAAA;IAAU,QAAA;EAAA;AAAA,IACR,OAAA;EAAU,OAAA;EAAkB,MAAA;AAAA;AAAA,cAYnB,yBAAA,IAAyB,OAAA;EAElC,MAAA;IAAU,YAAA;EAAA;AAAA,MACR,OAAA;EAAU,OAAA;EAAkB,MAAA;AAAA;;;;;iBC7MZ,SAAA,CAAA,GAAa,OAAA;AAAA,iBAKb,OAAA,CAAQ,GAAA,WAAc,OAAA;AAAA,iBAKtB,KAAA,CAAM,OAAA;EAAW,OAAA;AAAA,IAAoB,OAAA;AAAA,iBAQrC,gBAAA,CAAiB,IAAA,UAAc,WAAA,YAAuB,OAAA;AAAA,iBAItD,yBAAA,CAA0B,OAAA;EAAW,SAAA;AAAA,IAAuB,OAAA;AAAA,iBAQ5D,oBAAA,CAAqB,OAAA;EACzC,IAAA;AAAA,IACE,OAAA;AAAA,cAeS,kBAAA,GAAkB,OAAA;;MAO9B,OAAA;;;cAEY,eAAA,GAAe,OAAA;;MAO3B,OAAA;;;cAEK,kBAAA,QAAkB,OAAA;AAAA,cAGX,aAAA,SAAsB,kBAAA;EAAuB,WAAA;AAAA;AAAA,iBAM1C,aAAA,CAAA;AAAA,iBAIA,yBAAA,CAAA;AAAA,iBAIA,iBAAA,CAAA;AAAA,iBAIA,qBAAA,CAAsB,WAAA;EAAe,OAAA;EAAiB,GAAA;AAAA;AAAA,iBAetD,YAAA,CAAA;AAAA,iBAIA,SAAA,CAAA;AAAA,iBAIA,WAAA,CAAA;AAAA,iBAIA,UAAA,CAAA;AAAA,iBAIM,gBAAA,CAAA,GAAoB,OAAA,CAAQ,aAAA;AAAA,cASrC,aAAA,SAAsB,OAAA;EAAiC,WAAA;AAAA;AAAA,cAcvD,YAAA;mCACsB,YAAA,EAAY,KAAA,EACpC,CAAA;IAAC,OAAA;IAAA;EAAA;IAKN,OAAA,EAAS,YAAA,CAAa,CAAA;IACtB,OAAA,GAAU,YAAA,CAAa,CAAA;IACvB,OAAA,GAAU,YAAA,CAAa,CAAA;EAAA;AAAA;AAAA,cA+ChB,eAAA;qCACsB,MAAA,EACvB,CAAA,EAAC,SAAA;IAEP,OAAA,MAAa,IAAA;IACb,OAAA,IAAW,KAAA,EAAO,KAAA;IAClB,OAAA;EAAA;AAAA;AAAA,cAOO,QAAA;mCACsB,QAAA,EAAQ,KAAA,EAChC,CAAA;IAAC;EAAA;IAIN,OAAA,EAAS,QAAA,CAAS,CAAA;IAClB,OAAA,GAAU,QAAA,CAAS,CAAA;IACnB,OAAA,GAAU,QAAA,CAAS,CAAA;EAAA;AAAA;;;;iBAeT,0CAAA,CAA2C,WAAA;EACzD,OAAA;IAAW,UAAA;EAAA;EACX,OAAA,GAAU,SAAA;EACV,OAAA,GAAU,KAAA;AAAA;AAAA,cASC,GAAA;EAEZ,eAAA;AAAA;AAAA,iBAEe,oBAAA,CAAA;;;;;;KAWX,mBAAA;EAAwB,GAAA;EAAa,MAAA;EAAgB,IAAA;EAAc,KAAA;AAAA;AAAA,KACnE,8BAAA;EAAmC,OAAA,GAAU,IAAA,EAAM,mBAAA;AAAA;AAAA,cAE3C,cAAA;aACF,mBAAA;;;KAGgB,8BAAA;AAAA;;iBAMX,iBAAA,CAAA;;;UC1QN,mCAAA;EACR,OAAA;IAAW,YAAA;EAAA;EACX,OAAA,GAAU,MAAA;IAAU,IAAA,EAAM,2BAAA;EAAA;EAC1B,OAAA,GAAU,KAAA,qBAA0B,OAAA;AAAA;AAAA,cA8BzB,4BAAA,IACX,MAAA,EAAQ,mCAAA;EACW,WAAA;AAAA;;;;;;UC/CX,yBAAA;EACR,EAAA;EACA,KAAA;EACA,IAAA;IAAQ,IAAA;EAAA;AAAA;AAAA,cAGG,OAAA;8BACuB,yBAAA,GAA4B,OAAA;2BAG/B,OAAA;AAAA;;;;;;;cCKpB,eAAA,SAAwB,KAAA;;IACrB,UAAA;IAAY;EAAA;IAAa,UAAA;IAAoB,OAAA;EAAA;AAAA;;cAOhD,yBAAA,SAAkC,eAAA;EAAA,WAAA,CAAA;AAAA;;cAOlC,+BAAA,SAAwC,eAAA;EAAA,WAAA,CAAA;AAAA;;cAOxC,4BAAA,SAAqC,eAAA;EAAA,WAAA,CAAA;AAAA;;cAOrC,iCAAA,SAA0C,eAAA;EAAA,WAAA,CAAA;AAAA;;cAO1C,+BAAA,SAAwC,eAAA;EAAA,WAAA,CAAA;AAAA;;cAOxC,+BAAA,SAAwC,eAAA;EAAA,WAAA,CAAA;AAAA;;;AjByDrD;;ciB/Ca,kCAAA,SAAkC,iCAAA;AAAA,iBAkBzB,aAAA,CAAc,UAAA;EAClC,IAAA,EAAM,gBAAA;EACN,MAAA,EAAQ,gBAAA;AAAA,IACN,OAAA,CAAQ,kBAAA;AAAA,iBAKU,oBAAA,CAAqB,UAAA;EACzC,IAAA,EAAM,gBAAA;EACN,MAAA,EAAQ,gBAAA;AAAA,IACN,OAAA;AAAA,iBAUkB,iBAAA,CAAkB,UAAA;EACtC,IAAA,EAAM,gBAAA;EACN,MAAA,EAAQ,gBAAA;AAAA,IACN,OAAA;;;;;;;AjB/DJ;;;;;;;;;;;;;;;;;KkB7BY,kBAAA;;UAGK,UAAA;;EAEf,MAAA;ElBuDe;EkBrDf,IAAA;ElBsDuB;EkBpDvB,SAAA;;EAEA,MAAA;;EAEA,MAAA;;EAEA,KAAA;;EAEA,QAAA,EAAU,kBAAA;AAAA;;;KCeP,QAAA;AAAA,UAKY,gBAAA;EAEf,QAAA,EAAU,UAAA;EACV,WAAA,EAAa,sBAAA;EACb,UAAA;EACA,MAAA;EACA,SAAA;EACA,OAAA;EACA,YAAA;EACA,QAAA;EAGA,KAAA;IACE,WAAA;IACA,IAAA;IACA,YAAA;EAAA;EAIF,aAAA,EAAe,aAAA;EAKf,UAAA;IACE,sBAAA;EAAA;EAIF,WAAA,EAAa,MAAA,CAAO,cAAA,EAAgB,gBAAA;EAGpC,QAAA,EAAU,YAAA;EAGV,cAAA,EAAgB,gBAAA;EAGhB,QAAA,EAAU,WAAA;EAGV,GAAA;IACE,QAAA,EAAU,cAAA;IACV,UAAA,EAAY,aAAA;IACZ,aAAA,EAAe,KAAA;MAAQ,OAAA;MAAiB,GAAA;MAAa,oBAAA;IAAA;IACrD,eAAA,EAAiB,KAAA;MACf,OAAA;MACA,GAAA;MACA,MAAA;MACA,IAAA;IAAA;EAAA;EAKJ,OAAA;IACE,UAAA;IACA,UAAA;EAAA;EAIF,IAAA;IACE,UAAA;IACA,qBAAA;IACA,WAAA;IACA,gBAAA;EAAA;EAIF,YAAA;IACE,UAAA,EAAY,2BAAA;EAAA;EAId,GAAA;IACE,QAAA;IACA,SAAA;IAOA,WAAA;IACA,SAAA;MAAa,IAAA;MAAc,SAAA;IAAA;IAE3B,cAAA;IAEA,YAAA;EAAA;EAIF,IAAA;IACE,OAAA;MAAW,QAAA;MAAkB,eAAA;IAAA;IAC7B,iBAAA,EAAmB,KAAA;MAAQ,KAAA;MAAe,SAAA;IAAA;EAAA;EAI5C,YAAA,EAAc,iBAAA;EAGd,UAAA,EAAY,UAAA;EAGZ,WAAA,EAAa,WAAA;EAGb,QAAA,EAAU,QAAA;EAGV,aAAA;EAGA,QAAA,EAAU,aAAA;AAAA;AAAA,cAuJC,eAAA;EAAA,QACH,MAAA;EAAA,QACA,UAAA;EAAA,QACA,cAAA;;MAWJ,KAAA,CAAA,GAAS,gBAAA;EAIb,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,gBAAA;EnB7JZ;EmBmKZ,KAAA,iBAAsB,gBAAA,CAAA,CAAkB,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,OAAA,CAAQ,gBAAA,CAAiB,CAAA;EAalF,SAAA,CAAU,QAAA,EAAU,QAAA;EnB/K0B;;;;;;;;;;;;;;;EmBmM9C,WAAA,CAAY,EAAA;EnBxLY;EmBuMxB,YAAA,CAAa,KAAA,EAAO,IAAA,CAAK,iBAAA;;;;;EAYzB,UAAA,CAAW,KAAA,EAAO,UAAA;;EAQlB,OAAA,CAAQ,KAAA;EAIR,KAAA,CAAA;EAAA,QAMQ,OAAA;AAAA;AAAA,cAsBG,QAAA,EAAU,eAAA;;;;;;;;;;;;;;;UCpaN,eAAA;EACf,aAAA,GAAgB,gBAAA;EAChB,WAAA,GAAc,OAAA,CAAQ,gBAAA;EACtB,IAAA,GAAO,OAAA,CAAQ,gBAAA;EACf,GAAA;IAAQ,UAAA,GAAa,gBAAA;EAAA;EACrB,GAAA,GAAM,OAAA,CAAQ,gBAAA;EACd,OAAA,GAAU,OAAA,CAAQ,gBAAA;AAAA;AAAA,UAGH,UAAA;EACf,EAAA;EACA,KAAA;EACA,WAAA;EACA,KAAA,EAAO,eAAA;AAAA;AAAA,cAGI,cAAA,WAAyB,UAAA;;ApB6EtC;;;;iBoBwCgB,WAAA,CAAY,KAAA,EAAO,eAAA;;;;;;;;iBAwCnB,aAAA,CAAc,QAAA,EAAU,gBAAA,EAAkB,MAAA,EAAQ,eAAA;;;;iBAyClD,mBAAA,CAAoB,QAAA,EAAU,gBAAA,GAAmB,eAAA;;;iBC1LjD,eAAA,CAAA,GAAmB,UAAA;;;;;;;;;;iBAwBnB,cAAA,CACd,KAAA,UACA,KAAA,EAAO,eAAA,EACP,WAAA,YACC,UAAA;AAAA,iBAkBa,gBAAA,CAAiB,EAAA;;;;cCzDpB,6BAAA;;AtB4Eb;;;;;;;csBlEa,0BAAA;;;;;;;;;;;;;;;;;;;;;cAsBA,0BAAA;;KAGD,gBAAA;;;;;;iBAgBI,0BAAA,CAA2B,IAAA,YAAgB,gBAAA;;;;;;;;;;;;;;;;iBA6B3C,uBAAA,CAAwB,IAAA,YAAgB,gBAAA;;;;;;iBAaxC,4BAAA,CAA6B,MAAA,EAAQ,gBAAA;;;;;;;;;ArB7HrD;;;;;;iBqBgPgB,2BAAA,CAAA;;;;;;;;;;;;;iBAwBA,qBAAA,CAAsB,IAAA;;;;;;ArBzPtC;;;;;;;;;;;;;;iBqBmRgB,yBAAA,CAAA;;;;;;iBAeA,cAAA,CAAA"}
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,7 @@ 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)) throw buildNativeError("EXECUTION_ERROR");
706
842
  const timestamp = Date.now();
707
843
  aitState.logAnalytics({
708
844
  type: "haptic",
@@ -722,6 +858,7 @@ async function generateHapticFeedback(options) {
722
858
  });
723
859
  }
724
860
  async function saveBase64Data(params) {
861
+ if (params.data === "") throw buildNativeError("INVALID_DATA");
725
862
  const a = document.createElement("a");
726
863
  a.href = `data:${params.mimeType};base64,${params.data}`;
727
864
  a.download = params.fileName;
@@ -750,7 +887,11 @@ function buildLocation() {
750
887
  };
751
888
  }
752
889
  async function getCurrentLocationMock() {
753
- return buildLocation();
890
+ const { coords, timestamp } = buildLocation();
891
+ return {
892
+ coords,
893
+ timestamp
894
+ };
754
895
  }
755
896
  async function getCurrentLocationWeb() {
756
897
  return new Promise((resolve) => {
@@ -769,8 +910,7 @@ async function getCurrentLocationWeb() {
769
910
  altitudeAccuracy: pos.coords.altitudeAccuracy ?? 0,
770
911
  heading: pos.coords.heading ?? 0
771
912
  },
772
- timestamp: pos.timestamp,
773
- accessLocation: "FINE"
913
+ timestamp: pos.timestamp
774
914
  });
775
915
  }, () => {
776
916
  console.warn("[@ait-co/devtools] Geolocation failed, falling back to mock");
@@ -779,7 +919,11 @@ async function getCurrentLocationWeb() {
779
919
  });
780
920
  }
781
921
  async function getCurrentLocationPrompt() {
782
- return waitForPromptResponse("location");
922
+ const { coords, timestamp } = await waitForPromptResponse("location");
923
+ return {
924
+ coords,
925
+ timestamp
926
+ };
783
927
  }
784
928
  const _getCurrentLocation = async (_options) => {
785
929
  checkPermission("geolocation", "getCurrentLocation");
@@ -923,6 +1067,12 @@ function createMockProxy(moduleName, implementations) {
923
1067
  /**
924
1068
  * Storage mock
925
1069
  * localStorage에 `__ait_storage:` prefix로 저장하여 앱 자체 localStorage와 분리
1070
+ *
1071
+ * 실기기(2.x×iOS) capture는 `setItem`/`removeItem`/`clearItems` 세 메서드가
1072
+ * `undefined`가 아니라 `null`로 resolve됨을 보였다(devtools#770). 원본 SDK 타입
1073
+ * 선언은 여전히 `Promise<void>`이므로 시그니처는 그대로 두고, 런타임 반환값만
1074
+ * `null`로 캐스트해 실측과 동치시킨다 — Analytics·setClipboardText와 같은 처리(#775).
1075
+ * `getItem`은 이미 `string | null`이라 실측과 일치하므로 손대지 않는다.
926
1076
  */
927
1077
  const Storage = createMockProxy("Storage", {
928
1078
  getItem: async (key) => {
@@ -930,13 +1080,16 @@ const Storage = createMockProxy("Storage", {
930
1080
  },
931
1081
  setItem: async (key, value) => {
932
1082
  localStorage.setItem(`__ait_storage:${key}`, value);
1083
+ return null;
933
1084
  },
934
1085
  removeItem: async (key) => {
935
1086
  localStorage.removeItem(`__ait_storage:${key}`);
1087
+ return null;
936
1088
  },
937
1089
  clearItems: async () => {
938
1090
  const keys = Object.keys(localStorage).filter((k) => k.startsWith("__ait_storage:"));
939
1091
  for (const k of keys) localStorage.removeItem(k);
1092
+ return null;
940
1093
  }
941
1094
  });
942
1095
  //#endregion
@@ -1027,7 +1180,9 @@ async function share(message) {
1027
1180
  }
1028
1181
  console.log("[@ait-co/devtools] share:", message.message);
1029
1182
  }
1183
+ const URI_SCHEME_PATTERN = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;
1030
1184
  async function getTossShareLink(path, _ogImageUrl) {
1185
+ if (!URI_SCHEME_PATTERN.test(path)) throw buildNativeError("EXECUTION_ERROR");
1031
1186
  return `https://toss.im/share/mock${path}`;
1032
1187
  }
1033
1188
  async function setIosSwipeGestureEnabled(options) {
@@ -1171,9 +1326,22 @@ const SafeAreaInsets = {
1171
1326
  return aitState.subscribe(() => onEvent({ ...aitState.state.safeAreaInsets }));
1172
1327
  }
1173
1328
  };
1174
- /** @deprecated */
1329
+ /**
1330
+ * @deprecated `SafeAreaInsets.get()`을 쓸 것.
1331
+ *
1332
+ * 상류 SDK의 타입 선언은 `getSafeAreaInsets(): number`지만, 실기기(2.x×iOS)
1333
+ * capture는 이 함수가 숫자가 아니라 `SafeAreaInsets.get()`과 같은 객체
1334
+ * (`{ top, right, bottom, left }`)를 반환함을 보였다(devtools#770 —
1335
+ * `returnType: "object"`, `valueKeys: ["top","right","bottom","left"]`).
1336
+ * 즉 선언과 런타임이 어긋나 있는 상류 타입 버그다.
1337
+ *
1338
+ * mock은 타입 선언이 아니라 **런타임 실측**을 재현해야 개발자가 env1에서 겪는
1339
+ * 동작이 실기기와 같아진다. 그래서 시그니처는 상류와 동일하게 `number`로 두되
1340
+ * (`__typecheck.ts`가 SDK 타입에 대해 계속 컴파일되도록) 반환값만 실측 객체로
1341
+ * 캐스트한다 — Analytics·setClipboardText·Storage와 같은 처리(#775).
1342
+ */
1175
1343
  function getSafeAreaInsets() {
1176
- return aitState.state.safeAreaInsets.top;
1344
+ return { ...aitState.state.safeAreaInsets };
1177
1345
  }
1178
1346
  //#endregion
1179
1347
  //#region src/mock/safe-area-bridge.ts
@@ -1470,6 +1638,11 @@ function _nextSlotId(adGroupId) {
1470
1638
  const GoogleAdMob = createMockProxy("GoogleAdMob", {
1471
1639
  loadAppsInTossAdMob: withIsSupported(observe("GoogleAdMob.loadAppsInTossAdMob", "faithful", (args) => {
1472
1640
  setTimeout(() => {
1641
+ const failureCode = aitState.state.failureModes.loadAdMob;
1642
+ if (failureCode) {
1643
+ args.onError(buildNativeError(failureCode));
1644
+ return;
1645
+ }
1473
1646
  if (aitState.state.ads.forceNoFill) {
1474
1647
  args.onError(/* @__PURE__ */ new Error("No fill"));
1475
1648
  return;
@@ -1501,7 +1674,10 @@ const GoogleAdMob = createMockProxy("GoogleAdMob", {
1501
1674
  }, 1500);
1502
1675
  return () => {};
1503
1676
  })),
1504
- isAppsInTossAdMobLoaded: withIsSupported(observe("GoogleAdMob.isAppsInTossAdMobLoaded", "faithful", async (_options) => aitState.state.ads.isLoaded))
1677
+ isAppsInTossAdMobLoaded: withIsSupported(observe("GoogleAdMob.isAppsInTossAdMobLoaded", "faithful", async (_options) => {
1678
+ if (_options?.adGroupId !== void 0 && _options.adGroupId.trim() === "") throw buildNativeError("INVALID_REQUEST");
1679
+ return aitState.state.ads.isLoaded;
1680
+ }))
1505
1681
  });
1506
1682
  const TossAds = createMockProxy("TossAds", {
1507
1683
  initialize: withIsSupported(observe("TossAds.initialize", "partial", (options) => {
@@ -1590,6 +1766,11 @@ const TossAds = createMockProxy("TossAds", {
1590
1766
  });
1591
1767
  const loadFullScreenAd = withIsSupported(observe("loadFullScreenAd", "faithful", (args) => {
1592
1768
  setTimeout(() => {
1769
+ const failureCode = aitState.state.failureModes.loadFullScreenAd;
1770
+ if (failureCode) {
1771
+ args.onError(buildNativeError(failureCode));
1772
+ return;
1773
+ }
1593
1774
  if (aitState.state.ads.forceNoFill) {
1594
1775
  args.onError(/* @__PURE__ */ new Error("No fill"));
1595
1776
  return;
@@ -1619,21 +1800,21 @@ const Analytics = {
1619
1800
  type: "screen",
1620
1801
  params: params ?? {}
1621
1802
  });
1622
- return Promise.resolve();
1803
+ return Promise.resolve(null);
1623
1804
  },
1624
1805
  impression: (params) => {
1625
1806
  aitState.logAnalytics({
1626
1807
  type: "impression",
1627
1808
  params: params ?? {}
1628
1809
  });
1629
- return Promise.resolve();
1810
+ return Promise.resolve(null);
1630
1811
  },
1631
1812
  click: (params) => {
1632
1813
  aitState.logAnalytics({
1633
1814
  type: "click",
1634
1815
  params: params ?? {}
1635
1816
  });
1636
- return Promise.resolve();
1817
+ return Promise.resolve(null);
1637
1818
  }
1638
1819
  };
1639
1820
  async function eventLog(params) {
@@ -1644,6 +1825,7 @@ async function eventLog(params) {
1644
1825
  ...params.params
1645
1826
  }
1646
1827
  });
1828
+ return null;
1647
1829
  }
1648
1830
  //#endregion
1649
1831
  //#region src/mock/auth/index.ts
@@ -1651,12 +1833,16 @@ async function eventLog(params) {
1651
1833
  * 인증/로그인 mock
1652
1834
  */
1653
1835
  async function appLogin() {
1836
+ const failureCode = aitState.state.failureModes.appLogin;
1837
+ if (failureCode) throw buildNativeError(failureCode);
1654
1838
  return {
1655
1839
  authorizationCode: `mock-auth-${crypto.randomUUID()}`,
1656
1840
  referrer: aitState.state.environment === "toss" ? "DEFAULT" : "SANDBOX"
1657
1841
  };
1658
1842
  }
1659
1843
  async function getIsTossLoginIntegratedService() {
1844
+ const failureCode = aitState.state.failureModes.getIsTossLoginIntegratedService;
1845
+ if (failureCode) throw buildNativeError(failureCode);
1660
1846
  return aitState.state.auth.isTossLoginIntegrated;
1661
1847
  }
1662
1848
  async function getUserKeyForGame() {
@@ -1679,10 +1865,18 @@ async function appsInTossSignTossCert(_params) {
1679
1865
  //#region src/mock/game/index.ts
1680
1866
  async function grantPromotionReward(params) {
1681
1867
  console.log("[@ait-co/devtools] grantPromotionReward:", params.params);
1868
+ if (aitState.state.failureModes.softResolve?.grantPromotionReward) return {
1869
+ errorCode: "PROMOTION_NOT_FOUND",
1870
+ message: "no active promotion"
1871
+ };
1682
1872
  return { key: `mock-reward-${Date.now()}` };
1683
1873
  }
1684
1874
  async function grantPromotionRewardForGame(params) {
1685
1875
  console.log("[@ait-co/devtools] grantPromotionRewardForGame:", params.params);
1876
+ if (aitState.state.failureModes.softResolve?.grantPromotionRewardForGame) return {
1877
+ errorCode: "PROMOTION_NOT_FOUND",
1878
+ message: "no active promotion"
1879
+ };
1686
1880
  return { key: `mock-reward-${Date.now()}` };
1687
1881
  }
1688
1882
  async function submitGameCenterLeaderBoardScore(params) {
@@ -1697,6 +1891,7 @@ async function getGameCenterGameProfile() {
1697
1891
  if (!profile) return { statusCode: "PROFILE_NOT_FOUND" };
1698
1892
  return {
1699
1893
  statusCode: "SUCCESS",
1894
+ gameSessionId: "mock-session",
1700
1895
  nickname: profile.nickname,
1701
1896
  profileImageUri: profile.profileImageUri
1702
1897
  };
@@ -1779,12 +1974,15 @@ const IAP = createMockProxy("IAP", {
1779
1974
  })) };
1780
1975
  },
1781
1976
  async getPendingOrders() {
1782
- return { orders: [...aitState.state.iap.pendingOrders] };
1977
+ const orders = [...aitState.state.iap.pendingOrders];
1978
+ return {
1979
+ orders,
1980
+ orderIds: orders.map((o) => o.orderId)
1981
+ };
1783
1982
  },
1784
1983
  async getCompletedOrRefundedOrders() {
1785
1984
  return {
1786
1985
  hasNext: false,
1787
- nextKey: null,
1788
1986
  orders: [...aitState.state.iap.completedOrders]
1789
1987
  };
1790
1988
  },
@@ -1807,6 +2005,7 @@ const IAP = createMockProxy("IAP", {
1807
2005
  return true;
1808
2006
  },
1809
2007
  async getSubscriptionInfo(_args) {
2008
+ if (aitState.state.failureModes.softResolve?.getSubscriptionInfo) return {};
1810
2009
  return { subscription: {
1811
2010
  catalogId: 1,
1812
2011
  status: "ACTIVE",
@@ -1855,6 +2054,11 @@ const _requestNotificationAgreementImpl = (params) => {
1855
2054
  let cancelled = false;
1856
2055
  Promise.resolve().then(async () => {
1857
2056
  if (cancelled) return;
2057
+ const failureCode = aitState.state.failureModes.requestNotificationAgreement;
2058
+ if (failureCode) {
2059
+ await params.onError(buildNativeError(failureCode));
2060
+ return;
2061
+ }
1858
2062
  const type = aitState.state.notification.nextResult;
1859
2063
  console.log("[@ait-co/devtools] requestNotificationAgreement:", params.options.templateCode, "→", type);
1860
2064
  try {