@chipmobilesdk/rn-ads 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/README.md +4 -2
  3. package/lib/commonjs/config/resolveAdUnit.js +80 -0
  4. package/lib/commonjs/config/resolveAdUnit.js.map +1 -0
  5. package/lib/commonjs/config/types.js +138 -0
  6. package/lib/commonjs/config/types.js.map +1 -0
  7. package/lib/commonjs/config/validate.js +150 -0
  8. package/lib/commonjs/config/validate.js.map +1 -0
  9. package/lib/commonjs/core/adOriginatedReturn.js +119 -0
  10. package/lib/commonjs/core/adOriginatedReturn.js.map +1 -0
  11. package/lib/commonjs/core/adsInstance.js +129 -0
  12. package/lib/commonjs/core/adsInstance.js.map +1 -0
  13. package/lib/commonjs/core/consentFlow.js +154 -0
  14. package/lib/commonjs/core/consentFlow.js.map +1 -0
  15. package/lib/commonjs/core/enablement.js +64 -0
  16. package/lib/commonjs/core/enablement.js.map +1 -0
  17. package/lib/commonjs/core/fullScreenLock.js +48 -0
  18. package/lib/commonjs/core/fullScreenLock.js.map +1 -0
  19. package/lib/commonjs/core/gates.js +95 -0
  20. package/lib/commonjs/core/gates.js.map +1 -0
  21. package/lib/commonjs/core/initMachine.js +159 -0
  22. package/lib/commonjs/core/initMachine.js.map +1 -0
  23. package/lib/commonjs/core/instance/consent.js +155 -0
  24. package/lib/commonjs/core/instance/consent.js.map +1 -0
  25. package/lib/commonjs/core/instance/context.js +217 -0
  26. package/lib/commonjs/core/instance/context.js.map +1 -0
  27. package/lib/commonjs/core/instance/gate.js +194 -0
  28. package/lib/commonjs/core/instance/gate.js.map +1 -0
  29. package/lib/commonjs/core/instance/init.js +326 -0
  30. package/lib/commonjs/core/instance/init.js.map +1 -0
  31. package/lib/commonjs/core/instance/internals.js +115 -0
  32. package/lib/commonjs/core/instance/internals.js.map +1 -0
  33. package/lib/commonjs/core/instance/load.js +458 -0
  34. package/lib/commonjs/core/instance/load.js.map +1 -0
  35. package/lib/commonjs/core/instance/show.js +243 -0
  36. package/lib/commonjs/core/instance/show.js.map +1 -0
  37. package/lib/commonjs/core/instance/types.js +6 -0
  38. package/lib/commonjs/core/instance/types.js.map +1 -0
  39. package/lib/commonjs/core/placementMachine.js +116 -0
  40. package/lib/commonjs/core/placementMachine.js.map +1 -0
  41. package/lib/commonjs/core/privacyGate.js +93 -0
  42. package/lib/commonjs/core/privacyGate.js.map +1 -0
  43. package/lib/commonjs/core/requestThrottle.js +152 -0
  44. package/lib/commonjs/core/requestThrottle.js.map +1 -0
  45. package/lib/commonjs/core/retryPolicy.js +120 -0
  46. package/lib/commonjs/core/retryPolicy.js.map +1 -0
  47. package/lib/commonjs/core/rewardedSession.js +65 -0
  48. package/lib/commonjs/core/rewardedSession.js.map +1 -0
  49. package/lib/commonjs/core/timers.js +162 -0
  50. package/lib/commonjs/core/timers.js.map +1 -0
  51. package/lib/commonjs/diagnostics/correlation.js +33 -0
  52. package/lib/commonjs/diagnostics/correlation.js.map +1 -0
  53. package/lib/commonjs/diagnostics/errors.js +152 -0
  54. package/lib/commonjs/diagnostics/errors.js.map +1 -0
  55. package/lib/commonjs/diagnostics/events.js +132 -0
  56. package/lib/commonjs/diagnostics/events.js.map +1 -0
  57. package/lib/commonjs/engine/admobBanner.js +58 -0
  58. package/lib/commonjs/engine/admobBanner.js.map +1 -0
  59. package/lib/commonjs/engine/admobEngine.js +343 -0
  60. package/lib/commonjs/engine/admobEngine.js.map +1 -0
  61. package/lib/commonjs/engine/admobErrors.js +45 -0
  62. package/lib/commonjs/engine/admobErrors.js.map +1 -0
  63. package/lib/commonjs/engine/port.js +6 -0
  64. package/lib/commonjs/engine/port.js.map +1 -0
  65. package/lib/commonjs/engine/testAdUnits.js +61 -0
  66. package/lib/commonjs/engine/testAdUnits.js.map +1 -0
  67. package/lib/commonjs/index.js +218 -0
  68. package/lib/commonjs/index.js.map +1 -0
  69. package/lib/commonjs/package.json +1 -0
  70. package/lib/commonjs/react/AdsBanner.js +317 -0
  71. package/lib/commonjs/react/AdsBanner.js.map +1 -0
  72. package/lib/commonjs/react/AdsProvider.js +54 -0
  73. package/lib/commonjs/react/AdsProvider.js.map +1 -0
  74. package/lib/commonjs/react/hooks.js +63 -0
  75. package/lib/commonjs/react/hooks.js.map +1 -0
  76. package/lib/commonjs/testing/clock.js +76 -0
  77. package/lib/commonjs/testing/clock.js.map +1 -0
  78. package/lib/commonjs/testing/conformance.js +99 -0
  79. package/lib/commonjs/testing/conformance.js.map +1 -0
  80. package/lib/commonjs/testing/index.js +389 -0
  81. package/lib/commonjs/testing/index.js.map +1 -0
  82. package/lib/module/config/resolveAdUnit.js +75 -0
  83. package/lib/module/config/resolveAdUnit.js.map +1 -0
  84. package/lib/module/config/types.js +134 -0
  85. package/lib/module/config/types.js.map +1 -0
  86. package/lib/module/config/validate.js +146 -0
  87. package/lib/module/config/validate.js.map +1 -0
  88. package/lib/module/core/adOriginatedReturn.js +115 -0
  89. package/lib/module/core/adOriginatedReturn.js.map +1 -0
  90. package/lib/module/core/adsInstance.js +121 -0
  91. package/lib/module/core/adsInstance.js.map +1 -0
  92. package/lib/module/core/consentFlow.js +143 -0
  93. package/lib/module/core/consentFlow.js.map +1 -0
  94. package/lib/module/core/enablement.js +58 -0
  95. package/lib/module/core/enablement.js.map +1 -0
  96. package/lib/module/core/fullScreenLock.js +44 -0
  97. package/lib/module/core/fullScreenLock.js.map +1 -0
  98. package/lib/module/core/gates.js +91 -0
  99. package/lib/module/core/gates.js.map +1 -0
  100. package/lib/module/core/initMachine.js +152 -0
  101. package/lib/module/core/initMachine.js.map +1 -0
  102. package/lib/module/core/instance/consent.js +151 -0
  103. package/lib/module/core/instance/consent.js.map +1 -0
  104. package/lib/module/core/instance/context.js +212 -0
  105. package/lib/module/core/instance/context.js.map +1 -0
  106. package/lib/module/core/instance/gate.js +183 -0
  107. package/lib/module/core/instance/gate.js.map +1 -0
  108. package/lib/module/core/instance/init.js +321 -0
  109. package/lib/module/core/instance/init.js.map +1 -0
  110. package/lib/module/core/instance/internals.js +109 -0
  111. package/lib/module/core/instance/internals.js.map +1 -0
  112. package/lib/module/core/instance/load.js +452 -0
  113. package/lib/module/core/instance/load.js.map +1 -0
  114. package/lib/module/core/instance/show.js +238 -0
  115. package/lib/module/core/instance/show.js.map +1 -0
  116. package/lib/module/core/instance/types.js +4 -0
  117. package/lib/module/core/instance/types.js.map +1 -0
  118. package/lib/module/core/placementMachine.js +109 -0
  119. package/lib/module/core/placementMachine.js.map +1 -0
  120. package/lib/module/core/privacyGate.js +86 -0
  121. package/lib/module/core/privacyGate.js.map +1 -0
  122. package/lib/module/core/requestThrottle.js +146 -0
  123. package/lib/module/core/requestThrottle.js.map +1 -0
  124. package/lib/module/core/retryPolicy.js +113 -0
  125. package/lib/module/core/retryPolicy.js.map +1 -0
  126. package/lib/module/core/rewardedSession.js +61 -0
  127. package/lib/module/core/rewardedSession.js.map +1 -0
  128. package/lib/module/core/timers.js +150 -0
  129. package/lib/module/core/timers.js.map +1 -0
  130. package/lib/module/diagnostics/correlation.js +29 -0
  131. package/lib/module/diagnostics/correlation.js.map +1 -0
  132. package/lib/module/diagnostics/errors.js +143 -0
  133. package/lib/module/diagnostics/errors.js.map +1 -0
  134. package/lib/module/diagnostics/events.js +128 -0
  135. package/lib/module/diagnostics/events.js.map +1 -0
  136. package/lib/module/engine/admobBanner.js +52 -0
  137. package/lib/module/engine/admobBanner.js.map +1 -0
  138. package/lib/module/engine/admobEngine.js +334 -0
  139. package/lib/module/engine/admobEngine.js.map +1 -0
  140. package/lib/module/engine/admobErrors.js +41 -0
  141. package/lib/module/engine/admobErrors.js.map +1 -0
  142. package/lib/module/engine/port.js +4 -0
  143. package/lib/module/engine/port.js.map +1 -0
  144. package/lib/module/engine/testAdUnits.js +56 -0
  145. package/lib/module/engine/testAdUnits.js.map +1 -0
  146. package/lib/module/index.js +59 -0
  147. package/lib/module/index.js.map +1 -0
  148. package/lib/module/package.json +1 -0
  149. package/lib/module/react/AdsBanner.js +312 -0
  150. package/lib/module/react/AdsBanner.js.map +1 -0
  151. package/lib/module/react/AdsProvider.js +48 -0
  152. package/lib/module/react/AdsProvider.js.map +1 -0
  153. package/lib/module/react/hooks.js +58 -0
  154. package/lib/module/react/hooks.js.map +1 -0
  155. package/lib/module/testing/clock.js +72 -0
  156. package/lib/module/testing/clock.js.map +1 -0
  157. package/lib/module/testing/conformance.js +93 -0
  158. package/lib/module/testing/conformance.js.map +1 -0
  159. package/lib/module/testing/index.js +366 -0
  160. package/lib/module/testing/index.js.map +1 -0
  161. package/lib/typescript/commonjs/config/resolveAdUnit.d.ts +43 -0
  162. package/lib/typescript/commonjs/config/resolveAdUnit.d.ts.map +1 -0
  163. package/lib/typescript/commonjs/config/types.d.ts +280 -0
  164. package/lib/typescript/commonjs/config/types.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/config/validate.d.ts +49 -0
  166. package/lib/typescript/commonjs/config/validate.d.ts.map +1 -0
  167. package/lib/typescript/commonjs/core/adOriginatedReturn.d.ts +61 -0
  168. package/lib/typescript/commonjs/core/adOriginatedReturn.d.ts.map +1 -0
  169. package/lib/typescript/commonjs/core/adsInstance.d.ts +33 -0
  170. package/lib/typescript/commonjs/core/adsInstance.d.ts.map +1 -0
  171. package/lib/typescript/commonjs/core/consentFlow.d.ts +84 -0
  172. package/lib/typescript/commonjs/core/consentFlow.d.ts.map +1 -0
  173. package/lib/typescript/commonjs/core/enablement.d.ts +74 -0
  174. package/lib/typescript/commonjs/core/enablement.d.ts.map +1 -0
  175. package/lib/typescript/commonjs/core/fullScreenLock.d.ts +25 -0
  176. package/lib/typescript/commonjs/core/fullScreenLock.d.ts.map +1 -0
  177. package/lib/typescript/commonjs/core/gates.d.ts +76 -0
  178. package/lib/typescript/commonjs/core/gates.d.ts.map +1 -0
  179. package/lib/typescript/commonjs/core/initMachine.d.ts +66 -0
  180. package/lib/typescript/commonjs/core/initMachine.d.ts.map +1 -0
  181. package/lib/typescript/commonjs/core/instance/consent.d.ts +4 -0
  182. package/lib/typescript/commonjs/core/instance/consent.d.ts.map +1 -0
  183. package/lib/typescript/commonjs/core/instance/context.d.ts +118 -0
  184. package/lib/typescript/commonjs/core/instance/context.d.ts.map +1 -0
  185. package/lib/typescript/commonjs/core/instance/gate.d.ts +38 -0
  186. package/lib/typescript/commonjs/core/instance/gate.d.ts.map +1 -0
  187. package/lib/typescript/commonjs/core/instance/init.d.ts +13 -0
  188. package/lib/typescript/commonjs/core/instance/init.d.ts.map +1 -0
  189. package/lib/typescript/commonjs/core/instance/internals.d.ts +60 -0
  190. package/lib/typescript/commonjs/core/instance/internals.d.ts.map +1 -0
  191. package/lib/typescript/commonjs/core/instance/load.d.ts +9 -0
  192. package/lib/typescript/commonjs/core/instance/load.d.ts.map +1 -0
  193. package/lib/typescript/commonjs/core/instance/show.d.ts +7 -0
  194. package/lib/typescript/commonjs/core/instance/show.d.ts.map +1 -0
  195. package/lib/typescript/commonjs/core/instance/types.d.ts +240 -0
  196. package/lib/typescript/commonjs/core/instance/types.d.ts.map +1 -0
  197. package/lib/typescript/commonjs/core/placementMachine.d.ts +55 -0
  198. package/lib/typescript/commonjs/core/placementMachine.d.ts.map +1 -0
  199. package/lib/typescript/commonjs/core/privacyGate.d.ts +40 -0
  200. package/lib/typescript/commonjs/core/privacyGate.d.ts.map +1 -0
  201. package/lib/typescript/commonjs/core/requestThrottle.d.ts +99 -0
  202. package/lib/typescript/commonjs/core/requestThrottle.d.ts.map +1 -0
  203. package/lib/typescript/commonjs/core/retryPolicy.d.ts +66 -0
  204. package/lib/typescript/commonjs/core/retryPolicy.d.ts.map +1 -0
  205. package/lib/typescript/commonjs/core/rewardedSession.d.ts +37 -0
  206. package/lib/typescript/commonjs/core/rewardedSession.d.ts.map +1 -0
  207. package/lib/typescript/commonjs/core/timers.d.ts +135 -0
  208. package/lib/typescript/commonjs/core/timers.d.ts.map +1 -0
  209. package/lib/typescript/commonjs/diagnostics/correlation.d.ts +18 -0
  210. package/lib/typescript/commonjs/diagnostics/correlation.d.ts.map +1 -0
  211. package/lib/typescript/commonjs/diagnostics/errors.d.ts +59 -0
  212. package/lib/typescript/commonjs/diagnostics/errors.d.ts.map +1 -0
  213. package/lib/typescript/commonjs/diagnostics/events.d.ts +126 -0
  214. package/lib/typescript/commonjs/diagnostics/events.d.ts.map +1 -0
  215. package/lib/typescript/commonjs/engine/admobBanner.d.ts +10 -0
  216. package/lib/typescript/commonjs/engine/admobBanner.d.ts.map +1 -0
  217. package/lib/typescript/commonjs/engine/admobEngine.d.ts +71 -0
  218. package/lib/typescript/commonjs/engine/admobEngine.d.ts.map +1 -0
  219. package/lib/typescript/commonjs/engine/admobErrors.d.ts +9 -0
  220. package/lib/typescript/commonjs/engine/admobErrors.d.ts.map +1 -0
  221. package/lib/typescript/commonjs/engine/port.d.ts +171 -0
  222. package/lib/typescript/commonjs/engine/port.d.ts.map +1 -0
  223. package/lib/typescript/commonjs/engine/testAdUnits.d.ts +33 -0
  224. package/lib/typescript/commonjs/engine/testAdUnits.d.ts.map +1 -0
  225. package/lib/typescript/commonjs/index.d.ts +42 -0
  226. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  227. package/lib/typescript/commonjs/package.json +1 -0
  228. package/lib/typescript/commonjs/react/AdsBanner.d.ts +29 -0
  229. package/lib/typescript/commonjs/react/AdsBanner.d.ts.map +1 -0
  230. package/lib/typescript/commonjs/react/AdsProvider.d.ts +36 -0
  231. package/lib/typescript/commonjs/react/AdsProvider.d.ts.map +1 -0
  232. package/lib/typescript/commonjs/react/hooks.d.ts +27 -0
  233. package/lib/typescript/commonjs/react/hooks.d.ts.map +1 -0
  234. package/lib/typescript/commonjs/testing/clock.d.ts +29 -0
  235. package/lib/typescript/commonjs/testing/clock.d.ts.map +1 -0
  236. package/lib/typescript/commonjs/testing/conformance.d.ts +26 -0
  237. package/lib/typescript/commonjs/testing/conformance.d.ts.map +1 -0
  238. package/lib/typescript/commonjs/testing/index.d.ts +133 -0
  239. package/lib/typescript/commonjs/testing/index.d.ts.map +1 -0
  240. package/lib/typescript/module/config/resolveAdUnit.d.ts +43 -0
  241. package/lib/typescript/module/config/resolveAdUnit.d.ts.map +1 -0
  242. package/lib/typescript/module/config/types.d.ts +280 -0
  243. package/lib/typescript/module/config/types.d.ts.map +1 -0
  244. package/lib/typescript/module/config/validate.d.ts +49 -0
  245. package/lib/typescript/module/config/validate.d.ts.map +1 -0
  246. package/lib/typescript/module/core/adOriginatedReturn.d.ts +61 -0
  247. package/lib/typescript/module/core/adOriginatedReturn.d.ts.map +1 -0
  248. package/lib/typescript/module/core/adsInstance.d.ts +33 -0
  249. package/lib/typescript/module/core/adsInstance.d.ts.map +1 -0
  250. package/lib/typescript/module/core/consentFlow.d.ts +84 -0
  251. package/lib/typescript/module/core/consentFlow.d.ts.map +1 -0
  252. package/lib/typescript/module/core/enablement.d.ts +74 -0
  253. package/lib/typescript/module/core/enablement.d.ts.map +1 -0
  254. package/lib/typescript/module/core/fullScreenLock.d.ts +25 -0
  255. package/lib/typescript/module/core/fullScreenLock.d.ts.map +1 -0
  256. package/lib/typescript/module/core/gates.d.ts +76 -0
  257. package/lib/typescript/module/core/gates.d.ts.map +1 -0
  258. package/lib/typescript/module/core/initMachine.d.ts +66 -0
  259. package/lib/typescript/module/core/initMachine.d.ts.map +1 -0
  260. package/lib/typescript/module/core/instance/consent.d.ts +4 -0
  261. package/lib/typescript/module/core/instance/consent.d.ts.map +1 -0
  262. package/lib/typescript/module/core/instance/context.d.ts +118 -0
  263. package/lib/typescript/module/core/instance/context.d.ts.map +1 -0
  264. package/lib/typescript/module/core/instance/gate.d.ts +38 -0
  265. package/lib/typescript/module/core/instance/gate.d.ts.map +1 -0
  266. package/lib/typescript/module/core/instance/init.d.ts +13 -0
  267. package/lib/typescript/module/core/instance/init.d.ts.map +1 -0
  268. package/lib/typescript/module/core/instance/internals.d.ts +60 -0
  269. package/lib/typescript/module/core/instance/internals.d.ts.map +1 -0
  270. package/lib/typescript/module/core/instance/load.d.ts +9 -0
  271. package/lib/typescript/module/core/instance/load.d.ts.map +1 -0
  272. package/lib/typescript/module/core/instance/show.d.ts +7 -0
  273. package/lib/typescript/module/core/instance/show.d.ts.map +1 -0
  274. package/lib/typescript/module/core/instance/types.d.ts +240 -0
  275. package/lib/typescript/module/core/instance/types.d.ts.map +1 -0
  276. package/lib/typescript/module/core/placementMachine.d.ts +55 -0
  277. package/lib/typescript/module/core/placementMachine.d.ts.map +1 -0
  278. package/lib/typescript/module/core/privacyGate.d.ts +40 -0
  279. package/lib/typescript/module/core/privacyGate.d.ts.map +1 -0
  280. package/lib/typescript/module/core/requestThrottle.d.ts +99 -0
  281. package/lib/typescript/module/core/requestThrottle.d.ts.map +1 -0
  282. package/lib/typescript/module/core/retryPolicy.d.ts +66 -0
  283. package/lib/typescript/module/core/retryPolicy.d.ts.map +1 -0
  284. package/lib/typescript/module/core/rewardedSession.d.ts +37 -0
  285. package/lib/typescript/module/core/rewardedSession.d.ts.map +1 -0
  286. package/lib/typescript/module/core/timers.d.ts +135 -0
  287. package/lib/typescript/module/core/timers.d.ts.map +1 -0
  288. package/lib/typescript/module/diagnostics/correlation.d.ts +18 -0
  289. package/lib/typescript/module/diagnostics/correlation.d.ts.map +1 -0
  290. package/lib/typescript/module/diagnostics/errors.d.ts +59 -0
  291. package/lib/typescript/module/diagnostics/errors.d.ts.map +1 -0
  292. package/lib/typescript/module/diagnostics/events.d.ts +126 -0
  293. package/lib/typescript/module/diagnostics/events.d.ts.map +1 -0
  294. package/lib/typescript/module/engine/admobBanner.d.ts +10 -0
  295. package/lib/typescript/module/engine/admobBanner.d.ts.map +1 -0
  296. package/lib/typescript/module/engine/admobEngine.d.ts +71 -0
  297. package/lib/typescript/module/engine/admobEngine.d.ts.map +1 -0
  298. package/lib/typescript/module/engine/admobErrors.d.ts +9 -0
  299. package/lib/typescript/module/engine/admobErrors.d.ts.map +1 -0
  300. package/lib/typescript/module/engine/port.d.ts +171 -0
  301. package/lib/typescript/module/engine/port.d.ts.map +1 -0
  302. package/lib/typescript/module/engine/testAdUnits.d.ts +33 -0
  303. package/lib/typescript/module/engine/testAdUnits.d.ts.map +1 -0
  304. package/lib/typescript/module/index.d.ts +42 -0
  305. package/lib/typescript/module/index.d.ts.map +1 -0
  306. package/lib/typescript/module/package.json +1 -0
  307. package/lib/typescript/module/react/AdsBanner.d.ts +29 -0
  308. package/lib/typescript/module/react/AdsBanner.d.ts.map +1 -0
  309. package/lib/typescript/module/react/AdsProvider.d.ts +36 -0
  310. package/lib/typescript/module/react/AdsProvider.d.ts.map +1 -0
  311. package/lib/typescript/module/react/hooks.d.ts +27 -0
  312. package/lib/typescript/module/react/hooks.d.ts.map +1 -0
  313. package/lib/typescript/module/testing/clock.d.ts +29 -0
  314. package/lib/typescript/module/testing/clock.d.ts.map +1 -0
  315. package/lib/typescript/module/testing/conformance.d.ts +26 -0
  316. package/lib/typescript/module/testing/conformance.d.ts.map +1 -0
  317. package/lib/typescript/module/testing/index.d.ts +133 -0
  318. package/lib/typescript/module/testing/index.d.ts.map +1 -0
  319. package/package.json +48 -12
  320. package/skills/sdk-rn-ads/SKILL.md +2 -1
  321. package/src/core/adsInstance.ts +72 -1829
  322. package/src/core/consentFlow.ts +1 -20
  323. package/src/core/instance/consent.ts +162 -0
  324. package/src/core/instance/context.ts +328 -0
  325. package/src/core/instance/gate.ts +147 -0
  326. package/src/core/instance/init.ts +262 -0
  327. package/src/core/instance/internals.ts +138 -0
  328. package/src/core/instance/load.ts +426 -0
  329. package/src/core/instance/show.ts +202 -0
  330. package/src/core/instance/types.ts +198 -0
  331. package/src/core/requestThrottle.ts +11 -17
  332. package/src/diagnostics/errors.ts +24 -5
  333. package/src/engine/admobBanner.tsx +55 -0
  334. package/src/engine/admobEngine.ts +21 -12
  335. package/src/engine/admobErrors.ts +44 -0
  336. package/src/engine/port.ts +46 -1
  337. package/src/engine/testAdUnits.ts +0 -5
  338. package/src/react/AdsBanner.tsx +81 -80
  339. package/src/testing/clock.ts +75 -0
  340. package/src/testing/index.ts +43 -68
