@explorer02/cfm-survey-sdk 0.0.1

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 (318) hide show
  1. package/dist/analytics/analyticsTracker.d.ts +3 -0
  2. package/dist/analytics/analyticsTracker.d.ts.map +1 -0
  3. package/dist/analytics/analyticsTracker.js +34 -0
  4. package/dist/analytics/analyticsTracker.js.map +1 -0
  5. package/dist/analytics/types.d.ts +76 -0
  6. package/dist/analytics/types.d.ts.map +1 -0
  7. package/dist/analytics/types.js +3 -0
  8. package/dist/analytics/types.js.map +1 -0
  9. package/dist/cli/deploy.d.ts +2 -0
  10. package/dist/cli/deploy.d.ts.map +1 -0
  11. package/dist/cli/deploy.js +200 -0
  12. package/dist/cli/deploy.js.map +1 -0
  13. package/dist/cli/index.d.ts +3 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +33 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/fetchSurvey/internalTypes.d.ts +60 -0
  18. package/dist/fetchSurvey/internalTypes.d.ts.map +1 -0
  19. package/dist/fetchSurvey/internalTypes.js +3 -0
  20. package/dist/fetchSurvey/internalTypes.js.map +1 -0
  21. package/dist/fetchSurvey/logger/fetchLogger.d.ts +6 -0
  22. package/dist/fetchSurvey/logger/fetchLogger.d.ts.map +1 -0
  23. package/dist/fetchSurvey/logger/fetchLogger.js +37 -0
  24. package/dist/fetchSurvey/logger/fetchLogger.js.map +1 -0
  25. package/dist/fetchSurvey/logger/mapperLogger.d.ts +4 -0
  26. package/dist/fetchSurvey/logger/mapperLogger.d.ts.map +1 -0
  27. package/dist/fetchSurvey/logger/mapperLogger.js +16 -0
  28. package/dist/fetchSurvey/logger/mapperLogger.js.map +1 -0
  29. package/dist/fetchSurvey/telemetry/fetchTelemetry.d.ts +3 -0
  30. package/dist/fetchSurvey/telemetry/fetchTelemetry.d.ts.map +1 -0
  31. package/dist/fetchSurvey/telemetry/fetchTelemetry.js +29 -0
  32. package/dist/fetchSurvey/telemetry/fetchTelemetry.js.map +1 -0
  33. package/dist/fetchSurvey/types.d.ts +54 -0
  34. package/dist/fetchSurvey/types.d.ts.map +1 -0
  35. package/dist/fetchSurvey/types.js +3 -0
  36. package/dist/fetchSurvey/types.js.map +1 -0
  37. package/dist/fetchSurvey/useFetchSurvey.d.ts +24 -0
  38. package/dist/fetchSurvey/useFetchSurvey.d.ts.map +1 -0
  39. package/dist/fetchSurvey/useFetchSurvey.js +115 -0
  40. package/dist/fetchSurvey/useFetchSurvey.js.map +1 -0
  41. package/dist/fetchSurvey/utils/cleaner.d.ts +7 -0
  42. package/dist/fetchSurvey/utils/cleaner.d.ts.map +1 -0
  43. package/dist/fetchSurvey/utils/cleaner.js +35 -0
  44. package/dist/fetchSurvey/utils/cleaner.js.map +1 -0
  45. package/dist/fetchSurvey/utils/constants.d.ts +10 -0
  46. package/dist/fetchSurvey/utils/constants.d.ts.map +1 -0
  47. package/dist/fetchSurvey/utils/constants.js +13 -0
  48. package/dist/fetchSurvey/utils/constants.js.map +1 -0
  49. package/dist/fetchSurvey/utils/extractSurveyLanguages.d.ts +17 -0
  50. package/dist/fetchSurvey/utils/extractSurveyLanguages.d.ts.map +1 -0
  51. package/dist/fetchSurvey/utils/extractSurveyLanguages.js +61 -0
  52. package/dist/fetchSurvey/utils/extractSurveyLanguages.js.map +1 -0
  53. package/dist/fetchSurvey/utils/index.d.ts +6 -0
  54. package/dist/fetchSurvey/utils/index.d.ts.map +1 -0
  55. package/dist/fetchSurvey/utils/index.js +22 -0
  56. package/dist/fetchSurvey/utils/index.js.map +1 -0
  57. package/dist/fetchSurvey/utils/mapSurveyPages.d.ts +12 -0
  58. package/dist/fetchSurvey/utils/mapSurveyPages.d.ts.map +1 -0
  59. package/dist/fetchSurvey/utils/mapSurveyPages.js +30 -0
  60. package/dist/fetchSurvey/utils/mapSurveyPages.js.map +1 -0
  61. package/dist/fetchSurvey/utils/mappers/index.d.ts +3 -0
  62. package/dist/fetchSurvey/utils/mappers/index.d.ts.map +1 -0
  63. package/dist/fetchSurvey/utils/mappers/index.js +19 -0
  64. package/dist/fetchSurvey/utils/mappers/index.js.map +1 -0
  65. package/dist/fetchSurvey/utils/mappers/questionMapper.d.ts +42 -0
  66. package/dist/fetchSurvey/utils/mappers/questionMapper.d.ts.map +1 -0
  67. package/dist/fetchSurvey/utils/mappers/questionMapper.js +183 -0
  68. package/dist/fetchSurvey/utils/mappers/questionMapper.js.map +1 -0
  69. package/dist/fetchSurvey/utils/mappers/surveyMapper.d.ts +36 -0
  70. package/dist/fetchSurvey/utils/mappers/surveyMapper.d.ts.map +1 -0
  71. package/dist/fetchSurvey/utils/mappers/surveyMapper.js +65 -0
  72. package/dist/fetchSurvey/utils/mappers/surveyMapper.js.map +1 -0
  73. package/dist/fetchSurvey/utils/url.d.ts +14 -0
  74. package/dist/fetchSurvey/utils/url.d.ts.map +1 -0
  75. package/dist/fetchSurvey/utils/url.js +23 -0
  76. package/dist/fetchSurvey/utils/url.js.map +1 -0
  77. package/dist/fetchSurvey/utils/validation.d.ts +15 -0
  78. package/dist/fetchSurvey/utils/validation.d.ts.map +1 -0
  79. package/dist/fetchSurvey/utils/validation.js +36 -0
  80. package/dist/fetchSurvey/utils/validation.js.map +1 -0
  81. package/dist/index.d.ts +3 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +6 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/logger/logger.d.ts +26 -0
  86. package/dist/logger/logger.d.ts.map +1 -0
  87. package/dist/logger/logger.js +57 -0
  88. package/dist/logger/logger.js.map +1 -0
  89. package/dist/queryClient.d.ts +3 -0
  90. package/dist/queryClient.d.ts.map +1 -0
  91. package/dist/queryClient.js +64 -0
  92. package/dist/queryClient.js.map +1 -0
  93. package/dist/submitSurvey/logger/resolutionLogger.d.ts +4 -0
  94. package/dist/submitSurvey/logger/resolutionLogger.d.ts.map +1 -0
  95. package/dist/submitSurvey/logger/resolutionLogger.js +16 -0
  96. package/dist/submitSurvey/logger/resolutionLogger.js.map +1 -0
  97. package/dist/submitSurvey/logger/submitLogger.d.ts +7 -0
  98. package/dist/submitSurvey/logger/submitLogger.d.ts.map +1 -0
  99. package/dist/submitSurvey/logger/submitLogger.js +43 -0
  100. package/dist/submitSurvey/logger/submitLogger.js.map +1 -0
  101. package/dist/submitSurvey/telemetry/submitTelemetry.d.ts +3 -0
  102. package/dist/submitSurvey/telemetry/submitTelemetry.d.ts.map +1 -0
  103. package/dist/submitSurvey/telemetry/submitTelemetry.js +30 -0
  104. package/dist/submitSurvey/telemetry/submitTelemetry.js.map +1 -0
  105. package/dist/submitSurvey/types.d.ts +37 -0
  106. package/dist/submitSurvey/types.d.ts.map +1 -0
  107. package/dist/submitSurvey/types.js +3 -0
  108. package/dist/submitSurvey/types.js.map +1 -0
  109. package/dist/submitSurvey/useSubmitResponse.d.ts +18 -0
  110. package/dist/submitSurvey/useSubmitResponse.d.ts.map +1 -0
  111. package/dist/submitSurvey/useSubmitResponse.js +101 -0
  112. package/dist/submitSurvey/useSubmitResponse.js.map +1 -0
  113. package/dist/submitSurvey/useSurveyPagination.d.ts +0 -0
  114. package/dist/submitSurvey/useSurveyPagination.js +1 -0
  115. package/dist/submitSurvey/utils/constants.d.ts +5 -0
  116. package/dist/submitSurvey/utils/constants.d.ts.map +1 -0
  117. package/dist/submitSurvey/utils/constants.js +8 -0
  118. package/dist/submitSurvey/utils/constants.js.map +1 -0
  119. package/dist/submitSurvey/utils/formatters.d.ts +12 -0
  120. package/dist/submitSurvey/utils/formatters.d.ts.map +1 -0
  121. package/dist/submitSurvey/utils/formatters.js +29 -0
  122. package/dist/submitSurvey/utils/formatters.js.map +1 -0
  123. package/dist/submitSurvey/utils/index.d.ts +5 -0
  124. package/dist/submitSurvey/utils/index.d.ts.map +1 -0
  125. package/dist/submitSurvey/utils/index.js +21 -0
  126. package/dist/submitSurvey/utils/index.js.map +1 -0
  127. package/dist/submitSurvey/utils/url.d.ts +9 -0
  128. package/dist/submitSurvey/utils/url.d.ts.map +1 -0
  129. package/dist/submitSurvey/utils/url.js +20 -0
  130. package/dist/submitSurvey/utils/url.js.map +1 -0
  131. package/dist/submitSurvey/utils/validation.d.ts +20 -0
  132. package/dist/submitSurvey/utils/validation.d.ts.map +1 -0
  133. package/dist/submitSurvey/utils/validation.js +43 -0
  134. package/dist/submitSurvey/utils/validation.js.map +1 -0
  135. package/dist/surveyPagination/actions/index.d.ts +5 -0
  136. package/dist/surveyPagination/actions/index.d.ts.map +1 -0
  137. package/dist/surveyPagination/actions/index.js +12 -0
  138. package/dist/surveyPagination/actions/index.js.map +1 -0
  139. package/dist/surveyPagination/actions/useOnBack.d.ts +3 -0
  140. package/dist/surveyPagination/actions/useOnBack.d.ts.map +1 -0
  141. package/dist/surveyPagination/actions/useOnBack.js +33 -0
  142. package/dist/surveyPagination/actions/useOnBack.js.map +1 -0
  143. package/dist/surveyPagination/actions/useOnChange.d.ts +3 -0
  144. package/dist/surveyPagination/actions/useOnChange.d.ts.map +1 -0
  145. package/dist/surveyPagination/actions/useOnChange.js +14 -0
  146. package/dist/surveyPagination/actions/useOnChange.js.map +1 -0
  147. package/dist/surveyPagination/actions/useOnNext.d.ts +3 -0
  148. package/dist/surveyPagination/actions/useOnNext.d.ts.map +1 -0
  149. package/dist/surveyPagination/actions/useOnNext.js +82 -0
  150. package/dist/surveyPagination/actions/useOnNext.js.map +1 -0
  151. package/dist/surveyPagination/actions/useOnSubmit.d.ts +3 -0
  152. package/dist/surveyPagination/actions/useOnSubmit.d.ts.map +1 -0
  153. package/dist/surveyPagination/actions/useOnSubmit.js +102 -0
  154. package/dist/surveyPagination/actions/useOnSubmit.js.map +1 -0
  155. package/dist/surveyPagination/dispatchers/index.d.ts +4 -0
  156. package/dist/surveyPagination/dispatchers/index.d.ts.map +1 -0
  157. package/dist/surveyPagination/dispatchers/index.js +10 -0
  158. package/dist/surveyPagination/dispatchers/index.js.map +1 -0
  159. package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.d.ts +6 -0
  160. package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.d.ts.map +1 -0
  161. package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.js +28 -0
  162. package/dist/surveyPagination/dispatchers/useCheckBacktrackChanges.js.map +1 -0
  163. package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.d.ts +4 -0
  164. package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.d.ts.map +1 -0
  165. package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.js +19 -0
  166. package/dist/surveyPagination/dispatchers/useTrackOptionalSkips.js.map +1 -0
  167. package/dist/surveyPagination/dispatchers/useTrackPageTime.d.ts +4 -0
  168. package/dist/surveyPagination/dispatchers/useTrackPageTime.d.ts.map +1 -0
  169. package/dist/surveyPagination/dispatchers/useTrackPageTime.js +12 -0
  170. package/dist/surveyPagination/dispatchers/useTrackPageTime.js.map +1 -0
  171. package/dist/surveyPagination/effects/index.d.ts +3 -0
  172. package/dist/surveyPagination/effects/index.d.ts.map +1 -0
  173. package/dist/surveyPagination/effects/index.js +8 -0
  174. package/dist/surveyPagination/effects/index.js.map +1 -0
  175. package/dist/surveyPagination/effects/useResetPageStartTime.d.ts +3 -0
  176. package/dist/surveyPagination/effects/useResetPageStartTime.d.ts.map +1 -0
  177. package/dist/surveyPagination/effects/useResetPageStartTime.js +11 -0
  178. package/dist/surveyPagination/effects/useResetPageStartTime.js.map +1 -0
  179. package/dist/surveyPagination/effects/useSessionUnmountSummary.d.ts +2 -0
  180. package/dist/surveyPagination/effects/useSessionUnmountSummary.d.ts.map +1 -0
  181. package/dist/surveyPagination/effects/useSessionUnmountSummary.js +32 -0
  182. package/dist/surveyPagination/effects/useSessionUnmountSummary.js.map +1 -0
  183. package/dist/surveyPagination/effects/useTrackMaxVisitedPage.d.ts +3 -0
  184. package/dist/surveyPagination/effects/useTrackMaxVisitedPage.d.ts.map +1 -0
  185. package/dist/surveyPagination/effects/useTrackMaxVisitedPage.js +13 -0
  186. package/dist/surveyPagination/effects/useTrackMaxVisitedPage.js.map +1 -0
  187. package/dist/surveyPagination/effects/useUpdateAnalyticsContext.d.ts +2 -0
  188. package/dist/surveyPagination/effects/useUpdateAnalyticsContext.d.ts.map +1 -0
  189. package/dist/surveyPagination/effects/useUpdateAnalyticsContext.js +15 -0
  190. package/dist/surveyPagination/effects/useUpdateAnalyticsContext.js.map +1 -0
  191. package/dist/surveyPagination/logger/navigationLogger.d.ts +7 -0
  192. package/dist/surveyPagination/logger/navigationLogger.d.ts.map +1 -0
  193. package/dist/surveyPagination/logger/navigationLogger.js +28 -0
  194. package/dist/surveyPagination/logger/navigationLogger.js.map +1 -0
  195. package/dist/surveyPagination/logger/validationLogger.d.ts +5 -0
  196. package/dist/surveyPagination/logger/validationLogger.d.ts.map +1 -0
  197. package/dist/surveyPagination/logger/validationLogger.js +20 -0
  198. package/dist/surveyPagination/logger/validationLogger.js.map +1 -0
  199. package/dist/surveyPagination/telemetry/pageTelemetry.d.ts +3 -0
  200. package/dist/surveyPagination/telemetry/pageTelemetry.d.ts.map +1 -0
  201. package/dist/surveyPagination/telemetry/pageTelemetry.js +25 -0
  202. package/dist/surveyPagination/telemetry/pageTelemetry.js.map +1 -0
  203. package/dist/surveyPagination/telemetry/sessionTelemetry.d.ts +8 -0
  204. package/dist/surveyPagination/telemetry/sessionTelemetry.d.ts.map +1 -0
  205. package/dist/surveyPagination/telemetry/sessionTelemetry.js +43 -0
  206. package/dist/surveyPagination/telemetry/sessionTelemetry.js.map +1 -0
  207. package/dist/surveyPagination/types.d.ts +43 -0
  208. package/dist/surveyPagination/types.d.ts.map +1 -0
  209. package/dist/surveyPagination/types.js +3 -0
  210. package/dist/surveyPagination/types.js.map +1 -0
  211. package/dist/surveyPagination/useSurveyPagination.d.ts +28 -0
  212. package/dist/surveyPagination/useSurveyPagination.d.ts.map +1 -0
  213. package/dist/surveyPagination/useSurveyPagination.js +93 -0
  214. package/dist/surveyPagination/useSurveyPagination.js.map +1 -0
  215. package/dist/surveyPagination/utils/index.d.ts +3 -0
  216. package/dist/surveyPagination/utils/index.d.ts.map +1 -0
  217. package/dist/surveyPagination/utils/index.js +19 -0
  218. package/dist/surveyPagination/utils/index.js.map +1 -0
  219. package/dist/surveyPagination/utils/scroll.d.ts +25 -0
  220. package/dist/surveyPagination/utils/scroll.d.ts.map +1 -0
  221. package/dist/surveyPagination/utils/scroll.js +67 -0
  222. package/dist/surveyPagination/utils/scroll.js.map +1 -0
  223. package/dist/surveyPagination/utils/validation.d.ts +24 -0
  224. package/dist/surveyPagination/utils/validation.d.ts.map +1 -0
  225. package/dist/surveyPagination/utils/validation.js +53 -0
  226. package/dist/surveyPagination/utils/validation.js.map +1 -0
  227. package/dist/surveyProgress/useSurveyProgress.d.ts +21 -0
  228. package/dist/surveyProgress/useSurveyProgress.d.ts.map +1 -0
  229. package/dist/surveyProgress/useSurveyProgress.js +34 -0
  230. package/dist/surveyProgress/useSurveyProgress.js.map +1 -0
  231. package/dist/surveyProgress/utils/index.d.ts +2 -0
  232. package/dist/surveyProgress/utils/index.d.ts.map +1 -0
  233. package/dist/surveyProgress/utils/index.js +18 -0
  234. package/dist/surveyProgress/utils/index.js.map +1 -0
  235. package/dist/surveyProgress/utils/progress.d.ts +27 -0
  236. package/dist/surveyProgress/utils/progress.d.ts.map +1 -0
  237. package/dist/surveyProgress/utils/progress.js +60 -0
  238. package/dist/surveyProgress/utils/progress.js.map +1 -0
  239. package/dist/surveySDK/constants.d.ts +10 -0
  240. package/dist/surveySDK/constants.d.ts.map +1 -0
  241. package/dist/surveySDK/constants.js +14 -0
  242. package/dist/surveySDK/constants.js.map +1 -0
  243. package/dist/surveySDK/types.d.ts +28 -0
  244. package/dist/surveySDK/types.d.ts.map +1 -0
  245. package/dist/surveySDK/types.js +3 -0
  246. package/dist/surveySDK/types.js.map +1 -0
  247. package/dist/surveySDK/useSurveySDK.d.ts +32 -0
  248. package/dist/surveySDK/useSurveySDK.d.ts.map +1 -0
  249. package/dist/surveySDK/useSurveySDK.js +85 -0
  250. package/dist/surveySDK/useSurveySDK.js.map +1 -0
  251. package/dist/useFetchSurvey.d.ts +73 -0
  252. package/dist/useFetchSurvey.d.ts.map +1 -0
  253. package/dist/useFetchSurvey.js +202 -0
  254. package/dist/useFetchSurvey.js.map +1 -0
  255. package/dist/useSubmitResponse.d.ts +40 -0
  256. package/dist/useSubmitResponse.d.ts.map +1 -0
  257. package/dist/useSubmitResponse.js +146 -0
  258. package/dist/useSubmitResponse.js.map +1 -0
  259. package/package.json +24 -0
  260. package/src/analytics/analyticsTracker.ts +48 -0
  261. package/src/analytics/types.ts +80 -0
  262. package/src/cli/deploy.ts +205 -0
  263. package/src/cli/index.ts +33 -0
  264. package/src/fetchSurvey/internalTypes.ts +80 -0
  265. package/src/fetchSurvey/logger/fetchLogger.ts +34 -0
  266. package/src/fetchSurvey/logger/mapperLogger.ts +13 -0
  267. package/src/fetchSurvey/telemetry/fetchTelemetry.ts +26 -0
  268. package/src/fetchSurvey/types.ts +82 -0
  269. package/src/fetchSurvey/useFetchSurvey.ts +126 -0
  270. package/src/fetchSurvey/utils/constants.ts +11 -0
  271. package/src/fetchSurvey/utils/extractSurveyLanguages.ts +63 -0
  272. package/src/fetchSurvey/utils/index.ts +7 -0
  273. package/src/fetchSurvey/utils/mapSurveyPages.ts +35 -0
  274. package/src/fetchSurvey/utils/mappers/index.ts +2 -0
  275. package/src/fetchSurvey/utils/mappers/questionMapper.ts +213 -0
  276. package/src/fetchSurvey/utils/mappers/surveyMapper.ts +69 -0
  277. package/src/fetchSurvey/utils/url.ts +21 -0
  278. package/src/index.ts +6 -0
  279. package/src/logger/logger.ts +71 -0
  280. package/src/queryClient.ts +67 -0
  281. package/src/submitSurvey/logger/resolutionLogger.ts +13 -0
  282. package/src/submitSurvey/logger/submitLogger.ts +51 -0
  283. package/src/submitSurvey/telemetry/submitTelemetry.ts +33 -0
  284. package/src/submitSurvey/types.ts +51 -0
  285. package/src/submitSurvey/useSubmitResponse.ts +111 -0
  286. package/src/submitSurvey/utils/constants.ts +4 -0
  287. package/src/submitSurvey/utils/formatters.ts +33 -0
  288. package/src/submitSurvey/utils/index.ts +4 -0
  289. package/src/submitSurvey/utils/url.ts +17 -0
  290. package/src/submitSurvey/utils/validation.ts +48 -0
  291. package/src/surveyPagination/actions/index.ts +4 -0
  292. package/src/surveyPagination/actions/useOnBack.ts +37 -0
  293. package/src/surveyPagination/actions/useOnChange.ts +16 -0
  294. package/src/surveyPagination/actions/useOnNext.ts +99 -0
  295. package/src/surveyPagination/actions/useOnSubmit.ts +137 -0
  296. package/src/surveyPagination/dispatchers/index.ts +3 -0
  297. package/src/surveyPagination/dispatchers/useCheckBacktrackChanges.ts +35 -0
  298. package/src/surveyPagination/dispatchers/useTrackOptionalSkips.ts +21 -0
  299. package/src/surveyPagination/dispatchers/useTrackPageTime.ts +13 -0
  300. package/src/surveyPagination/effects/index.ts +2 -0
  301. package/src/surveyPagination/effects/useResetPageStartTime.ts +10 -0
  302. package/src/surveyPagination/effects/useTrackMaxVisitedPage.ts +12 -0
  303. package/src/surveyPagination/logger/navigationLogger.ts +25 -0
  304. package/src/surveyPagination/logger/validationLogger.ts +17 -0
  305. package/src/surveyPagination/telemetry/pageTelemetry.ts +22 -0
  306. package/src/surveyPagination/telemetry/sessionTelemetry.ts +55 -0
  307. package/src/surveyPagination/types.ts +42 -0
  308. package/src/surveyPagination/useSurveyPagination.ts +109 -0
  309. package/src/surveyPagination/utils/index.ts +2 -0
  310. package/src/surveyPagination/utils/scroll.ts +62 -0
  311. package/src/surveyPagination/utils/validation.ts +62 -0
  312. package/src/surveyProgress/useSurveyProgress.ts +42 -0
  313. package/src/surveyProgress/utils/index.ts +1 -0
  314. package/src/surveyProgress/utils/progress.ts +61 -0
  315. package/src/surveySDK/constants.ts +9 -0
  316. package/src/surveySDK/types.ts +22 -0
  317. package/src/surveySDK/useSurveySDK.ts +109 -0
  318. package/tsconfig.json +13 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatAnswers = formatAnswers;
