@amplitude/wizard 1.0.0-beta.2 → 1.0.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 (391) hide show
  1. package/README.md +171 -74
  2. package/dist/bin.js +338 -222
  3. package/dist/src/lib/agent-interface.js +64 -9
  4. package/dist/src/lib/agent-runner.js +1 -10
  5. package/dist/src/lib/api.d.ts +22 -4
  6. package/dist/src/lib/api.js +114 -12
  7. package/dist/src/lib/commandments.js +14 -1
  8. package/dist/src/lib/constants.d.ts +6 -5
  9. package/dist/src/lib/constants.js +13 -13
  10. package/dist/src/lib/credential-resolution.d.ts +45 -0
  11. package/dist/src/lib/credential-resolution.js +311 -0
  12. package/dist/src/lib/exit-codes.d.ts +10 -0
  13. package/dist/src/lib/exit-codes.js +12 -0
  14. package/dist/src/lib/health-checks/statuspage.d.ts +1 -0
  15. package/dist/src/lib/health-checks/statuspage.js +5 -1
  16. package/dist/src/lib/mode-config.d.ts +14 -0
  17. package/dist/src/lib/mode-config.js +14 -0
  18. package/dist/src/lib/session-checkpoint.d.ts +27 -0
  19. package/dist/src/lib/session-checkpoint.js +134 -0
  20. package/dist/src/lib/wizard-session.d.ts +44 -1
  21. package/dist/src/lib/wizard-session.js +70 -14
  22. package/dist/src/lib/wizard-tools.js +19 -4
  23. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.d.ts +3 -0
  24. package/dist/src/steps/add-mcp-server-to-clients/clients/claude.js +6 -0
  25. package/dist/src/steps/add-mcp-server-to-clients/clients/cursor.js +3 -1
  26. package/dist/src/ui/agent-ui.d.ts +91 -0
  27. package/dist/src/ui/agent-ui.js +277 -0
  28. package/dist/src/ui/logging-ui.js +1 -1
  29. package/dist/src/ui/tui/App.d.ts +12 -0
  30. package/dist/src/ui/tui/App.js +29 -18
  31. package/dist/src/ui/tui/components/AmplitudeLogo.js +16 -17
  32. package/dist/src/ui/tui/components/AmplitudeTextLogo.d.ts +0 -2
  33. package/dist/src/ui/tui/components/AmplitudeTextLogo.js +53 -18
  34. package/dist/src/ui/tui/components/BrailleSpinner.d.ts +8 -0
  35. package/dist/src/ui/tui/components/BrailleSpinner.js +15 -0
  36. package/dist/src/ui/tui/components/ConsoleView.d.ts +8 -11
  37. package/dist/src/ui/tui/components/ConsoleView.js +51 -34
  38. package/dist/src/ui/tui/components/HeaderBar.d.ts +12 -0
  39. package/dist/src/ui/tui/components/HeaderBar.js +17 -0
  40. package/dist/src/ui/tui/components/JourneyStepper.d.ts +16 -0
  41. package/dist/src/ui/tui/components/JourneyStepper.js +83 -0
  42. package/dist/src/ui/tui/components/KeyHintBar.d.ts +19 -0
  43. package/dist/src/ui/tui/components/KeyHintBar.js +20 -0
  44. package/dist/src/ui/tui/console-commands.d.ts +1 -2
  45. package/dist/src/ui/tui/console-commands.js +48 -7
  46. package/dist/src/ui/tui/flows.d.ts +1 -1
  47. package/dist/src/ui/tui/flows.js +1 -1
  48. package/dist/src/ui/tui/hooks/useAsyncEffect.d.ts +15 -0
  49. package/dist/src/ui/tui/hooks/useAsyncEffect.js +35 -0
  50. package/dist/src/ui/tui/hooks/useWizardStore.d.ts +9 -0
  51. package/dist/src/ui/tui/hooks/useWizardStore.js +11 -0
  52. package/dist/src/ui/tui/ink-ui.js +1 -1
  53. package/dist/src/ui/tui/primitives/DissolveTransition.js +4 -5
  54. package/dist/src/ui/tui/primitives/EventPlanViewer.d.ts +3 -1
  55. package/dist/src/ui/tui/primitives/EventPlanViewer.js +8 -3
  56. package/dist/src/ui/tui/primitives/ProgressList.js +1 -1
  57. package/dist/src/ui/tui/primitives/SlashCommandInput.js +19 -4
  58. package/dist/src/ui/tui/primitives/SplitView.d.ts +2 -1
  59. package/dist/src/ui/tui/primitives/SplitView.js +10 -2
  60. package/dist/src/ui/tui/primitives/TabContainer.js +10 -2
  61. package/dist/src/ui/tui/primitives/index.d.ts +0 -1
  62. package/dist/src/ui/tui/primitives/index.js +0 -1
  63. package/dist/src/ui/tui/router.js +1 -1
  64. package/dist/src/ui/tui/screen-registry.d.ts +0 -7
  65. package/dist/src/ui/tui/screen-registry.js +13 -4
  66. package/dist/src/ui/tui/screens/ActivationOptionsScreen.d.ts +2 -2
  67. package/dist/src/ui/tui/screens/ActivationOptionsScreen.js +8 -8
  68. package/dist/src/ui/tui/screens/AuthScreen.js +57 -27
  69. package/dist/src/ui/tui/screens/ChecklistScreen.d.ts +2 -12
  70. package/dist/src/ui/tui/screens/ChecklistScreen.js +22 -33
  71. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.d.ts +3 -12
  72. package/dist/src/ui/tui/screens/DataIngestionCheckScreen.js +109 -39
  73. package/dist/src/ui/tui/screens/DataSetupScreen.d.ts +3 -3
  74. package/dist/src/ui/tui/screens/DataSetupScreen.js +17 -10
  75. package/dist/src/ui/tui/screens/IntroScreen.d.ts +5 -3
  76. package/dist/src/ui/tui/screens/IntroScreen.js +132 -41
  77. package/dist/src/ui/tui/screens/LoginScreen.d.ts +1 -1
  78. package/dist/src/ui/tui/screens/LoginScreen.js +4 -4
  79. package/dist/src/ui/tui/screens/LogoutScreen.d.ts +4 -2
  80. package/dist/src/ui/tui/screens/LogoutScreen.js +17 -5
  81. package/dist/src/ui/tui/screens/McpScreen.d.ts +4 -4
  82. package/dist/src/ui/tui/screens/McpScreen.js +25 -17
  83. package/dist/src/ui/tui/screens/OutageScreen.d.ts +1 -1
  84. package/dist/src/ui/tui/screens/OutageScreen.js +5 -5
  85. package/dist/src/ui/tui/screens/OutroScreen.d.ts +5 -0
  86. package/dist/src/ui/tui/screens/OutroScreen.js +21 -14
  87. package/dist/src/ui/tui/screens/RegionSelectScreen.js +15 -13
  88. package/dist/src/ui/tui/screens/RunScreen.d.ts +7 -5
  89. package/dist/src/ui/tui/screens/RunScreen.js +102 -157
  90. package/dist/src/ui/tui/screens/SettingsOverrideScreen.d.ts +1 -1
  91. package/dist/src/ui/tui/screens/SettingsOverrideScreen.js +6 -5
  92. package/dist/src/ui/tui/screens/SetupScreen.d.ts +1 -1
  93. package/dist/src/ui/tui/screens/SetupScreen.js +7 -7
  94. package/dist/src/ui/tui/screens/SlackScreen.d.ts +2 -2
  95. package/dist/src/ui/tui/screens/SlackScreen.js +60 -35
  96. package/dist/src/ui/tui/session-constants.d.ts +41 -0
  97. package/dist/src/ui/tui/session-constants.js +38 -0
  98. package/dist/src/ui/tui/start-tui.d.ts +3 -1
  99. package/dist/src/ui/tui/start-tui.js +14 -10
  100. package/dist/src/ui/tui/store.d.ts +2 -1
  101. package/dist/src/ui/tui/store.js +33 -7
  102. package/dist/src/ui/tui/styles.d.ts +75 -19
  103. package/dist/src/ui/tui/styles.js +101 -19
  104. package/dist/src/ui/tui/utils/classify-error.d.ts +14 -0
  105. package/dist/src/ui/tui/utils/classify-error.js +90 -0
  106. package/dist/src/ui/tui/utils/diagnostics.d.ts +21 -0
  107. package/dist/src/ui/tui/utils/diagnostics.js +72 -0
  108. package/dist/src/ui/tui/utils/with-retry.d.ts +12 -0
  109. package/dist/src/ui/tui/utils/with-retry.js +32 -0
  110. package/dist/src/ui/tui/utils/with-timeout.d.ts +10 -0
  111. package/dist/src/ui/tui/utils/with-timeout.js +24 -0
  112. package/dist/src/utils/ampli-settings.d.ts +1 -1
  113. package/dist/src/utils/ampli-settings.js +15 -5
  114. package/dist/src/utils/api-key-store.js +5 -5
  115. package/dist/src/utils/atomic-write.d.ts +15 -0
  116. package/dist/src/utils/atomic-write.js +34 -0
  117. package/dist/src/utils/setup-utils.js +2 -2
  118. package/dist/src/utils/token-refresh.d.ts +22 -0
  119. package/dist/src/utils/token-refresh.js +79 -0
  120. package/dist/src/utils/wizard-abort.js +6 -1
  121. package/package.json +6 -6
  122. package/skills/instrumentation/add-analytics-instrumentation/SKILL.md +142 -0
  123. package/skills/instrumentation/diff-intake/SKILL.md +128 -0
  124. package/skills/instrumentation/discover-analytics-patterns/SKILL.md +185 -0
  125. package/skills/instrumentation/discover-event-surfaces/SKILL.md +322 -0
  126. package/skills/instrumentation/discover-event-surfaces/references/best-practices.md +563 -0
  127. package/skills/instrumentation/instrument-events/SKILL.md +169 -0
  128. package/skills/instrumentation/instrument-events/references/best-practices.md +563 -0
  129. package/skills/integration/integration-android/SKILL.md +49 -0
  130. package/skills/integration/integration-android/references/EXAMPLE.md +1977 -0
  131. package/skills/integration/integration-android/references/amplitude-quickstart.md +1845 -0
  132. package/skills/integration/integration-android/references/analytics.md +1778 -0
  133. package/skills/integration/integration-android/references/basic-integration-1.0-begin.md +43 -0
  134. package/skills/integration/integration-android/references/basic-integration-1.1-edit.md +35 -0
  135. package/skills/integration/integration-android/references/basic-integration-1.2-revise.md +23 -0
  136. package/skills/integration/integration-android/references/basic-integration-1.3-conclude.md +57 -0
  137. package/skills/integration/integration-angular/SKILL.md +49 -0
  138. package/skills/integration/integration-angular/references/EXAMPLE.md +899 -0
  139. package/skills/integration/integration-angular/references/amplitude-quickstart.md +1845 -0
  140. package/skills/integration/integration-angular/references/basic-integration-1.0-begin.md +43 -0
  141. package/skills/integration/integration-angular/references/basic-integration-1.1-edit.md +35 -0
  142. package/skills/integration/integration-angular/references/basic-integration-1.2-revise.md +23 -0
  143. package/skills/integration/integration-angular/references/basic-integration-1.3-conclude.md +57 -0
  144. package/skills/integration/integration-angular/references/browser-sdk-2.md +4680 -0
  145. package/skills/integration/integration-astro-hybrid/SKILL.md +56 -0
  146. package/skills/integration/integration-astro-hybrid/references/EXAMPLE.md +1095 -0
  147. package/skills/integration/integration-astro-hybrid/references/amplitude-quickstart.md +1845 -0
  148. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.0-begin.md +43 -0
  149. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.1-edit.md +35 -0
  150. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.2-revise.md +23 -0
  151. package/skills/integration/integration-astro-hybrid/references/basic-integration-1.3-conclude.md +57 -0
  152. package/skills/integration/integration-astro-hybrid/references/browser-sdk-2.md +4680 -0
  153. package/skills/integration/integration-astro-ssr/SKILL.md +52 -0
  154. package/skills/integration/integration-astro-ssr/references/EXAMPLE.md +1106 -0
  155. package/skills/integration/integration-astro-ssr/references/amplitude-quickstart.md +1845 -0
  156. package/skills/integration/integration-astro-ssr/references/basic-integration-1.0-begin.md +43 -0
  157. package/skills/integration/integration-astro-ssr/references/basic-integration-1.1-edit.md +35 -0
  158. package/skills/integration/integration-astro-ssr/references/basic-integration-1.2-revise.md +23 -0
  159. package/skills/integration/integration-astro-ssr/references/basic-integration-1.3-conclude.md +57 -0
  160. package/skills/integration/integration-astro-ssr/references/browser-sdk-2.md +4680 -0
  161. package/skills/integration/integration-astro-static/SKILL.md +49 -0
  162. package/skills/integration/integration-astro-static/references/EXAMPLE.md +910 -0
  163. package/skills/integration/integration-astro-static/references/amplitude-quickstart.md +1845 -0
  164. package/skills/integration/integration-astro-static/references/basic-integration-1.0-begin.md +43 -0
  165. package/skills/integration/integration-astro-static/references/basic-integration-1.1-edit.md +35 -0
  166. package/skills/integration/integration-astro-static/references/basic-integration-1.2-revise.md +23 -0
  167. package/skills/integration/integration-astro-static/references/basic-integration-1.3-conclude.md +57 -0
  168. package/skills/integration/integration-astro-static/references/browser-sdk-2.md +4680 -0
  169. package/skills/integration/integration-astro-view-transitions/SKILL.md +51 -0
  170. package/skills/integration/integration-astro-view-transitions/references/EXAMPLE.md +979 -0
  171. package/skills/integration/integration-astro-view-transitions/references/amplitude-quickstart.md +1845 -0
  172. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.0-begin.md +43 -0
  173. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.1-edit.md +35 -0
  174. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.2-revise.md +23 -0
  175. package/skills/integration/integration-astro-view-transitions/references/basic-integration-1.3-conclude.md +57 -0
  176. package/skills/integration/integration-astro-view-transitions/references/browser-sdk-2.md +4680 -0
  177. package/skills/integration/integration-django/SKILL.md +57 -0
  178. package/skills/integration/integration-django/references/EXAMPLE.md +1005 -0
  179. package/skills/integration/integration-django/references/amplitude-quickstart.md +1845 -0
  180. package/skills/integration/integration-django/references/basic-integration-1.0-begin.md +43 -0
  181. package/skills/integration/integration-django/references/basic-integration-1.1-edit.md +35 -0
  182. package/skills/integration/integration-django/references/basic-integration-1.2-revise.md +23 -0
  183. package/skills/integration/integration-django/references/basic-integration-1.3-conclude.md +57 -0
  184. package/skills/integration/integration-django/references/python.md +1424 -0
  185. package/skills/integration/integration-expo/SKILL.md +53 -0
  186. package/skills/integration/integration-expo/references/EXAMPLE.md +1291 -0
  187. package/skills/integration/integration-expo/references/amplitude-quickstart.md +1845 -0
  188. package/skills/integration/integration-expo/references/basic-integration-1.0-begin.md +43 -0
  189. package/skills/integration/integration-expo/references/basic-integration-1.1-edit.md +35 -0
  190. package/skills/integration/integration-expo/references/basic-integration-1.2-revise.md +23 -0
  191. package/skills/integration/integration-expo/references/basic-integration-1.3-conclude.md +57 -0
  192. package/skills/integration/integration-expo/references/react-native-sdk.md +2819 -0
  193. package/skills/integration/integration-fastapi/SKILL.md +57 -0
  194. package/skills/integration/integration-fastapi/references/EXAMPLE.md +1389 -0
  195. package/skills/integration/integration-fastapi/references/amplitude-quickstart.md +1845 -0
  196. package/skills/integration/integration-fastapi/references/basic-integration-1.0-begin.md +43 -0
  197. package/skills/integration/integration-fastapi/references/basic-integration-1.1-edit.md +35 -0
  198. package/skills/integration/integration-fastapi/references/basic-integration-1.2-revise.md +23 -0
  199. package/skills/integration/integration-fastapi/references/basic-integration-1.3-conclude.md +57 -0
  200. package/skills/integration/integration-fastapi/references/python.md +1424 -0
  201. package/skills/integration/integration-flask/SKILL.md +56 -0
  202. package/skills/integration/integration-flask/references/EXAMPLE.md +1130 -0
  203. package/skills/integration/integration-flask/references/amplitude-quickstart.md +1845 -0
  204. package/skills/integration/integration-flask/references/basic-integration-1.0-begin.md +43 -0
  205. package/skills/integration/integration-flask/references/basic-integration-1.1-edit.md +35 -0
  206. package/skills/integration/integration-flask/references/basic-integration-1.2-revise.md +23 -0
  207. package/skills/integration/integration-flask/references/basic-integration-1.3-conclude.md +57 -0
  208. package/skills/integration/integration-flask/references/python.md +1424 -0
  209. package/skills/integration/integration-javascript_node/SKILL.md +54 -0
  210. package/skills/integration/integration-javascript_node/references/EXAMPLE.md +365 -0
  211. package/skills/integration/integration-javascript_node/references/amplitude-quickstart.md +1845 -0
  212. package/skills/integration/integration-javascript_node/references/analytics.md +1778 -0
  213. package/skills/integration/integration-javascript_node/references/basic-integration-1.0-begin.md +43 -0
  214. package/skills/integration/integration-javascript_node/references/basic-integration-1.1-edit.md +35 -0
  215. package/skills/integration/integration-javascript_node/references/basic-integration-1.2-revise.md +23 -0
  216. package/skills/integration/integration-javascript_node/references/basic-integration-1.3-conclude.md +57 -0
  217. package/skills/integration/integration-javascript_web/SKILL.md +58 -0
  218. package/skills/integration/integration-javascript_web/references/EXAMPLE.md +451 -0
  219. package/skills/integration/integration-javascript_web/references/amplitude-quickstart.md +1845 -0
  220. package/skills/integration/integration-javascript_web/references/basic-integration-1.0-begin.md +43 -0
  221. package/skills/integration/integration-javascript_web/references/basic-integration-1.1-edit.md +35 -0
  222. package/skills/integration/integration-javascript_web/references/basic-integration-1.2-revise.md +23 -0
  223. package/skills/integration/integration-javascript_web/references/basic-integration-1.3-conclude.md +57 -0
  224. package/skills/integration/integration-javascript_web/references/browser-sdk-2.md +4680 -0
  225. package/skills/integration/integration-laravel/SKILL.md +52 -0
  226. package/skills/integration/integration-laravel/references/EXAMPLE.md +2039 -0
  227. package/skills/integration/integration-laravel/references/amplitude-quickstart.md +1845 -0
  228. package/skills/integration/integration-laravel/references/analytics.md +1778 -0
  229. package/skills/integration/integration-laravel/references/basic-integration-1.0-begin.md +43 -0
  230. package/skills/integration/integration-laravel/references/basic-integration-1.1-edit.md +35 -0
  231. package/skills/integration/integration-laravel/references/basic-integration-1.2-revise.md +23 -0
  232. package/skills/integration/integration-laravel/references/basic-integration-1.3-conclude.md +57 -0
  233. package/skills/integration/integration-nextjs-app-router/SKILL.md +54 -0
  234. package/skills/integration/integration-nextjs-app-router/references/EXAMPLE.md +673 -0
  235. package/skills/integration/integration-nextjs-app-router/references/amplitude-quickstart.md +1845 -0
  236. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.0-begin.md +43 -0
  237. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.1-edit.md +35 -0
  238. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.2-revise.md +23 -0
  239. package/skills/integration/integration-nextjs-app-router/references/basic-integration-1.3-conclude.md +57 -0
  240. package/skills/integration/integration-nextjs-app-router/references/browser-sdk-2.md +4680 -0
  241. package/skills/integration/integration-nextjs-pages-router/SKILL.md +54 -0
  242. package/skills/integration/integration-nextjs-pages-router/references/EXAMPLE.md +735 -0
  243. package/skills/integration/integration-nextjs-pages-router/references/amplitude-quickstart.md +1845 -0
  244. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.0-begin.md +43 -0
  245. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.1-edit.md +35 -0
  246. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.2-revise.md +23 -0
  247. package/skills/integration/integration-nextjs-pages-router/references/basic-integration-1.3-conclude.md +57 -0
  248. package/skills/integration/integration-nextjs-pages-router/references/browser-sdk-2.md +4680 -0
  249. package/skills/integration/integration-nuxt-3.6/SKILL.md +46 -0
  250. package/skills/integration/integration-nuxt-3.6/references/EXAMPLE.md +8422 -0
  251. package/skills/integration/integration-nuxt-3.6/references/amplitude-quickstart.md +1845 -0
  252. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.0-begin.md +43 -0
  253. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.1-edit.md +35 -0
  254. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.2-revise.md +23 -0
  255. package/skills/integration/integration-nuxt-3.6/references/basic-integration-1.3-conclude.md +57 -0
  256. package/skills/integration/integration-nuxt-3.6/references/browser-sdk-2.md +4680 -0
  257. package/skills/integration/integration-nuxt-4/SKILL.md +46 -0
  258. package/skills/integration/integration-nuxt-4/references/EXAMPLE.md +8670 -0
  259. package/skills/integration/integration-nuxt-4/references/amplitude-quickstart.md +1845 -0
  260. package/skills/integration/integration-nuxt-4/references/basic-integration-1.0-begin.md +43 -0
  261. package/skills/integration/integration-nuxt-4/references/basic-integration-1.1-edit.md +35 -0
  262. package/skills/integration/integration-nuxt-4/references/basic-integration-1.2-revise.md +23 -0
  263. package/skills/integration/integration-nuxt-4/references/basic-integration-1.3-conclude.md +57 -0
  264. package/skills/integration/integration-nuxt-4/references/browser-sdk-2.md +4680 -0
  265. package/skills/integration/integration-python/SKILL.md +53 -0
  266. package/skills/integration/integration-python/references/EXAMPLE.md +445 -0
  267. package/skills/integration/integration-python/references/amplitude-quickstart.md +1845 -0
  268. package/skills/integration/integration-python/references/basic-integration-1.0-begin.md +43 -0
  269. package/skills/integration/integration-python/references/basic-integration-1.1-edit.md +35 -0
  270. package/skills/integration/integration-python/references/basic-integration-1.2-revise.md +23 -0
  271. package/skills/integration/integration-python/references/basic-integration-1.3-conclude.md +57 -0
  272. package/skills/integration/integration-python/references/python.md +1424 -0
  273. package/skills/integration/integration-react-native/SKILL.md +49 -0
  274. package/skills/integration/integration-react-native/references/EXAMPLE.md +2253 -0
  275. package/skills/integration/integration-react-native/references/amplitude-quickstart.md +1845 -0
  276. package/skills/integration/integration-react-native/references/basic-integration-1.0-begin.md +43 -0
  277. package/skills/integration/integration-react-native/references/basic-integration-1.1-edit.md +35 -0
  278. package/skills/integration/integration-react-native/references/basic-integration-1.2-revise.md +23 -0
  279. package/skills/integration/integration-react-native/references/basic-integration-1.3-conclude.md +57 -0
  280. package/skills/integration/integration-react-native/references/react-native-sdk.md +2819 -0
  281. package/skills/integration/integration-react-react-router-6/SKILL.md +53 -0
  282. package/skills/integration/integration-react-react-router-6/references/EXAMPLE.md +570 -0
  283. package/skills/integration/integration-react-react-router-6/references/amplitude-quickstart.md +1845 -0
  284. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.0-begin.md +43 -0
  285. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.1-edit.md +35 -0
  286. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.2-revise.md +23 -0
  287. package/skills/integration/integration-react-react-router-6/references/basic-integration-1.3-conclude.md +57 -0
  288. package/skills/integration/integration-react-react-router-6/references/browser-sdk-2.md +4680 -0
  289. package/skills/integration/integration-react-react-router-7-data/SKILL.md +53 -0
  290. package/skills/integration/integration-react-react-router-7-data/references/EXAMPLE.md +830 -0
  291. package/skills/integration/integration-react-react-router-7-data/references/amplitude-quickstart.md +1845 -0
  292. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.0-begin.md +43 -0
  293. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.1-edit.md +35 -0
  294. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.2-revise.md +23 -0
  295. package/skills/integration/integration-react-react-router-7-data/references/basic-integration-1.3-conclude.md +57 -0
  296. package/skills/integration/integration-react-react-router-7-data/references/browser-sdk-2.md +4680 -0
  297. package/skills/integration/integration-react-react-router-7-declarative/SKILL.md +53 -0
  298. package/skills/integration/integration-react-react-router-7-declarative/references/EXAMPLE.md +609 -0
  299. package/skills/integration/integration-react-react-router-7-declarative/references/amplitude-quickstart.md +1845 -0
  300. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.0-begin.md +43 -0
  301. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.1-edit.md +35 -0
  302. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.2-revise.md +23 -0
  303. package/skills/integration/integration-react-react-router-7-declarative/references/basic-integration-1.3-conclude.md +57 -0
  304. package/skills/integration/integration-react-react-router-7-declarative/references/browser-sdk-2.md +4680 -0
  305. package/skills/integration/integration-react-react-router-7-framework/SKILL.md +53 -0
  306. package/skills/integration/integration-react-react-router-7-framework/references/EXAMPLE.md +1081 -0
  307. package/skills/integration/integration-react-react-router-7-framework/references/amplitude-quickstart.md +1845 -0
  308. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.0-begin.md +43 -0
  309. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.1-edit.md +35 -0
  310. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.2-revise.md +23 -0
  311. package/skills/integration/integration-react-react-router-7-framework/references/basic-integration-1.3-conclude.md +57 -0
  312. package/skills/integration/integration-react-react-router-7-framework/references/browser-sdk-2.md +4680 -0
  313. package/skills/integration/integration-react-tanstack-router-code-based/SKILL.md +57 -0
  314. package/skills/integration/integration-react-tanstack-router-code-based/references/EXAMPLE.md +659 -0
  315. package/skills/integration/integration-react-tanstack-router-code-based/references/amplitude-quickstart.md +1845 -0
  316. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.0-begin.md +43 -0
  317. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.1-edit.md +35 -0
  318. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.2-revise.md +23 -0
  319. package/skills/integration/integration-react-tanstack-router-code-based/references/basic-integration-1.3-conclude.md +57 -0
  320. package/skills/integration/integration-react-tanstack-router-code-based/references/browser-sdk-2.md +4680 -0
  321. package/skills/integration/integration-react-tanstack-router-file-based/SKILL.md +57 -0
  322. package/skills/integration/integration-react-tanstack-router-file-based/references/EXAMPLE.md +777 -0
  323. package/skills/integration/integration-react-tanstack-router-file-based/references/amplitude-quickstart.md +1845 -0
  324. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.0-begin.md +43 -0
  325. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.1-edit.md +35 -0
  326. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.2-revise.md +23 -0
  327. package/skills/integration/integration-react-tanstack-router-file-based/references/basic-integration-1.3-conclude.md +57 -0
  328. package/skills/integration/integration-react-tanstack-router-file-based/references/browser-sdk-2.md +4680 -0
  329. package/skills/integration/integration-react-vite/SKILL.md +53 -0
  330. package/skills/integration/integration-react-vite/references/EXAMPLE.md +542 -0
  331. package/skills/integration/integration-react-vite/references/amplitude-quickstart.md +1845 -0
  332. package/skills/integration/integration-react-vite/references/basic-integration-1.0-begin.md +43 -0
  333. package/skills/integration/integration-react-vite/references/basic-integration-1.1-edit.md +35 -0
  334. package/skills/integration/integration-react-vite/references/basic-integration-1.2-revise.md +23 -0
  335. package/skills/integration/integration-react-vite/references/basic-integration-1.3-conclude.md +57 -0
  336. package/skills/integration/integration-react-vite/references/browser-sdk-2.md +4680 -0
  337. package/skills/integration/integration-ruby/SKILL.md +50 -0
  338. package/skills/integration/integration-ruby/references/EXAMPLE.md +420 -0
  339. package/skills/integration/integration-ruby/references/amplitude-quickstart.md +1845 -0
  340. package/skills/integration/integration-ruby/references/analytics.md +1778 -0
  341. package/skills/integration/integration-ruby/references/basic-integration-1.0-begin.md +43 -0
  342. package/skills/integration/integration-ruby/references/basic-integration-1.1-edit.md +35 -0
  343. package/skills/integration/integration-ruby/references/basic-integration-1.2-revise.md +23 -0
  344. package/skills/integration/integration-ruby/references/basic-integration-1.3-conclude.md +57 -0
  345. package/skills/integration/integration-ruby-on-rails/SKILL.md +55 -0
  346. package/skills/integration/integration-ruby-on-rails/references/EXAMPLE.md +1013 -0
  347. package/skills/integration/integration-ruby-on-rails/references/amplitude-quickstart.md +1845 -0
  348. package/skills/integration/integration-ruby-on-rails/references/analytics.md +1778 -0
  349. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.0-begin.md +43 -0
  350. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.1-edit.md +35 -0
  351. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.2-revise.md +23 -0
  352. package/skills/integration/integration-ruby-on-rails/references/basic-integration-1.3-conclude.md +57 -0
  353. package/skills/integration/integration-sveltekit/SKILL.md +47 -0
  354. package/skills/integration/integration-sveltekit/references/EXAMPLE.md +14121 -0
  355. package/skills/integration/integration-sveltekit/references/amplitude-quickstart.md +1845 -0
  356. package/skills/integration/integration-sveltekit/references/basic-integration-1.0-begin.md +43 -0
  357. package/skills/integration/integration-sveltekit/references/basic-integration-1.1-edit.md +35 -0
  358. package/skills/integration/integration-sveltekit/references/basic-integration-1.2-revise.md +23 -0
  359. package/skills/integration/integration-sveltekit/references/basic-integration-1.3-conclude.md +57 -0
  360. package/skills/integration/integration-sveltekit/references/browser-sdk-2.md +4680 -0
  361. package/skills/integration/integration-swift/SKILL.md +49 -0
  362. package/skills/integration/integration-swift/references/EXAMPLE.md +660 -0
  363. package/skills/integration/integration-swift/references/amplitude-quickstart.md +1845 -0
  364. package/skills/integration/integration-swift/references/analytics.md +1778 -0
  365. package/skills/integration/integration-swift/references/basic-integration-1.0-begin.md +43 -0
  366. package/skills/integration/integration-swift/references/basic-integration-1.1-edit.md +35 -0
  367. package/skills/integration/integration-swift/references/basic-integration-1.2-revise.md +23 -0
  368. package/skills/integration/integration-swift/references/basic-integration-1.3-conclude.md +57 -0
  369. package/skills/integration/integration-tanstack-start/SKILL.md +58 -0
  370. package/skills/integration/integration-tanstack-start/references/EXAMPLE.md +998 -0
  371. package/skills/integration/integration-tanstack-start/references/amplitude-quickstart.md +1845 -0
  372. package/skills/integration/integration-tanstack-start/references/basic-integration-1.0-begin.md +43 -0
  373. package/skills/integration/integration-tanstack-start/references/basic-integration-1.1-edit.md +35 -0
  374. package/skills/integration/integration-tanstack-start/references/basic-integration-1.2-revise.md +23 -0
  375. package/skills/integration/integration-tanstack-start/references/basic-integration-1.3-conclude.md +57 -0
  376. package/skills/integration/integration-tanstack-start/references/browser-sdk-2.md +4680 -0
  377. package/skills/integration/integration-vue-3/SKILL.md +46 -0
  378. package/skills/integration/integration-vue-3/references/EXAMPLE.md +846 -0
  379. package/skills/integration/integration-vue-3/references/amplitude-quickstart.md +1845 -0
  380. package/skills/integration/integration-vue-3/references/basic-integration-1.0-begin.md +43 -0
  381. package/skills/integration/integration-vue-3/references/basic-integration-1.1-edit.md +35 -0
  382. package/skills/integration/integration-vue-3/references/basic-integration-1.2-revise.md +23 -0
  383. package/skills/integration/integration-vue-3/references/basic-integration-1.3-conclude.md +57 -0
  384. package/skills/integration/integration-vue-3/references/browser-sdk-2.md +4680 -0
  385. package/skills/taxonomy/amplitude-quickstart-taxonomy-agent/SKILL.md +228 -0
  386. package/dist/src/ui/tui/components/TitleBar.d.ts +0 -8
  387. package/dist/src/ui/tui/components/TitleBar.js +0 -27
  388. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.d.ts +0 -7
  389. package/dist/src/ui/tui/primitives/KagiSmallWebViewer.js +0 -101
  390. package/dist/src/utils/anthropic-status.d.ts +0 -17
  391. package/dist/src/utils/anthropic-status.js +0 -51