@@ -0,0 +1,366 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Deterministic in-memory ads engine for tests (SC-012).
5
+ *
6
+ * This is a real implementation of the same `AdsEngine` port the AdMob adapter
7
+ * implements, not a parallel mock — so a contract change breaks it at compile
8
+ * time and it cannot drift. Nothing here touches a native module or a network.
9
+ *
10
+ * It exists to make the package's guarantees provable. The recorded call log is
11
+ * what SC-002 asserts against ("zero production identifiers reached the
12
+ * adapter") and what SC-003 asserts against ("zero calls before consent").
13
+ * Callback emission is fully caller-driven, which is what lets a test run the
14
+ * reward-before-dismiss and dismiss-before-reward orderings and demand the same
15
+ * outcome from both (SC-007).
16
+ *
17
+ * Exported from `@chipmobilesdk/rn-ads/testing`, never from the main entrypoint,
18
+ * so test doubles cannot reach a production bundle.
19
+ */
20
+
21
+ import React from 'react';
22
+ import { View } from 'react-native';
23
+ export { createTestClock } from "./clock.js";
24
+ import { createTestClock } from "./clock.js";
25
+ import { testAdUnitFor } from "../engine/testAdUnits.js";
26
+
27
+ /**
28
+ * A privacy options form the test is holding open (0.4.0).
29
+ *
30
+ * Settle it whenever the test chooses, which is what lets `busy`, a second
31
+ * call, a consent update, and `dispose()` all be exercised *while* the form is
32
+ * on screen — in any order, rather than only the one a resolved promise allows.
33
+ */
34
+
35
+ const DEFAULT_CONSENT = {
36
+ status: 'not_required',
37
+ canRequestAds: true,
38
+ isFormAvailable: false,
39
+ privacyOptions: 'not_required'
40
+ };
41
+ /**
42
+ * Runs `task` on the next microtask, which is when a provider's callbacks would
43
+ * arrive. Written out because React Native's type declarations omit
44
+ * `queueMicrotask`, although Hermes has it.
45
+ */
46
+ function nextMicrotask(task) {
47
+ Promise.resolve().then(task);
48
+ }
49
+
50
+ /** The testID the fake banner renders under, for a test to find it by. */
51
+ export const FAKE_BANNER_TEST_ID = 'ads-fake-banner';
52
+
53
+ /**
54
+ * The fake engine's banner component.
55
+ *
56
+ * It renders a host view carrying the props the package handed it, so a test
57
+ * can read them and call the callbacks: `getByTestId(FAKE_BANNER_TEST_ID)`.
58
+ * It used to render `null`, which left the props reachable only on the
59
+ * component instance — something `@testing-library/react-native` cannot see,
60
+ * since a host element is all a consumer's own tests can query.
61
+ */
62
+ function FakeBanner(props) {
63
+ return /*#__PURE__*/React.createElement(View, {
64
+ ...props,
65
+ testID: FAKE_BANNER_TEST_ID
66
+ });
67
+ }
68
+ export function createFakeAdsEngine(options = {}) {
69
+ const calls = [];
70
+ const consentCalls = [];
71
+ const clock = options.clock ?? createTestClock();
72
+ let consentInfo = {
73
+ ...DEFAULT_CONSENT,
74
+ ...options.consentInfo
75
+ };
76
+ let consentRequestFailure;
77
+ let consentFormFailure;
78
+ let privacyFormFailure;
79
+ let privacyFormResult = {};
80
+ let consentReadFailure;
81
+ /** Set by `holdPrivacyOptionsForm`; consumed by the next form. */
82
+ let heldForm = null;
83
+ const consent = {
84
+ async requestInfoUpdate(consentOptions) {
85
+ consentCalls.push({
86
+ kind: 'requestInfoUpdate',
87
+ options: consentOptions
88
+ });
89
+ if (consentRequestFailure !== undefined) {
90
+ throw consentRequestFailure;
91
+ }
92
+ return consentInfo;
93
+ },
94
+ async showFormIfRequired() {
95
+ consentCalls.push({
96
+ kind: 'showFormIfRequired'
97
+ });
98
+ if (consentFormFailure !== undefined) {
99
+ throw consentFormFailure;
100
+ }
101
+ // A presented form that the user completes moves the status on. The
102
+ // fake only does this when a form was actually required, mirroring the
103
+ // provider: showing nothing cannot change an answer.
104
+ // A region that required a form is one that requires a way back into
105
+ // it, which is what the provider reports once consent is obtained.
106
+ if (consentInfo.status === 'required' && consentInfo.isFormAvailable) {
107
+ consentInfo = {
108
+ status: 'obtained',
109
+ canRequestAds: true,
110
+ isFormAvailable: false,
111
+ privacyOptions: 'required'
112
+ };
113
+ }
114
+ return consentInfo;
115
+ },
116
+ async showPrivacyOptionsForm() {
117
+ consentCalls.push({
118
+ kind: 'showPrivacyOptionsForm'
119
+ });
120
+ const held = heldForm;
121
+ heldForm = null;
122
+ if (held) {
123
+ // Rejects if the test calls `fail`, which is exactly the provider's
124
+ // failure path; resolves with what the user left behind otherwise.
125
+ consentInfo = {
126
+ ...consentInfo,
127
+ ...(await held)
128
+ };
129
+ return consentInfo;
130
+ }
131
+ if (privacyFormFailure !== undefined) {
132
+ throw privacyFormFailure;
133
+ }
134
+ consentInfo = {
135
+ ...consentInfo,
136
+ ...privacyFormResult
137
+ };
138
+ return consentInfo;
139
+ },
140
+ async getInfo() {
141
+ consentCalls.push({
142
+ kind: 'getInfo'
143
+ });
144
+ if (consentReadFailure !== undefined) {
145
+ throw consentReadFailure;
146
+ }
147
+ return consentInfo;
148
+ },
149
+ reset() {
150
+ consentCalls.push({
151
+ kind: 'reset'
152
+ });
153
+ consentInfo = {
154
+ status: 'unknown',
155
+ canRequestAds: false,
156
+ isFormAvailable: true,
157
+ privacyOptions: 'unknown'
158
+ };
159
+ }
160
+ };
161
+ const listeners = new Map();
162
+ /** Callbacks queued before anyone subscribed; see `subscribe`. */
163
+ const pending = new Map();
164
+ const live = new Set();
165
+ let counter = 0;
166
+ function record(call) {
167
+ calls.push(call);
168
+ }
169
+ return {
170
+ calls,
171
+ consentCalls,
172
+ consent,
173
+ clock,
174
+ advance(ms) {
175
+ clock.advance(ms);
176
+ },
177
+ setConsentInfo(info) {
178
+ consentInfo = {
179
+ ...consentInfo,
180
+ ...info
181
+ };
182
+ },
183
+ failConsentRequest(cause = new Error('consent request failed')) {
184
+ consentRequestFailure = cause;
185
+ },
186
+ failConsentForm(cause = new Error('consent form failed')) {
187
+ consentFormFailure = cause;
188
+ },
189
+ setPrivacyOptionsFormResult(info) {
190
+ privacyFormResult = info;
191
+ },
192
+ failPrivacyOptionsForm(cause = new Error('privacy options form failed')) {
193
+ privacyFormFailure = cause;
194
+ },
195
+ holdPrivacyOptionsForm() {
196
+ let settle;
197
+ const promise = new Promise((resolve, reject) => {
198
+ settle = {
199
+ resolve,
200
+ reject
201
+ };
202
+ });
203
+ heldForm = promise;
204
+ return {
205
+ close(info = {}) {
206
+ settle.resolve(info);
207
+ },
208
+ fail(cause = new Error('privacy options form failed')) {
209
+ settle.reject(cause);
210
+ }
211
+ };
212
+ },
213
+ failConsentInfoRead(cause = new Error('consent information read failed')) {
214
+ consentReadFailure = cause;
215
+ },
216
+ isAvailable() {
217
+ return options.available !== false;
218
+ },
219
+ // Renders nothing. A test finds it in the tree by its `adUnitId` prop and
220
+ // calls `onLoaded`, `onFailed`, `onImpression` or `onClicked` itself, which
221
+ // is how a banner is driven without mocking a native module (ADS-12).
222
+ banner: {
223
+ isAvailable: () => options.available !== false,
224
+ Component: FakeBanner
225
+ },
226
+ async initialize(privacy) {
227
+ record({
228
+ kind: 'initialize',
229
+ privacy
230
+ });
231
+ if (options.failInitialize !== undefined) {
232
+ throw options.failInitialize;
233
+ }
234
+ },
235
+ async createFullScreen(format, adUnitId, request) {
236
+ counter += 1;
237
+ const id = `fake-${counter}`;
238
+ record({
239
+ kind: 'createFullScreen',
240
+ format,
241
+ adUnitId,
242
+ handleId: id,
243
+ request
244
+ });
245
+ live.add(id);
246
+ // A real provider delivers `loaded` to a listener attached after the
247
+ // ad object exists, so the callback is queued here and flushed when
248
+ // the caller subscribes. Emitting eagerly would race the caller's own
249
+ // subscribe and the event would be dropped — which is a property of
250
+ // this fake, not of the package, and would make the load look hung.
251
+ if (!options.neverCallBack) {
252
+ pending.set(id, {
253
+ type: 'loaded'
254
+ });
255
+ }
256
+ return {
257
+ id
258
+ };
259
+ },
260
+ async show(handle) {
261
+ record({
262
+ kind: 'show',
263
+ handleId: handle.id
264
+ });
265
+ if (options.failShow !== undefined) {
266
+ throw options.failShow;
267
+ }
268
+ if (!options.neverCallBack) {
269
+ // `show` is called with a listener already attached, so this one
270
+ // can go out directly on the next microtask.
271
+ nextMicrotask(() => {
272
+ for (const listener of Array.from(listeners.get(handle.id) ?? [])) {
273
+ listener({
274
+ type: 'opened'
275
+ });
276
+ }
277
+ });
278
+ }
279
+ },
280
+ subscribe(handle, listener) {
281
+ let set = listeners.get(handle.id);
282
+ if (!set) {
283
+ set = new Set();
284
+ listeners.set(handle.id, set);
285
+ }
286
+ set.add(listener);
287
+ // Flush whatever the provider would have delivered between creating
288
+ // the ad and this subscription.
289
+ const queued = pending.get(handle.id);
290
+ if (queued) {
291
+ pending.delete(handle.id);
292
+ nextMicrotask(() => {
293
+ for (const target of Array.from(listeners.get(handle.id) ?? [])) {
294
+ target(queued);
295
+ }
296
+ });
297
+ }
298
+ let active = true;
299
+ return () => {
300
+ if (!active) {
301
+ return;
302
+ }
303
+ active = false;
304
+ set?.delete(listener);
305
+ if (set && set.size === 0) {
306
+ listeners.delete(handle.id);
307
+ }
308
+ };
309
+ },
310
+ dispose(handle) {
311
+ record({
312
+ kind: 'dispose',
313
+ handleId: handle.id
314
+ });
315
+ live.delete(handle.id);
316
+ listeners.delete(handle.id);
317
+ pending.delete(handle.id);
318
+ },
319
+ adUnitIds() {
320
+ return calls.filter(call => call.kind === 'createFullScreen').map(call => call.adUnitId);
321
+ },
322
+ liveHandles() {
323
+ return Array.from(live);
324
+ },
325
+ emit(handleId, event) {
326
+ for (const listener of Array.from(listeners.get(handleId) ?? [])) {
327
+ listener(event);
328
+ }
329
+ },
330
+ completeLoad(handleId) {
331
+ this.emit(handleId, {
332
+ type: 'loaded'
333
+ });
334
+ },
335
+ emitReward(handleId, reward = {
336
+ type: 'coins',
337
+ amount: 10
338
+ }) {
339
+ this.emit(handleId, {
340
+ type: 'rewarded',
341
+ reward
342
+ });
343
+ },
344
+ listenerCount() {
345
+ let total = 0;
346
+ for (const set of listeners.values()) {
347
+ total += set.size;
348
+ }
349
+ return total;
350
+ },
351
+ reset() {
352
+ calls.length = 0;
353
+ }
354
+ };
355
+ }
356
+ export { adsEngineChecks, runAdsEngineConformance } from "./conformance.js";
357
+ /** Google's official test ad unit for each format, as the package substitutes them (FR-011). */
358
+ export function allTestAdUnits() {
359
+ return {
360
+ banner: testAdUnitFor('banner'),
361
+ interstitial: testAdUnitFor('interstitial'),
362
+ rewarded: testAdUnitFor('rewarded'),
363
+ app_open: testAdUnitFor('app_open')
364
+ };
365
+ }
366
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","View","createTestClock","testAdUnitFor","DEFAULT_CONSENT","status","canRequestAds","isFormAvailable","privacyOptions","nextMicrotask","task","Promise","resolve","then","FAKE_BANNER_TEST_ID","FakeBanner","props","createElement","testID","createFakeAdsEngine","options","calls","consentCalls","clock","consentInfo","consentRequestFailure","consentFormFailure","privacyFormFailure","privacyFormResult","consentReadFailure","heldForm","consent","requestInfoUpdate","consentOptions","push","kind","undefined","showFormIfRequired","showPrivacyOptionsForm","held","getInfo","reset","listeners","Map","pending","live","Set","counter","record","call","advance","ms","setConsentInfo","info","failConsentRequest","cause","Error","failConsentForm","setPrivacyOptionsFormResult","failPrivacyOptionsForm","holdPrivacyOptionsForm","settle","promise","reject","close","fail","failConsentInfoRead","isAvailable","available","banner","Component","initialize","privacy","failInitialize","createFullScreen","format","adUnitId","request","id","handleId","add","neverCallBack","set","type","show","handle","failShow","listener","Array","from","get","subscribe","queued","delete","target","active","size","dispose","adUnitIds","filter","map","liveHandles","emit","event","completeLoad","emitReward","reward","amount","listenerCount","total","values","length","adsEngineChecks","runAdsEngineConformance","allTestAdUnits","interstitial","rewarded","app_open"],"sourceRoot":"../../../src","sources":["testing/index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * The production-traffic guarantee (FR-011, FR-011a).
3
+ *
4
+ * A pure function, deliberately. This is the single point where a production ad
5
+ * unit can be replaced by an official test one, which is what makes SC-002
6
+ * provable rather than merely intended: a guarantee enforced in one place can be
7
+ * asserted; one spread across three call sites is a hope.
8
+ *
9
+ * The rule, from the 2026-09-02 clarification session:
10
+ *
11
+ * production -> use what the app configured, always, no exceptions
12
+ * development / test -> if it is not one of our own official test units,
13
+ * replace it and say so, loudly, naming the key
14
+ *
15
+ * Substitution rather than rejection is a deliberate trade. Rejecting would
16
+ * block a developer whose only mistake was pulling a teammate's environment
17
+ * file, and turn a configuration smell into a broken integration at every
18
+ * startup. Substituting keeps the app working — which is what a non-production
19
+ * build is for — and reports the problem as a first-class signal. The accepted
20
+ * cost is that a warning can be ignored; it is bounded because production never
21
+ * substitutes, so the misconfiguration surfaces there as ordinary behavior
22
+ * rather than as hidden state.
23
+ */
24
+ import type { Environment, PlacementDefinition } from './types';
25
+ export interface ResolvedAdUnit {
26
+ readonly effectiveAdUnitId: string;
27
+ /** True when the configured identifier was replaced. Drives FR-011a's warning. */
28
+ readonly substituted: boolean;
29
+ }
30
+ export declare function resolveAdUnit(placement: PlacementDefinition, environment: Environment): ResolvedAdUnit;
31
+ export interface ResolvedCatalog {
32
+ /** Placement key to the ad unit that will actually be requested. */
33
+ readonly byKey: ReadonlyMap<string, string>;
34
+ /** Every key whose identifier was replaced, in catalog order (FR-011a). */
35
+ readonly substitutedKeys: readonly string[];
36
+ }
37
+ /**
38
+ * Resolves a whole catalog at once, so the warning can name every affected
39
+ * placement in a single event rather than trickling one out per load — an
40
+ * integrator wants to fix the whole file, not discover it a placement at a time.
41
+ */
42
+ export declare function resolvePlacementAdUnits(placements: readonly PlacementDefinition[], environment: Environment): ResolvedCatalog;
43
+ //# sourceMappingURL=resolveAdUnit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveAdUnit.d.ts","sourceRoot":"","sources":["../../../../src/config/resolveAdUnit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGhE,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAC5B,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,WAAW,GACtB,cAAc,CAkBhB;AAED,MAAM,WAAW,eAAe;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACtC,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,WAAW,EAAE,WAAW,GACtB,eAAe,CAajB"}