4
+ exports.buildSubmitRequestBody = buildSubmitRequestBody;
5
+ exports.mapSubmitResponse = mapSubmitResponse;
6
+ exports.buildExternalSubmitUrl = buildExternalSubmitUrl;
7
+ exports.useSubmitResponse = useSubmitResponse;
8
+ const react_1 = require("react");
9
+ const SUBMIT_BASE_URL = "https://custom-p0.feedbook.me/api/feedback/survey/responseV2";
10
+ const CLIENT_SUBMIT_PATH = "/api/survey/submit";
11
+ function formatAnswers(answers) {
12
+ const result = {};
13
+ for (const key in answers) {
14
+ if (answers[key] === undefined || answers[key] === null)
15
+ continue;
16
+ result[key] = [String(answers[key])];
17
+ }
18
+ return result;
19
+ }
20
+ function buildSubmitRequestBody(answers, questions, token) {
21
+ const questionToAnswers = {};
22
+ const optionLevelAnswers = {};
23
+ for (const question of questions) {
24
+ const value = answers[question.id];
25
+ if (value === undefined || value === null)
26
+ continue;
27
+ const formatted = String(value);
28
+ questionToAnswers[question.submitQuestionId] = [formatted];
29
+ if (question.optionLevelQuestionId) {
30
+ optionLevelAnswers[question.optionLevelQuestionId] = [formatted];
31
+ }
32
+ }
33
+ return {
34
+ questionToAnswers,
35
+ quesIdVsAttachmentDetails: {},
36
+ optionLevelAnswers,
37
+ conjointTasks: [],
38
+ token,
39
+ };
40
+ }
41
+ function mapSubmitResponse(apiResponse, answers, questions) {
42
+ const raw = apiResponse;
43
+ const requestAnswers = buildSubmitRequestBody(answers, questions, "");
44
+ const submittedAnswers = questions
45
+ .filter((question) => answers[question.id] !== undefined)
46
+ .map((question) => {
47
+ const value = String(answers[question.id]);
48
+ const label = question.options.find((option) => String(option.value) === value)?.label ?? value;
49
+ return {
50
+ questionId: question.id,
51
+ text: question.text,
52
+ value,
53
+ label,
54
+ };
55
+ });
56
+ return {
57
+ responseId: raw.responseId ?? "",
58
+ answers: submittedAnswers,
59
+ questionToAnswers: requestAnswers.questionToAnswers,
60
+ optionLevelAnswers: requestAnswers.optionLevelAnswers,
61
+ raw: apiResponse,
62
+ };
63
+ }
64
+ function buildExternalSubmitUrl(instanceId, surveyLanguage = "en") {
65
+ const params = new URLSearchParams({
66
+ instanceId,
67
+ surveySubmitted: "true",
68
+ surveyLanguage,
69
+ });
70
+ return `${SUBMIT_BASE_URL}?${params.toString()}`;
71
+ }
72
+ function buildSubmitUrl(instanceId, surveyLanguage = "en") {
73
+ const params = new URLSearchParams({
74
+ instanceId,
75
+ surveySubmitted: "true",
76
+ surveyLanguage,
77
+ });
78
+ return `${CLIENT_SUBMIT_PATH}?${params.toString()}`;
79
+ }
80
+ function isSubmitInput(input) {
81
+ return (typeof input === "object" &&
82
+ input !== null &&
83
+ "instanceId" in input &&
84
+ "answers" in input);
85
+ }
86
+ function resolveSubmitInput(input, session, survey) {
87
+ if (isSubmitInput(input)) {
88
+ return {
89
+ ...input,
90
+ token: input.token ?? "",
91
+ surveyLanguage: input.surveyLanguage ?? session?.language ?? "en",
92
+ questions: input.questions ?? survey?.questions ?? [],
93
+ };
94
+ }
95
+ if (!session?.instanceId) {
96
+ throw new Error("Survey session not ready. Fetch survey before submitting.");
97
+ }
98
+ return {
99
+ answers: input,
100
+ instanceId: session.instanceId,
101
+ token: session.token ?? "",
102
+ surveyLanguage: session.language ?? "en",
103
+ questions: survey?.questions ?? [],
104
+ };
105
+ }
106
+ function useSubmitResponse(session, survey) {
107
+ const [data, setData] = (0, react_1.useState)(null);
108
+ const [loading, setLoading] = (0, react_1.useState)(false);
109
+ const [error, setError] = (0, react_1.useState)(null);
110
+ const submit = (0, react_1.useCallback)(async (input) => {
111
+ const resolved = resolveSubmitInput(input, session, survey);
112
+ console.log("SUBMIT INPUT:", resolved);
113
+ setLoading(true);
114
+ setError(null);
115
+ try {
116
+ const surveyLanguage = resolved.surveyLanguage ?? "en";
117
+ const requestBody = buildSubmitRequestBody(resolved.answers, resolved.questions ?? [], resolved.token);
118
+ console.log("FORMATTED BODY:", requestBody);
119
+ const response = await fetch(buildExternalSubmitUrl(resolved.instanceId, surveyLanguage), {
120
+ method: "POST",
121
+ headers: { "Content-Type": "application/json" },
122
+ body: JSON.stringify(requestBody),
123
+ });
124
+ const responseData = await response.json().catch(() => null);
125
+ if (!response.ok) {
126
+ throw new Error(`Submit failed (${response.status}): ${JSON.stringify(responseData)}`);
127
+ }
128
+ console.log("API RESPONSE:", responseData);
129
+ const mapped = mapSubmitResponse(responseData, resolved.answers, resolved.questions ?? []);
130
+ console.log("MAPPED SUBMIT RESULT:", mapped);
131
+ setData(mapped);
132
+ return mapped;
133
+ }
134
+ catch (err) {
135
+ const submitError = err instanceof Error ? err : new Error(String(err));
136
+ console.error("SUBMIT ERROR:", submitError);
137
+ setError(submitError);
138
+ throw submitError;
139
+ }
140
+ finally {
141
+ setLoading(false);
142
+ }
143
+ }, [session, survey]);
144
+ return { submit, data, loading, error };
145
+ }
146
+ //# sourceMappingURL=useSubmitResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSubmitResponse.js","sourceRoot":"","sources":["../src/useSubmitResponse.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@explorer02/cfm-survey-sdk",
3
+ "version": "0.0.1",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "bin": {
7
+ "cfm-sdk": "./dist/cli/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "lint": "tsc --noEmit",
12
+ "prepare": "yarn build"
13
+ },
14
+ "peerDependencies": {
15
+ "react": "^18.0.0 || ^19.0.0",
16
+ "@tanstack/react-query": "^5.0.0"
17
+ },
18
+ "devDependencies": {
19
+ "@types/react": "^19.1.6",
20
+ "@tanstack/react-query": "^5.0.0",
21
+ "react": "^19.1.0",
22
+ "typescript": "^5.8.3"
23
+ }
24
+ }
@@ -0,0 +1,48 @@
1
+ import { sdkLogger } from '../logger/logger';
2
+ import type { AnalyticsEvent } from './types';
3
+
4
+ export function trackEvent(event: AnalyticsEvent) {
5
+ if (event.eventName === 'survey_session_summary') {
6
+ const {
7
+ completed,
8
+ totalDurationMs,
9
+ maxVisitedPageIndex,
10
+ totalQuestionsCount,
11
+ answeredQuestionsCount,
12
+ skippedQuestionsCount,
13
+ skippedQuestionIds,
14
+ validationErrorsCount,
15
+ backtrackCount,
16
+ } = event.metadata;
17
+
18
+ // Always log to console with Heading as ANALYTICS
19
+ sdkLogger.analytics(`Event: ${event.eventName} - SESSION SUMMARY TABLE:`);
20
+
21
+ const summaryTable = [
22
+ { Metric: 'Completion Status', Value: completed ? 'COMPLETED ✅' : 'ABANDONED ❌' },
23
+ { Metric: 'Total Time Spent', Value: `${(totalDurationMs / 1000).toFixed(2)} seconds` },
24
+ { Metric: 'Max Page Index Reached', Value: `${maxVisitedPageIndex}` },
25
+ { Metric: 'Total Questions', Value: totalQuestionsCount },
26
+ { Metric: 'Answered Questions', Value: answeredQuestionsCount },
27
+ { Metric: 'Skipped Optional Questions', Value: skippedQuestionsCount },
28
+ { Metric: 'Skipped Question IDs', Value: skippedQuestionIds.join(', ') || 'None' },
29
+ { Metric: 'Validation Errors Triggered', Value: validationErrorsCount },
30
+ { Metric: 'Backtrack Count', Value: backtrackCount },
31
+ {
32
+ Metric: 'Validation Error History',
33
+ Value:
34
+ event.metadata.validationHistory
35
+ ?.map(
36
+ h =>
37
+ `[Page ${h.pageIndex}] Attempt ${h.attemptNumber}: ${Object.keys(h.errors).join(', ')}`
38
+ )
39
+ .join(' | ') || 'NO Validation Erros Occurred',
40
+ },
41
+ ];
42
+
43
+ console.table(summaryTable);
44
+ } else {
45
+ // Always log to console with Heading as ANALYTICS
46
+ sdkLogger.analytics(`Event: ${event.eventName}`, event.metadata);
47
+ }
48
+ }
@@ -0,0 +1,80 @@
1
+ export type AnalyticsEvent =
2
+ | {
3
+ eventName: 'survey_fetch_latency';
4
+ metadata: {
5
+ durationMs: number;
6
+ status: number | string;
7
+ success: boolean;
8
+ url: string;
9
+ payloadSize?: string;
10
+ };
11
+ }
12
+ | {
13
+ eventName: 'survey_submit_latency';
14
+ metadata: {
15
+ durationMs: number;
16
+ status: number | string;
17
+ success: boolean;
18
+ url: string;
19
+ requestSize?: string;
20
+ responseSize?: string;
21
+ };
22
+ }
23
+ | {
24
+ eventName: 'api_error';
25
+ metadata: {
26
+ apiName: string;
27
+ status: number | string;
28
+ url: string;
29
+ errorMessage: string;
30
+ };
31
+ }
32
+ | {
33
+ eventName: 'optional_question_skipped';
34
+ metadata: {
35
+ questionId: string;
36
+ pageIndex: number;
37
+ };
38
+ }
39
+ | {
40
+ eventName: 'backtrack_revisited';
41
+ metadata: {
42
+ fromPageIndex: number;
43
+ toPageIndex: number;
44
+ changedAnswers: Record<string, { oldValue: any; newValue: any }>;
45
+ };
46
+ }
47
+ | {
48
+ eventName: 'validation_error';
49
+ metadata: {
50
+ pageIndex: number;
51
+ errors: Record<string, string>;
52
+ attemptNumber: number;
53
+ };
54
+ }
55
+ | {
56
+ eventName: 'page_time_spent';
57
+ metadata: {
58
+ pageIndex: number;
59
+ durationMs: number;
60
+ };
61
+ }
62
+ | {
63
+ eventName: 'survey_session_summary';
64
+ metadata: {
65
+ maxVisitedPageIndex: number;
66
+ totalDurationMs: number;
67
+ completed: boolean;
68
+ totalQuestionsCount: number;
69
+ answeredQuestionsCount: number;
70
+ skippedQuestionsCount: number;
71
+ skippedQuestionIds: string[];
72
+ validationErrorsCount: number;
73
+ backtrackCount: number;
74
+ validationHistory: Array<{
75
+ pageIndex: number;
76
+ errors: Record<string, string>;
77
+ attemptNumber: number;
78
+ }>;
79
+ };
80
+ };
@@ -0,0 +1,205 @@
1
+ import { execSync, spawn } from 'child_process';
2
+ import readline from 'readline/promises';
3
+ import { stdin as input, stdout as output } from 'process';
4
+ import path from 'path';
5
+
6
+ const colors = {
7
+ reset: '\x1b[0m',
8
+ bold: '\x1b[1m',
9
+ green: '\x1b[32m',
10
+ red: '\x1b[31m',
11
+ cyan: '\x1b[36m',
12
+ yellow: '\x1b[33m',
13
+ dim: '\x1b[2m',
14
+ };
15
+
16
+ // Simple interactive prompt using Node.js built-in readline
17
+ async function askQuestion(query: string): Promise<string> {
18
+ const rl = readline.createInterface({ input, output });
19
+ try {
20
+ return (await rl.question(query)).trim();
21
+ } finally {
22
+ rl.close();
23
+ }
24
+ }
25
+
26
+ // Check if a shell executable is available in the user's system PATH
27
+ function hasCommand(cmd: string): boolean {
28
+ try {
29
+ const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `command -v ${cmd}`;
30
+ execSync(checkCmd, { stdio: 'ignore' });
31
+ return true;
32
+ } catch {
33
+ return false;
34
+ }
35
+ }
36
+
37
+ // Execute a command synchronously and capture output/return code
38
+ function runCommandSync(cmd: string, args: string[]): boolean {
39
+ try {
40
+ const fullCmd = `${cmd} ${args.join(' ')}`;
41
+ execSync(fullCmd, { stdio: 'inherit', shell: true } as any);
42
+ return true;
43
+ } catch {
44
+ return false;
45
+ }
46
+ }
47
+
48
+ // Spawn an interactive command that inherits stdin/stdout/stderr
49
+ function runCommandInteractive(cmd: string, args: string[]): Promise<number | null> {
50
+ return new Promise((resolve) => {
51
+ const child = spawn(cmd, args, {
52
+ stdio: 'inherit',
53
+ shell: true,
54
+ });
55
+
56
+ child.on('close', (code) => {
57
+ resolve(code);
58
+ });
59
+ });
60
+ }
61
+
62
+ // Main deployment wrapper
63
+ export async function runDeployment() {
64
+ console.log(`\n${colors.bold}${colors.cyan}🚀 Starting CFM Vercel Deployment...${colors.reset}\n`);
65
+
66
+ // --- STEP 1: NODE.JS VERSION CHECK & AUTOMATED UPGRADE ---
67
+ const majorVersion = parseInt(process.version.slice(1).split('.')[0], 10);
68
+ console.log(`${colors.dim}Step 1/4: Checking Node.js version (current: ${process.version})...${colors.reset}`);
69
+
70
+ if (majorVersion < 18) {
71
+ console.log(`⚠️ ${colors.yellow}Outdated Node.js version detected. v18.0.0 or higher is required.${colors.reset}`);
72
+
73
+ const isWin = process.platform === 'win32';
74
+ const isMac = process.platform === 'darwin';
75
+
76
+ if (isWin) {
77
+ if (hasCommand('winget')) {
78
+ console.log(`\n📦 ${colors.green}winget package manager found! Installing Node.js v18+ in background...${colors.reset}`);
79
+ const success = runCommandSync('winget', ['upgrade', 'OpenJS.NodeJS', '--silent', '--accept-package-agreements', '--accept-source-agreements']);
80
+ if (success) {
81
+ console.log(`\n✔ ${colors.green}Node.js installation triggered successfully. Please restart your terminal/command-prompt for changes to take effect.${colors.reset}\n`);
82
+ process.exit(0);
83
+ } else {
84
+ console.log(`\n❌ ${colors.red}winget update failed. Please update Node.js manually at https://nodejs.org/${colors.reset}\n`);
85
+ process.exit(1);
86
+ }
87
+ } else {
88
+ console.log(`\n❌ ${colors.red}winget package manager is not installed on this system.${colors.reset}`);
89
+ console.log(`${colors.bold}👉 To proceed, please either:${colors.reset}`);
90
+ console.log(` 1. Install winget (App Installer) from the Microsoft Store.`);
91
+ console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/\n`);
92
+ process.exit(1);
93
+ }
94
+ } else if (isMac) {
95
+ if (hasCommand('brew')) {
96
+ console.log(`\n📦 ${colors.green}Homebrew package manager found! Installing Node.js v18+ in background...${colors.reset}`);
97
+ const success = runCommandSync('brew', ['install', 'node']);
98
+ if (success) {
99
+ console.log(`\n✔ ${colors.green}Node.js installed successfully via Homebrew.${colors.reset}\n`);
100
+ } else {
101
+ console.log(`\n❌ ${colors.red}Homebrew installation failed. Please install Node.js manually at https://nodejs.org/${colors.reset}\n`);
102
+ process.exit(1);
103
+ }
104
+ } else {
105
+ console.log(`\n❌ ${colors.red}Homebrew package manager (brew) is not installed on this system.${colors.reset}`);
106
+ console.log(`${colors.bold}👉 To proceed, please either:${colors.reset}`);
107
+ console.log(` 1. Install Homebrew by running the following command in your terminal:`);
108
+ console.log(` ${colors.cyan}/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"${colors.reset}`);
109
+ console.log(` 2. Or manually download and install Node.js (v18+) from: https://nodejs.org/\n`);
110
+ process.exit(1);
111
+ }
112
+ } else {
113
+ console.log(`\n❌ ${colors.red}Please install or update Node.js to v18+ using your system's package manager.${colors.reset}\n`);
114
+ process.exit(1);
115
+ }
116
+ } else {
117
+ console.log(`✔ ${colors.green}Node.js version (v${majorVersion}) is sufficient.${colors.reset}`);
118
+ }
119
+
120
+ // --- STEP 2: VERCEL CLI VERIFICATION ---
121
+ console.log(`\n${colors.dim}Step 2/4: Checking Vercel CLI...${colors.reset}`);
122
+ let vercelCmd = 'vercel';
123
+ let useNpx = false;
124
+
125
+ if (!hasCommand('vercel')) {
126
+ console.log(`❓ ${colors.yellow}Vercel CLI was not found on your system.${colors.reset}`);
127
+ const answer = await askQuestion(`👉 Would you like to install Vercel CLI globally? (Y/n): `);
128
+
129
+ if (answer.toLowerCase() === 'y' || answer === '') {
130
+ console.log(`\n📥 ${colors.cyan}Installing Vercel CLI globally... (npm install -g vercel)${colors.reset}`);
131
+ const success = runCommandSync('npm', ['install', '-g', 'vercel']);
132
+ if (success && hasCommand('vercel')) {
133
+ console.log(`✔ ${colors.green}Vercel CLI installed successfully!${colors.reset}`);
134
+ } else {
135
+ console.log(`\n⚠️ ${colors.yellow}Global installation failed or permissions restricted.${colors.reset}`);
136
+ console.log(`ℹ ${colors.dim}Falling back: Running Vercel dynamically via npx.${colors.reset}`);
137
+ vercelCmd = 'npx --yes vercel';
138
+ useNpx = true;
139
+ }
140
+ } else {
141
+ console.log(`ℹ ${colors.dim}Skipping global installation. Running Vercel dynamically via npx.${colors.reset}`);
142
+ vercelCmd = 'npx --yes vercel';
143
+ useNpx = true;
144
+ }
145
+ } else {
146
+ console.log(`✔ ${colors.green}Vercel CLI is installed!${colors.reset}`);
147
+ }
148
+
149
+ // --- STEP 3: VERCEL LOGIN CHECK ---
150
+ console.log(`\n${colors.dim}Step 3/4: Checking Vercel Login...${colors.reset}`);
151
+
152
+ // Use VERCEL_TOKEN if available
153
+ const hasToken = !!process.env.VERCEL_TOKEN;
154
+ let loggedIn = false;
155
+
156
+ if (hasToken) {
157
+ console.log(`✔ ${colors.green}VERCEL_TOKEN environment variable detected. Skipping login check.${colors.reset}`);
158
+ loggedIn = true;
159
+ } else {
160
+ try {
161
+ // Execute vercel whoami to check active session
162
+ const checkCmd = useNpx ? 'npx --yes vercel whoami' : 'vercel whoami';
163
+ execSync(checkCmd, { stdio: 'ignore', shell: true } as any);
164
+ loggedIn = true;
165
+ console.log(`✔ ${colors.green}Logged in!${colors.reset}`);
166
+ } catch {
167
+ loggedIn = false;
168
+ }
169
+ }
170
+
171
+ if (!loggedIn) {
172
+ console.log(`🔑 ${colors.yellow}Not logged in to Vercel.${colors.reset}`);
173
+ await askQuestion(`👉 Press [Enter] to login to Vercel... `);
174
+
175
+ const loginArgs = ['login'];
176
+ const loginCmd = useNpx ? 'npx' : 'vercel';
177
+ const finalArgs = useNpx ? ['--yes', 'vercel', ...loginArgs] : loginArgs;
178
+
179
+ const exitCode = await runCommandInteractive(loginCmd, finalArgs);
180
+ if (exitCode !== 0) {
181
+ throw new Error('Vercel login failed or was aborted.');
182
+ }
183
+ console.log(`\n✔ ${colors.green}Logged in successfully!${colors.reset}`);
184
+ }
185
+
186
+ // --- STEP 4: PRODUCTION DEPLOYMENT ---
187
+ console.log(`\n${colors.dim}Step 4/4: Deploying project to production...${colors.reset}`);
188
+
189
+ const deployArgs = ['--prod', '--yes'];
190
+ if (hasToken) {
191
+ deployArgs.push('--token', process.env.VERCEL_TOKEN!);
192
+ }
193
+
194
+ const deployCmd = useNpx ? 'npx' : 'vercel';
195
+ const finalDeployArgs = useNpx ? ['--yes', 'vercel', ...deployArgs] : deployArgs;
196
+
197
+ console.log(`${colors.cyan}⚡ Running deployment in: ${process.cwd()}${colors.reset}\n`);
198
+
199
+ const deployExitCode = await runCommandInteractive(deployCmd, finalDeployArgs);
200
+ if (deployExitCode !== 0) {
201
+ throw new Error('Vercel deployment failed.');
202
+ }
203
+
204
+ console.log(`\n${colors.bold}${colors.green}🎉 Deployment completed successfully!${colors.reset}\n`);
205
+ }
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { runDeployment } from './deploy';
4
+
5
+ const args = process.argv.slice(2);
6
+ const command = args[0];
7
+
8
+ const colors = {
9
+ reset: '\x1b[0m',
10
+ bold: '\x1b[1m',
11
+ green: '\x1b[32m',
12
+ red: '\x1b[31m',
13
+ cyan: '\x1b[36m',
14
+ yellow: '\x1b[33m',
15
+ };
16
+
17
+ async function main() {
18
+ if (command === 'deploy') {
19
+ try {
20
+ await runDeployment();
21
+ } catch (error: any) {
22
+ console.error(`\n${colors.red}❌ Error: ${error.message || error}${colors.reset}`);
23
+ process.exit(1);
24
+ }
25
+ } else {
26
+ console.log(`\n${colors.bold}${colors.cyan}CFM SDK CLI Tool${colors.reset}`);
27
+ console.log(`\nUsage:`);
28
+ console.log(` npx cfm-sdk deploy - Deploy the current project to Vercel`);
29
+ process.exit(0);
30
+ }
31
+ }
32
+
33
+ main();
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Raw API option/answer detail received from the remote survey config service.
3
+ */
4
+ export type ApiAnswerDetail = {
5
+ // Option text label
6
+ answerText?: string;
7
+ // Whether the option should be hidden from UI render
8
+ hidden?: boolean;
9
+ // Additional metadata, such as hint/label flags for the scale boundaries
10
+ additional?: { isHintText?: boolean };
11
+ // Translations keyed by language code
12
+ translations?: Record<
13
+ string,
14
+ {
15
+ answerText?: string;
16
+ }
17
+ >;
18
+ };
19
+
20
+ /**
21
+ * Raw API question model representing the survey structure returned by the remote service.
22
+ */
23
+ export type ApiQuestion = {
24
+ // Backend question unique ID
25
+ id?: string;
26
+ // Type identifier from API (e.g. "RATING", "SCALE", "TEXTFIELD", "MCQ")
27
+ answerType?: string;
28
+ // Primary text string for the question
29
+ questionText?: string;
30
+ // Rich HTML content representing the question text (fallback)
31
+ questionRichText?: string;
32
+ // List of answer options and scale hints
33
+ answerDetails?: ApiAnswerDetail[];
34
+ // Translations keyed by language code
35
+ translations?: Record<
36
+ string,
37
+ {
38
+ questionText?: string;
39
+ questionRichText?: string;
40
+ }
41
+ >;
42
+ // Configuration details for validation and other key-value settings
43
+ questionConfigs?: {
44
+ key: string;
45
+ value?: string[];
46
+ childConfigs?: {
47
+ key: string;
48
+ value?: string[];
49
+ }[];
50
+ translations?: Record<
51
+ string,
52
+ {
53
+ value?: string[];
54
+ valueRichText?: string[];
55
+ }
56
+ >;
57
+ }[];
58
+ };
59
+
60
+ /**
61
+ * Root envelope returned by the remote survey API endpoint.
62
+ */
63
+ export type ApiResponse = {
64
+ // Unique distribution instance token/identifier
65
+ instanceId?: string;
66
+ // Localized survey language code
67
+ surveyLanguage?: string;
68
+ // Flat questions list if provided directly
69
+ questions?: ApiQuestion[];
70
+ // Multi-page survey page/question configurations
71
+ pages?: { questions?: ApiQuestion[] }[];
72
+ // Direct Data Transfer Object wrapping the full details from custom survey service
73
+ cfmSurveyDTO?: {
74
+ id?: string;
75
+ baseLanguage?: string;
76
+ surveyPages?: {
77
+ questionHolders?: { question?: ApiQuestion }[];
78
+ }[];
79
+ };
80
+ };
@@ -0,0 +1,34 @@
1
+ import { sdkLogger } from '../../logger/logger';
2
+
3
+ export function logFetchStart(url: string): void {
4
+ sdkLogger.info('Starting survey layout API fetch...', { url });
5
+ }
6
+
7
+ export function logFetchPerfFailure(durationMs: number, status: number | string, url: string): void {
8
+ sdkLogger.perf({
9
+ apiName: 'GET Survey Layout',
10
+ durationMs,
11
+ status,
12
+ url,
13
+ success: false,
14
+ });
15
+ }
16
+
17
+ export function logFetchPerfSuccess(durationMs: number, status: number, url: string, payloadSize: string): void {
18
+ sdkLogger.perf({
19
+ apiName: 'GET Survey Layout',
20
+ durationMs,
21
+ status,
22
+ url,
23
+ payloadSize,
24
+ success: true,
25
+ });
26
+ }
27
+
28
+ export function logFetchSuccess(apiResponse: any): void {
29
+ sdkLogger.success('Raw survey layout fetched successfully', apiResponse);
30
+ }
31
+
32
+ export function logFetchError(err: any): void {
33
+ sdkLogger.error('Failed to fetch raw survey layout', err);
34
+ }
@@ -0,0 +1,13 @@
1
+ import { sdkLogger } from '../../logger/logger';
2
+
3
+ export function logMapWarning(): void {
4
+ sdkLogger.warn('Cannot map survey: apiResponse is null or undefined');
5
+ }
6
+
7
+ export function logMapSuccess(mappedSurvey: any): void {
8
+ sdkLogger.success('Mapped survey layout successfully', mappedSurvey);
9
+ }
10
+
11
+ export function logMapError(err: any): void {
12
+ sdkLogger.error('Failed to map survey layout', err);
13
+ }