@@ -0,0 +1,910 @@
1
+ # Amplitude Astro (Static) Example Project
2
+
3
+ Repository: https://github.com/amplitude/context-hub
4
+ Path: basics/astro-static
5
+
6
+ ---
7
+
8
+ ## README.md
9
+
10
+ # Amplitude Astro Static Example
11
+
12
+ This is an [Astro](https://astro.build/) static site (SSG) example demonstrating Amplitude integration with product analytics.
13
+
14
+ ### Amplitude SDKs
15
+
16
+ This static site uses only the [Browser Unified SDK (npm)](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#unified-sdk-npm). [`@amplitude/unified`](https://www.npmjs.com/package/@amplitude/unified) is bundled in `src/components/amplitude.astro`; `initAll` runs on the client. [Initialize the Unified SDK](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#initialize-the-unified-sdk) documents that call as initializing every product bundled with Unified npm. See [Unified SDK configuration](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#configuration) for `analytics`, `sessionReplay`, `experiment`, and `engagement`. The `experiment` block is **Feature Experiment** (`@amplitude/experiment-js-client`). Amplitude’s [product support table](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#product-support-by-installation-method) lists **Web Experiment** (`@amplitude/experiment-tag`, including the visual editor) for the [CDN script](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#unified-script-cdn), not Unified **npm**.
17
+
18
+ There is no server SDK in this sample. For Node or API routes, use [`@amplitude/analytics-node`](https://www.npmjs.com/package/@amplitude/analytics-node) (see [astro-ssr](../astro-ssr)).
19
+
20
+ The layout assigns the unified namespace to `window.amplitude` so `is:inline` scripts can call `track`, `setUserId`, and `reset` without importing the package on every page (see [accessing SDK features](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#access-sdk-features) in the official doc).
21
+
22
+ ## Features
23
+
24
+ - **Product analytics**: Login and burrito consideration events
25
+ - **Simple auth flow**: Demo login using localStorage
26
+
27
+ ## Getting started
28
+
29
+ ### 1. Install dependencies
30
+
31
+ ```bash
32
+ pnpm install
33
+ ```
34
+
35
+ ### 2. Configure environment variables
36
+
37
+ Create a `.env` file in the project root:
38
+
39
+ ```bash
40
+ PUBLIC_AMPLITUDE_API_KEY=your_amplitude_api_key
41
+ ```
42
+
43
+ `PUBLIC_` exposes the variable to the browser. Get your API key from [Amplitude project settings](https://app.amplitude.com).
44
+
45
+ ### 3. Run the development server
46
+
47
+ ```bash
48
+ pnpm dev
49
+ ```
50
+
51
+ Open `http://localhost:4321` in your browser.
52
+
53
+ ## Project structure
54
+
55
+ ```text
56
+ src/
57
+ components/
58
+ amplitude.astro # initAll() + window.amplitude for inline scripts
59
+ Header.astro # Logout; track + reset
60
+ layouts/
61
+ AmplitudeLayout.astro
62
+ lib/
63
+ auth.ts
64
+ pages/
65
+ index.astro # Login; setUserId + track('User Logged In')
66
+ burrito.astro # track('Burrito Considered', …)
67
+ profile.astro
68
+ styles/
69
+ global.css
70
+ ```
71
+
72
+ ## Key integration points
73
+
74
+ ### Amplitude initialization (`src/components/amplitude.astro`)
75
+
76
+ ```astro
77
+ <script>
78
+ import * as amplitude from "@amplitude/unified";
79
+
80
+ const apiKey = import.meta.env.PUBLIC_AMPLITUDE_API_KEY;
81
+ if (apiKey) {
82
+ void amplitude.initAll(apiKey);
83
+ }
84
+ window.amplitude = amplitude;
85
+ </script>
86
+ ```
87
+
88
+ Session Replay, Experiment, and other products can be configured via the second argument to `initAll()` ([Browser Unified SDK](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk)).
89
+
90
+ ### User identification (`src/pages/index.astro`)
91
+
92
+ After login, the demo sets the user id and tracks an event:
93
+
94
+ ```javascript
95
+ window.amplitude?.setUserId(username);
96
+ window.amplitude?.track("User Logged In");
97
+ ```
98
+
99
+ ### Event tracking (`src/pages/burrito.astro`)
100
+
101
+ ```javascript
102
+ window.amplitude?.track("Burrito Considered", {
103
+ total_considerations: newCount,
104
+ username: currentUser,
105
+ });
106
+ ```
107
+
108
+ ### Logout (`src/components/Header.astro`)
109
+
110
+ On logout, the demo clears local state and resets Amplitude:
111
+
112
+ ```javascript
113
+ window.amplitude?.track("User Logged Out");
114
+ localStorage.removeItem("currentUser");
115
+ localStorage.removeItem("burritoConsiderations");
116
+ window.amplitude?.reset();
117
+ ```
118
+
119
+ ## Scripts
120
+
121
+ ```bash
122
+ pnpm dev
123
+ pnpm build
124
+ pnpm preview
125
+ ```
126
+
127
+ ## Learn more
128
+
129
+ - [Browser Unified SDK](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk) — [npm install & `initAll`](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#unified-sdk-npm), [configuration](https://amplitude.com/docs/sdks/analytics/browser/browser-unified-sdk#configuration)
130
+ - [Astro documentation](https://docs.astro.build/)
131
+
132
+ ---
133
+
134
+ ## .astro/content-assets.mjs
135
+
136
+ ```mjs
137
+ export default new Map();
138
+ ```
139
+
140
+ ---
141
+
142
+ ## .astro/content-modules.mjs
143
+
144
+ ```mjs
145
+ export default new Map();
146
+ ```
147
+
148
+ ---
149
+
150
+ ## .astro/content.d.ts
151
+
152
+ ```ts
153
+ declare module 'astro:content' {
154
+ export interface RenderResult {
155
+ Content: import('astro/runtime/server/index.js').AstroComponentFactory;
156
+ headings: import('astro').MarkdownHeading[];
157
+ remarkPluginFrontmatter: Record<string, any>;
158
+ }
159
+ interface Render {
160
+ '.md': Promise<RenderResult>;
161
+ }
162
+
163
+ export interface RenderedContent {
164
+ html: string;
165
+ metadata?: {
166
+ imagePaths: Array<string>;
167
+ [key: string]: unknown;
168
+ };
169
+ }
170
+ }
171
+
172
+ declare module 'astro:content' {
173
+ type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
174
+
175
+ export type CollectionKey = keyof AnyEntryMap;
176
+ export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
177
+
178
+ export type ContentCollectionKey = keyof ContentEntryMap;
179
+ export type DataCollectionKey = keyof DataEntryMap;
180
+
181
+ type AllValuesOf<T> = T extends any ? T[keyof T] : never;
182
+ type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
183
+ ContentEntryMap[C]
184
+ >['slug'];
185
+
186
+ export type ReferenceDataEntry<
187
+ C extends CollectionKey,
188
+ E extends keyof DataEntryMap[C] = string,
189
+ > = {
190
+ collection: C;
191
+ id: E;
192
+ };
193
+ export type ReferenceContentEntry<
194
+ C extends keyof ContentEntryMap,
195
+ E extends ValidContentEntrySlug<C> | (string & {}) = string,
196
+ > = {
197
+ collection: C;
198
+ slug: E;
199
+ };
200
+ export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
201
+ collection: C;
202
+ id: string;
203
+ };
204
+
205
+ /** @deprecated Use `getEntry` instead. */
206
+ export function getEntryBySlug<
207
+ C extends keyof ContentEntryMap,
208
+ E extends ValidContentEntrySlug<C> | (string & {}),
209
+ >(
210
+ collection: C,
211
+ // Note that this has to accept a regular string too, for SSR
212
+ entrySlug: E,
213
+ ): E extends ValidContentEntrySlug<C>
214
+ ? Promise<CollectionEntry<C>>
215
+ : Promise<CollectionEntry<C> | undefined>;
216
+
217
+ /** @deprecated Use `getEntry` instead. */
218
+ export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
219
+ collection: C,
220
+ entryId: E,
221
+ ): Promise<CollectionEntry<C>>;
222
+
223
+ export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
224
+ collection: C,
225
+ filter?: (entry: CollectionEntry<C>) => entry is E,
226
+ ): Promise<E[]>;
227
+ export function getCollection<C extends keyof AnyEntryMap>(
228
+ collection: C,
229
+ filter?: (entry: CollectionEntry<C>) => unknown,
230
+ ): Promise<CollectionEntry<C>[]>;
231
+
232
+ export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
233
+ collection: C,
234
+ filter?: LiveLoaderCollectionFilterType<C>,
235
+ ): Promise<
236
+ import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
237
+ >;
238
+
239
+ export function getEntry<
240
+ C extends keyof ContentEntryMap,
241
+ E extends ValidContentEntrySlug<C> | (string & {}),
242
+ >(
243
+ entry: ReferenceContentEntry<C, E>,
244
+ ): E extends ValidContentEntrySlug<C>
245
+ ? Promise<CollectionEntry<C>>
246
+ : Promise<CollectionEntry<C> | undefined>;
247
+ export function getEntry<
248
+ C extends keyof DataEntryMap,
249
+ E extends keyof DataEntryMap[C] | (string & {}),
250
+ >(
251
+ entry: ReferenceDataEntry<C, E>,
252
+ ): E extends keyof DataEntryMap[C]
253
+ ? Promise<DataEntryMap[C][E]>
254
+ : Promise<CollectionEntry<C> | undefined>;
255
+ export function getEntry<
256
+ C extends keyof ContentEntryMap,
257
+ E extends ValidContentEntrySlug<C> | (string & {}),
258
+ >(
259
+ collection: C,
260
+ slug: E,
261
+ ): E extends ValidContentEntrySlug<C>
262
+ ? Promise<CollectionEntry<C>>
263
+ : Promise<CollectionEntry<C> | undefined>;
264
+ export function getEntry<
265
+ C extends keyof DataEntryMap,
266
+ E extends keyof DataEntryMap[C] | (string & {}),
267
+ >(
268
+ collection: C,
269
+ id: E,
270
+ ): E extends keyof DataEntryMap[C]
271
+ ? string extends keyof DataEntryMap[C]
272
+ ? Promise<DataEntryMap[C][E]> | undefined
273
+ : Promise<DataEntryMap[C][E]>
274
+ : Promise<CollectionEntry<C> | undefined>;
275
+ export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
276
+ collection: C,
277
+ filter: string | LiveLoaderEntryFilterType<C>,
278
+ ): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
279
+
280
+ /** Resolve an array of entry references from the same collection */
281
+ export function getEntries<C extends keyof ContentEntryMap>(
282
+ entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
283
+ ): Promise<CollectionEntry<C>[]>;
284
+ export function getEntries<C extends keyof DataEntryMap>(
285
+ entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
286
+ ): Promise<CollectionEntry<C>[]>;
287
+
288
+ export function render<C extends keyof AnyEntryMap>(
289
+ entry: AnyEntryMap[C][string],
290
+ ): Promise<RenderResult>;
291
+
292
+ export function reference<C extends keyof AnyEntryMap>(
293
+ collection: C,
294
+ ): import('astro/zod').ZodEffects<
295
+ import('astro/zod').ZodString,
296
+ C extends keyof ContentEntryMap
297
+ ? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
298
+ : ReferenceDataEntry<C, keyof DataEntryMap[C]>
299
+ >;
300
+ // Allow generic `string` to avoid excessive type errors in the config
301
+ // if `dev` is not running to update as you edit.
302
+ // Invalid collection names will be caught at build time.
303
+ export function reference<C extends string>(
304
+ collection: C,
305
+ ): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
306
+
307
+ type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
308
+ type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
309
+ ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
310
+ >;
311
+
312
+ type ContentEntryMap = {
313
+
314
+ };
315
+
316
+ type DataEntryMap = {
317
+
318
+ };
319
+
320
+ type AnyEntryMap = ContentEntryMap & DataEntryMap;
321
+
322
+ type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
323
+ infer TData,
324
+ infer TEntryFilter,
325
+ infer TCollectionFilter,
326
+ infer TError
327
+ >
328
+ ? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
329
+ : { data: never; entryFilter: never; collectionFilter: never; error: never };
330
+ type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
331
+ type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
332
+ type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
333
+ type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
334
+
335
+ type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
336
+ LiveContentConfig['collections'][C]['schema'] extends undefined
337
+ ? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
338
+ : import('astro/zod').infer<
339
+ Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
340
+ >;
341
+ type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
342
+ ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
343
+ type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
344
+ ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
345
+ type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
346
+ LiveContentConfig['collections'][C]['loader']
347
+ >;
348
+
349
+ export type ContentConfig = typeof import("../src/content.config.mjs");
350
+ export type LiveContentConfig = never;
351
+ }
352
+
353
+ ```
354
+
355
+ ---
356
+
357
+ ## .astro/types.d.ts
358
+
359
+ ```ts
360
+ /// <reference types="astro/client" />
361
+ /// <reference path="content.d.ts" />
362
+ ```
363
+
364
+ ---
365
+
366
+ ## .env.example
367
+
368
+ ```example
369
+ PUBLIC_AMPLITUDE_API_KEY=your_amplitude_api_key_here
370
+
371
+ ```
372
+
373
+ ---
374
+
375
+ ## astro.config.mjs
376
+
377
+ ```mjs
378
+ import { defineConfig } from "astro/config";
379
+
380
+ export default defineConfig({});
381
+
382
+ ```
383
+
384
+ ---
385
+
386
+ ## src/components/amplitude.astro
387
+
388
+ ```astro
389
+ ---
390
+ // Client-side Amplitude: bundled @amplitude/unified (initAll).
391
+ // Exposes the same namespace on window.amplitude for is:inline page scripts.
392
+ ---
393
+ <script>
394
+ import * as amplitude from "@amplitude/unified";
395
+
396
+ const apiKey = import.meta.env.PUBLIC_AMPLITUDE_API_KEY;
397
+ if (apiKey) {
398
+ void amplitude.initAll(apiKey);
399
+ }
400
+ window.amplitude = amplitude;
401
+ </script>
402
+
403
+ ```
404
+
405
+ ---
406
+
407
+ ## src/components/Header.astro
408
+
409
+ ```astro
410
+ ---
411
+ // Header component with navigation and logout functionality
412
+ ---
413
+ <header class="header">
414
+ <div class="header-container">
415
+ <nav>
416
+ <a href="/">Home</a>
417
+ <a href="/burrito" class="auth-link" style="display: none;">Burrito Consideration</a>
418
+ <a href="/profile" class="auth-link" style="display: none;">Profile</a>
419
+ </nav>
420
+ <div class="user-section">
421
+ <span class="welcome-text" style="display: none;">Welcome, <span class="username"></span>!</span>
422
+ <span class="not-logged-in">Not logged in</span>
423
+ <button class="btn-logout" style="display: none;">Logout</button>
424
+ </div>
425
+ </div>
426
+ </header>
427
+
428
+ <script is:inline>
429
+ function updateHeader() {
430
+ const currentUser = localStorage.getItem('currentUser');
431
+ const authLinks = document.querySelectorAll('.auth-link');
432
+ const welcomeText = document.querySelector('.welcome-text');
433
+ const notLoggedIn = document.querySelector('.not-logged-in');
434
+ const logoutBtn = document.querySelector('.btn-logout');
435
+ const usernameSpan = document.querySelector('.username');
436
+
437
+ if (currentUser) {
438
+ authLinks.forEach(link => link.style.display = 'inline');
439
+ welcomeText.style.display = 'inline';
440
+ notLoggedIn.style.display = 'none';
441
+ logoutBtn.style.display = 'inline';
442
+ usernameSpan.textContent = currentUser;
443
+ } else {
444
+ authLinks.forEach(link => link.style.display = 'none');
445
+ welcomeText.style.display = 'none';
446
+ notLoggedIn.style.display = 'inline';
447
+ logoutBtn.style.display = 'none';
448
+ }
449
+ }
450
+
451
+ function handleLogout() {
452
+ const currentUser = localStorage.getItem('currentUser');
453
+ if (currentUser) {
454
+ window.amplitude?.track('User Logged Out');
455
+ }
456
+ localStorage.removeItem('currentUser');
457
+ localStorage.removeItem('burritoConsiderations');
458
+ // IMPORTANT: Reset Amplitude to clear the user/session identity
459
+ window.amplitude?.reset();
460
+ window.location.href = '/';
461
+ }
462
+
463
+ document.addEventListener('DOMContentLoaded', () => {
464
+ updateHeader();
465
+ document.querySelector('.btn-logout')?.addEventListener('click', handleLogout);
466
+ });
467
+
468
+ // Listen for storage changes (login/logout in other tabs)
469
+ window.addEventListener('storage', updateHeader);
470
+ </script>
471
+
472
+ <style>
473
+ .header {
474
+ background-color: #333;
475
+ color: white;
476
+ padding: 1rem;
477
+ }
478
+
479
+ .header-container {
480
+ max-width: 1200px;
481
+ margin: 0 auto;
482
+ display: flex;
483
+ justify-content: space-between;
484
+ align-items: center;
485
+ }
486
+
487
+ .header nav {
488
+ display: flex;
489
+ gap: 1rem;
490
+ }
491
+
492
+ .header a {
493
+ color: white;
494
+ text-decoration: none;
495
+ padding: 0.5rem 1rem;
496
+ border-radius: 4px;
497
+ transition: background-color 0.2s;
498
+ }
499
+
500
+ .header a:hover {
501
+ background-color: #555;
502
+ text-decoration: none;
503
+ }
504
+
505
+ .user-section {
506
+ display: flex;
507
+ align-items: center;
508
+ gap: 1rem;
509
+ }
510
+
511
+ .btn-logout {
512
+ background-color: #dc3545;
513
+ color: white;
514
+ border: none;
515
+ padding: 0.5rem 1rem;
516
+ border-radius: 4px;
517
+ cursor: pointer;
518
+ font-size: 14px;
519
+ }
520
+
521
+ .btn-logout:hover {
522
+ background-color: #c82333;
523
+ }
524
+ </style>
525
+
526
+ ```
527
+
528
+ ---
529
+
530
+ ## src/env.d.ts
531
+
532
+ ```ts
533
+ /// <reference types="astro/client" />
534
+
535
+ declare global {
536
+ interface Window {
537
+ amplitude?: typeof import("@amplitude/unified");
538
+ __amplitude_initialized?: boolean;
539
+ }
540
+ }
541
+
542
+ export {};
543
+
544
+ ```
545
+
546
+ ---
547
+
548
+ ## src/layouts/AmplitudeLayout.astro
549
+
550
+ ```astro
551
+ ---
552
+ import Amplitude from '../components/amplitude.astro';
553
+ import Header from '../components/Header.astro';
554
+ import '../styles/global.css';
555
+
556
+ interface Props {
557
+ title: string;
558
+ }
559
+
560
+ const { title } = Astro.props;
561
+ ---
562
+ <!doctype html>
563
+ <html lang="en">
564
+ <head>
565
+ <meta charset="UTF-8" />
566
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
567
+ <meta name="description" content="Astro Amplitude Static Integration Example" />
568
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
569
+ <title>{title}</title>
570
+ <Amplitude />
571
+ </head>
572
+ <body>
573
+ <Header />
574
+ <main>
575
+ <slot />
576
+ </main>
577
+ </body>
578
+ </html>
579
+
580
+ ```
581
+
582
+ ---
583
+
584
+ ## src/lib/auth.ts
585
+
586
+ ```ts
587
+ // Client-side auth utilities for localStorage-based authentication
588
+
589
+ export interface User {
590
+ username: string;
591
+ burritoConsiderations: number;
592
+ }
593
+
594
+ export function getCurrentUser(): User | null {
595
+ if (typeof window === "undefined") return null;
596
+
597
+ const username = localStorage.getItem("currentUser");
598
+ if (!username) return null;
599
+
600
+ const considerations = parseInt(
601
+ localStorage.getItem("burritoConsiderations") || "0",
602
+ 10,
603
+ );
604
+
605
+ return {
606
+ username,
607
+ burritoConsiderations: considerations,
608
+ };
609
+ }
610
+
611
+ export function login(username: string, password: string): boolean {
612
+ if (!username || !password) return false;
613
+
614
+ localStorage.setItem("currentUser", username);
615
+ // Initialize burrito considerations if not set
616
+ if (!localStorage.getItem("burritoConsiderations")) {
617
+ localStorage.setItem("burritoConsiderations", "0");
618
+ }
619
+
620
+ return true;
621
+ }
622
+
623
+ export function logout(): void {
624
+ localStorage.removeItem("currentUser");
625
+ localStorage.removeItem("burritoConsiderations");
626
+ }
627
+
628
+ export function incrementBurritoConsiderations(): number {
629
+ const current = parseInt(
630
+ localStorage.getItem("burritoConsiderations") || "0",
631
+ 10,
632
+ );
633
+ const newCount = current + 1;
634
+ localStorage.setItem("burritoConsiderations", newCount.toString());
635
+ return newCount;
636
+ }
637
+
638
+ ```
639
+
640
+ ---
641
+
642
+ ## src/pages/burrito.astro
643
+
644
+ ```astro
645
+ ---
646
+ import AmplitudeLayout from '../layouts/AmplitudeLayout.astro';
647
+ ---
648
+ <AmplitudeLayout title="Burrito Consideration - Astro Amplitude Example">
649
+ <div class="container">
650
+ <h1>Burrito consideration zone</h1>
651
+ <p>Take a moment to truly consider the potential of burritos.</p>
652
+
653
+ <div style="text-align: center;">
654
+ <button id="consider-btn" class="btn-burrito">
655
+ I have considered the burrito potential
656
+ </button>
657
+
658
+ <p id="success-message" class="success" style="display: none;">
659
+ Thank you for your consideration! Count: <span id="consideration-count"></span>
660
+ </p>
661
+ </div>
662
+
663
+ <div class="stats">
664
+ <h3>Consideration stats</h3>
665
+ <p>Total considerations: <span id="total-considerations">0</span></p>
666
+ </div>
667
+ </div>
668
+ </AmplitudeLayout>
669
+
670
+ <script is:inline>
671
+ function checkAuth() {
672
+ const currentUser = localStorage.getItem('currentUser');
673
+ if (!currentUser) {
674
+ window.location.href = '/';
675
+ return false;
676
+ }
677
+ return true;
678
+ }
679
+
680
+ function updateStats() {
681
+ const count = localStorage.getItem('burritoConsiderations') || '0';
682
+ document.getElementById('total-considerations').textContent = count;
683
+ }
684
+
685
+ function handleConsideration() {
686
+ const currentUser = localStorage.getItem('currentUser');
687
+ if (!currentUser) return;
688
+
689
+ // Increment the count
690
+ const currentCount = parseInt(localStorage.getItem('burritoConsiderations') || '0', 10);
691
+ const newCount = currentCount + 1;
692
+ localStorage.setItem('burritoConsiderations', newCount.toString());
693
+
694
+ // Update the UI
695
+ updateStats();
696
+
697
+ const successMessage = document.getElementById('success-message');
698
+ const considerationCount = document.getElementById('consideration-count');
699
+ considerationCount.textContent = newCount;
700
+ successMessage.style.display = 'block';
701
+
702
+ // Hide success message after 2 seconds
703
+ setTimeout(() => {
704
+ successMessage.style.display = 'none';
705
+ }, 2000);
706
+
707
+ // Capture burrito consideration event in Amplitude
708
+ window.amplitude?.track('Burrito Considered', {
709
+ total_considerations: newCount,
710
+ username: currentUser
711
+ });
712
+ }
713
+
714
+ document.addEventListener('DOMContentLoaded', () => {
715
+ if (!checkAuth()) return;
716
+
717
+ updateStats();
718
+ document.getElementById('consider-btn')?.addEventListener('click', handleConsideration);
719
+ });
720
+ </script>
721
+
722
+ ```
723
+
724
+ ---
725
+
726
+ ## src/pages/index.astro
727
+
728
+ ```astro
729
+ ---
730
+ import AmplitudeLayout from '../layouts/AmplitudeLayout.astro';
731
+ ---
732
+ <AmplitudeLayout title="Home - Astro Amplitude Example">
733
+ <div class="container">
734
+ <div id="logged-in-view" style="display: none;">
735
+ <h1>Welcome back, <span id="welcome-username"></span>!</h1>
736
+ <p>You are now logged in. Feel free to explore:</p>
737
+ <ul>
738
+ <li>Consider the potential of burritos</li>
739
+ <li>View your profile and statistics</li>
740
+ </ul>
741
+ </div>
742
+
743
+ <div id="logged-out-view">
744
+ <h1>Welcome to Burrito Consideration App</h1>
745
+ <p>Please sign in to begin your burrito journey</p>
746
+
747
+ <form id="login-form" class="form">
748
+ <div class="form-group">
749
+ <label for="username">Username:</label>
750
+ <input
751
+ type="text"
752
+ id="username"
753
+ placeholder="Enter any username"
754
+ required
755
+ />
756
+ </div>
757
+
758
+ <div class="form-group">
759
+ <label for="password">Password:</label>
760
+ <input
761
+ type="password"
762
+ id="password"
763
+ placeholder="Enter any password"
764
+ required
765
+ />
766
+ </div>
767
+
768
+ <p id="error-message" class="error" style="display: none;"></p>
769
+
770
+ <button type="submit" class="btn-primary">Sign In</button>
771
+ </form>
772
+
773
+ <p class="note">
774
+ Note: This is a demo app. Use any username and password to sign in.
775
+ </p>
776
+ </div>
777
+ </div>
778
+ </AmplitudeLayout>
779
+
780
+ <script is:inline>
781
+ function updateView() {
782
+ const currentUser = localStorage.getItem('currentUser');
783
+ const loggedInView = document.getElementById('logged-in-view');
784
+ const loggedOutView = document.getElementById('logged-out-view');
785
+ const welcomeUsername = document.getElementById('welcome-username');
786
+
787
+ if (currentUser) {
788
+ loggedInView.style.display = 'block';
789
+ loggedOutView.style.display = 'none';
790
+ welcomeUsername.textContent = currentUser;
791
+ } else {
792
+ loggedInView.style.display = 'none';
793
+ loggedOutView.style.display = 'block';
794
+ }
795
+ }
796
+
797
+ function handleLogin(event) {
798
+ event.preventDefault();
799
+
800
+ const username = document.getElementById('username').value;
801
+ const password = document.getElementById('password').value;
802
+ const errorMessage = document.getElementById('error-message');
803
+
804
+ if (!username || !password) {
805
+ errorMessage.textContent = 'Please provide both username and password';
806
+ errorMessage.style.display = 'block';
807
+ return;
808
+ }
809
+
810
+ // Client-side only fake auth - store in localStorage
811
+ localStorage.setItem('currentUser', username);
812
+ if (!localStorage.getItem('burritoConsiderations')) {
813
+ localStorage.setItem('burritoConsiderations', '0');
814
+ }
815
+
816
+ // Identify the user in Amplitude (once on login is enough)
817
+ window.amplitude?.setUserId(username);
818
+ window.amplitude?.track('User Logged In');
819
+
820
+ // Clear form
821
+ document.getElementById('username').value = '';
822
+ document.getElementById('password').value = '';
823
+ errorMessage.style.display = 'none';
824
+
825
+ // Update view
826
+ updateView();
827
+
828
+ // Trigger header update
829
+ window.dispatchEvent(new Event('storage'));
830
+ }
831
+
832
+ document.addEventListener('DOMContentLoaded', () => {
833
+ updateView();
834
+ document.getElementById('login-form')?.addEventListener('submit', handleLogin);
835
+ });
836
+
837
+ // Listen for storage changes
838
+ window.addEventListener('storage', updateView);
839
+ </script>
840
+
841
+ ```
842
+
843
+ ---
844
+
845
+ ## src/pages/profile.astro
846
+
847
+ ```astro
848
+ ---
849
+ import AmplitudeLayout from '../layouts/AmplitudeLayout.astro';
850
+ ---
851
+ <AmplitudeLayout title="Profile - Astro Amplitude Example">
852
+ <div class="container">
853
+ <h1>User Profile</h1>
854
+
855
+ <div class="stats">
856
+ <h2>Your Information</h2>
857
+ <p><strong>Username:</strong> <span id="profile-username"></span></p>
858
+ <p><strong>Burrito Considerations:</strong> <span id="profile-considerations">0</span></p>
859
+ </div>
860
+
861
+ <div style="margin-top: 2rem;">
862
+ <h3>Your Burrito Journey</h3>
863
+ <p id="journey-message"></p>
864
+ </div>
865
+ </div>
866
+ </AmplitudeLayout>
867
+
868
+ <script is:inline>
869
+ function checkAuth() {
870
+ const currentUser = localStorage.getItem('currentUser');
871
+ if (!currentUser) {
872
+ window.location.href = '/';
873
+ return false;
874
+ }
875
+ return true;
876
+ }
877
+
878
+ function updateProfile() {
879
+ const username = localStorage.getItem('currentUser') || '';
880
+ const considerations = parseInt(localStorage.getItem('burritoConsiderations') || '0', 10);
881
+
882
+ document.getElementById('profile-username').textContent = username;
883
+ document.getElementById('profile-considerations').textContent = considerations;
884
+
885
+ // Update journey message based on consideration count
886
+ const journeyMessage = document.getElementById('journey-message');
887
+ if (considerations === 0) {
888
+ journeyMessage.textContent = "You haven't considered any burritos yet. Visit the Burrito Consideration page to start!";
889
+ } else if (considerations === 1) {
890
+ journeyMessage.textContent = "You've considered the burrito potential once. Keep going!";
891
+ } else if (considerations < 5) {
892
+ journeyMessage.textContent = "You're getting the hang of burrito consideration!";
893
+ } else if (considerations < 10) {
894
+ journeyMessage.textContent = "You're becoming a burrito consideration expert!";
895
+ } else {
896
+ journeyMessage.textContent = "You are a true burrito consideration master!";
897
+ }
898
+ }
899
+
900
+ document.addEventListener('DOMContentLoaded', () => {
901
+ if (!checkAuth()) return;
902
+
903
+ updateProfile();
904
+ });
905
+ </script>
906
+
907
+ ```
908
+
909
+ ---
910
+