@sundaeswap/sprinkles 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +178 -181
  2. package/dist/cjs/Sprinkle/__tests__/action-integration.test.js +590 -0
  3. package/dist/cjs/Sprinkle/__tests__/action-integration.test.js.map +1 -0
  4. package/dist/cjs/Sprinkle/__tests__/action-registry.test.js +193 -0
  5. package/dist/cjs/Sprinkle/__tests__/action-registry.test.js.map +1 -0
  6. package/dist/cjs/Sprinkle/__tests__/action-runner.test.js +304 -0
  7. package/dist/cjs/Sprinkle/__tests__/action-runner.test.js.map +1 -0
  8. package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js +1110 -0
  9. package/dist/cjs/Sprinkle/__tests__/builtin-actions.test.js.map +1 -0
  10. package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js +744 -0
  11. package/dist/cjs/Sprinkle/__tests__/cli-adapter.test.js.map +1 -0
  12. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js +15 -1
  13. package/dist/cjs/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  14. package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js +711 -0
  15. package/dist/cjs/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -0
  16. package/dist/cjs/Sprinkle/__tests__/native-script.test.js +390 -0
  17. package/dist/cjs/Sprinkle/__tests__/native-script.test.js.map +1 -0
  18. package/dist/cjs/Sprinkle/__tests__/tui-helpers.test.js +334 -0
  19. package/dist/cjs/Sprinkle/__tests__/tui-helpers.test.js.map +1 -0
  20. package/dist/cjs/Sprinkle/__tests__/utility-actions.test.js +367 -0
  21. package/dist/cjs/Sprinkle/__tests__/utility-actions.test.js.map +1 -0
  22. package/dist/cjs/Sprinkle/__tests__/wallet-transaction-actions.test.js +749 -0
  23. package/dist/cjs/Sprinkle/__tests__/wallet-transaction-actions.test.js.map +1 -0
  24. package/dist/cjs/Sprinkle/actions/builtin/addressbook-actions.js +164 -0
  25. package/dist/cjs/Sprinkle/actions/builtin/addressbook-actions.js.map +1 -0
  26. package/dist/cjs/Sprinkle/actions/builtin/blaze-helper.js +61 -0
  27. package/dist/cjs/Sprinkle/actions/builtin/blaze-helper.js.map +1 -0
  28. package/dist/cjs/Sprinkle/actions/builtin/index.js +174 -0
  29. package/dist/cjs/Sprinkle/actions/builtin/index.js.map +1 -0
  30. package/dist/cjs/Sprinkle/actions/builtin/native-script.js +139 -0
  31. package/dist/cjs/Sprinkle/actions/builtin/native-script.js.map +1 -0
  32. package/dist/cjs/Sprinkle/actions/builtin/profile-actions.js +202 -0
  33. package/dist/cjs/Sprinkle/actions/builtin/profile-actions.js.map +1 -0
  34. package/dist/cjs/Sprinkle/actions/builtin/settings-actions.js +87 -0
  35. package/dist/cjs/Sprinkle/actions/builtin/settings-actions.js.map +1 -0
  36. package/dist/cjs/Sprinkle/actions/builtin/transaction-actions.js +345 -0
  37. package/dist/cjs/Sprinkle/actions/builtin/transaction-actions.js.map +1 -0
  38. package/dist/cjs/Sprinkle/actions/builtin/utility-actions.js +218 -0
  39. package/dist/cjs/Sprinkle/actions/builtin/utility-actions.js.map +1 -0
  40. package/dist/cjs/Sprinkle/actions/builtin/wallet-actions.js +212 -0
  41. package/dist/cjs/Sprinkle/actions/builtin/wallet-actions.js.map +1 -0
  42. package/dist/cjs/Sprinkle/actions/cli-adapter.js +390 -0
  43. package/dist/cjs/Sprinkle/actions/cli-adapter.js.map +1 -0
  44. package/dist/cjs/Sprinkle/actions/index.js +139 -0
  45. package/dist/cjs/Sprinkle/actions/index.js.map +1 -0
  46. package/dist/cjs/Sprinkle/actions/mcp-adapter.js +557 -0
  47. package/dist/cjs/Sprinkle/actions/mcp-adapter.js.map +1 -0
  48. package/dist/cjs/Sprinkle/actions/registry.js +92 -0
  49. package/dist/cjs/Sprinkle/actions/registry.js.map +1 -0
  50. package/dist/cjs/Sprinkle/actions/runner.js +190 -0
  51. package/dist/cjs/Sprinkle/actions/runner.js.map +1 -0
  52. package/dist/cjs/Sprinkle/actions/tui-helpers.js +96 -0
  53. package/dist/cjs/Sprinkle/actions/tui-helpers.js.map +1 -0
  54. package/dist/cjs/Sprinkle/actions/types.js +68 -0
  55. package/dist/cjs/Sprinkle/actions/types.js.map +1 -0
  56. package/dist/cjs/Sprinkle/index.js +678 -5
  57. package/dist/cjs/Sprinkle/index.js.map +1 -1
  58. package/dist/cjs/Sprinkle/prompts.js +12 -7
  59. package/dist/cjs/Sprinkle/prompts.js.map +1 -1
  60. package/dist/cjs/Sprinkle/schemas.js +17 -1
  61. package/dist/cjs/Sprinkle/schemas.js.map +1 -1
  62. package/dist/cjs/Sprinkle/type-guards.js +7 -1
  63. package/dist/cjs/Sprinkle/type-guards.js.map +1 -1
  64. package/dist/esm/Sprinkle/__tests__/action-integration.test.js +588 -0
  65. package/dist/esm/Sprinkle/__tests__/action-integration.test.js.map +1 -0
  66. package/dist/esm/Sprinkle/__tests__/action-registry.test.js +192 -0
  67. package/dist/esm/Sprinkle/__tests__/action-registry.test.js.map +1 -0
  68. package/dist/esm/Sprinkle/__tests__/action-runner.test.js +302 -0
  69. package/dist/esm/Sprinkle/__tests__/action-runner.test.js.map +1 -0
  70. package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js +1107 -0
  71. package/dist/esm/Sprinkle/__tests__/builtin-actions.test.js.map +1 -0
  72. package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js +742 -0
  73. package/dist/esm/Sprinkle/__tests__/cli-adapter.test.js.map +1 -0
  74. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js +15 -1
  75. package/dist/esm/Sprinkle/__tests__/fill-in-struct.test.js.map +1 -1
  76. package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js +710 -0
  77. package/dist/esm/Sprinkle/__tests__/mcp-adapter.test.js.map +1 -0
  78. package/dist/esm/Sprinkle/__tests__/native-script.test.js +388 -0
  79. package/dist/esm/Sprinkle/__tests__/native-script.test.js.map +1 -0
  80. package/dist/esm/Sprinkle/__tests__/tui-helpers.test.js +332 -0
  81. package/dist/esm/Sprinkle/__tests__/tui-helpers.test.js.map +1 -0
  82. package/dist/esm/Sprinkle/__tests__/utility-actions.test.js +365 -0
  83. package/dist/esm/Sprinkle/__tests__/utility-actions.test.js.map +1 -0
  84. package/dist/esm/Sprinkle/__tests__/wallet-transaction-actions.test.js +747 -0
  85. package/dist/esm/Sprinkle/__tests__/wallet-transaction-actions.test.js.map +1 -0
  86. package/dist/esm/Sprinkle/actions/builtin/addressbook-actions.js +159 -0
  87. package/dist/esm/Sprinkle/actions/builtin/addressbook-actions.js.map +1 -0
  88. package/dist/esm/Sprinkle/actions/builtin/blaze-helper.js +55 -0
  89. package/dist/esm/Sprinkle/actions/builtin/blaze-helper.js.map +1 -0
  90. package/dist/esm/Sprinkle/actions/builtin/index.js +37 -0
  91. package/dist/esm/Sprinkle/actions/builtin/index.js.map +1 -0
  92. package/dist/esm/Sprinkle/actions/builtin/native-script.js +133 -0
  93. package/dist/esm/Sprinkle/actions/builtin/native-script.js.map +1 -0
  94. package/dist/esm/Sprinkle/actions/builtin/profile-actions.js +197 -0
  95. package/dist/esm/Sprinkle/actions/builtin/profile-actions.js.map +1 -0
  96. package/dist/esm/Sprinkle/actions/builtin/settings-actions.js +81 -0
  97. package/dist/esm/Sprinkle/actions/builtin/settings-actions.js.map +1 -0
  98. package/dist/esm/Sprinkle/actions/builtin/transaction-actions.js +340 -0
  99. package/dist/esm/Sprinkle/actions/builtin/transaction-actions.js.map +1 -0
  100. package/dist/esm/Sprinkle/actions/builtin/utility-actions.js +213 -0
  101. package/dist/esm/Sprinkle/actions/builtin/utility-actions.js.map +1 -0
  102. package/dist/esm/Sprinkle/actions/builtin/wallet-actions.js +207 -0
  103. package/dist/esm/Sprinkle/actions/builtin/wallet-actions.js.map +1 -0
  104. package/dist/esm/Sprinkle/actions/cli-adapter.js +379 -0
  105. package/dist/esm/Sprinkle/actions/cli-adapter.js.map +1 -0
  106. package/dist/esm/Sprinkle/actions/index.js +12 -0
  107. package/dist/esm/Sprinkle/actions/index.js.map +1 -0
  108. package/dist/esm/Sprinkle/actions/mcp-adapter.js +547 -0
  109. package/dist/esm/Sprinkle/actions/mcp-adapter.js.map +1 -0
  110. package/dist/esm/Sprinkle/actions/registry.js +85 -0
  111. package/dist/esm/Sprinkle/actions/registry.js.map +1 -0
  112. package/dist/esm/Sprinkle/actions/runner.js +182 -0
  113. package/dist/esm/Sprinkle/actions/runner.js.map +1 -0
  114. package/dist/esm/Sprinkle/actions/tui-helpers.js +91 -0
  115. package/dist/esm/Sprinkle/actions/tui-helpers.js.map +1 -0
  116. package/dist/esm/Sprinkle/actions/types.js +61 -0
  117. package/dist/esm/Sprinkle/actions/types.js.map +1 -0
  118. package/dist/esm/Sprinkle/index.js +517 -7
  119. package/dist/esm/Sprinkle/index.js.map +1 -1
  120. package/dist/esm/Sprinkle/prompts.js +12 -7
  121. package/dist/esm/Sprinkle/prompts.js.map +1 -1
  122. package/dist/esm/Sprinkle/schemas.js +16 -0
  123. package/dist/esm/Sprinkle/schemas.js.map +1 -1
  124. package/dist/esm/Sprinkle/type-guards.js +3 -0
  125. package/dist/esm/Sprinkle/type-guards.js.map +1 -1
  126. package/dist/types/Sprinkle/actions/builtin/addressbook-actions.d.ts +50 -0
  127. package/dist/types/Sprinkle/actions/builtin/addressbook-actions.d.ts.map +1 -0
  128. package/dist/types/Sprinkle/actions/builtin/blaze-helper.d.ts +39 -0
  129. package/dist/types/Sprinkle/actions/builtin/blaze-helper.d.ts.map +1 -0
  130. package/dist/types/Sprinkle/actions/builtin/index.d.ts +30 -0
  131. package/dist/types/Sprinkle/actions/builtin/index.d.ts.map +1 -0
  132. package/dist/types/Sprinkle/actions/builtin/native-script.d.ts +27 -0
  133. package/dist/types/Sprinkle/actions/builtin/native-script.d.ts.map +1 -0
  134. package/dist/types/Sprinkle/actions/builtin/profile-actions.d.ts +55 -0
  135. package/dist/types/Sprinkle/actions/builtin/profile-actions.d.ts.map +1 -0
  136. package/dist/types/Sprinkle/actions/builtin/settings-actions.d.ts +32 -0
  137. package/dist/types/Sprinkle/actions/builtin/settings-actions.d.ts.map +1 -0
  138. package/dist/types/Sprinkle/actions/builtin/transaction-actions.d.ts +70 -0
  139. package/dist/types/Sprinkle/actions/builtin/transaction-actions.d.ts.map +1 -0
  140. package/dist/types/Sprinkle/actions/builtin/utility-actions.d.ts +48 -0
  141. package/dist/types/Sprinkle/actions/builtin/utility-actions.d.ts.map +1 -0
  142. package/dist/types/Sprinkle/actions/builtin/wallet-actions.d.ts +50 -0
  143. package/dist/types/Sprinkle/actions/builtin/wallet-actions.d.ts.map +1 -0
  144. package/dist/types/Sprinkle/actions/cli-adapter.d.ts +104 -0
  145. package/dist/types/Sprinkle/actions/cli-adapter.d.ts.map +1 -0
  146. package/dist/types/Sprinkle/actions/index.d.ts +13 -0
  147. package/dist/types/Sprinkle/actions/index.d.ts.map +1 -0
  148. package/dist/types/Sprinkle/actions/mcp-adapter.d.ts +116 -0
  149. package/dist/types/Sprinkle/actions/mcp-adapter.d.ts.map +1 -0
  150. package/dist/types/Sprinkle/actions/registry.d.ts +42 -0
  151. package/dist/types/Sprinkle/actions/registry.d.ts.map +1 -0
  152. package/dist/types/Sprinkle/actions/runner.d.ts +45 -0
  153. package/dist/types/Sprinkle/actions/runner.d.ts.map +1 -0
  154. package/dist/types/Sprinkle/actions/tui-helpers.d.ts +53 -0
  155. package/dist/types/Sprinkle/actions/tui-helpers.d.ts.map +1 -0
  156. package/dist/types/Sprinkle/actions/types.d.ts +76 -0
  157. package/dist/types/Sprinkle/actions/types.d.ts.map +1 -0
  158. package/dist/types/Sprinkle/index.d.ts +84 -2
  159. package/dist/types/Sprinkle/index.d.ts.map +1 -1
  160. package/dist/types/Sprinkle/prompts.d.ts.map +1 -1
  161. package/dist/types/Sprinkle/schemas.d.ts +72 -0
  162. package/dist/types/Sprinkle/schemas.d.ts.map +1 -1
  163. package/dist/types/Sprinkle/type-guards.d.ts +4 -1
  164. package/dist/types/Sprinkle/type-guards.d.ts.map +1 -1
  165. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  166. package/package.json +9 -2
  167. package/src/Sprinkle/__tests__/action-integration.test.ts +558 -0
  168. package/src/Sprinkle/__tests__/action-registry.test.ts +187 -0
  169. package/src/Sprinkle/__tests__/action-runner.test.ts +324 -0
  170. package/src/Sprinkle/__tests__/builtin-actions.test.ts +1022 -0
  171. package/src/Sprinkle/__tests__/cli-adapter.test.ts +736 -0
  172. package/src/Sprinkle/__tests__/fill-in-struct.test.ts +23 -1
  173. package/src/Sprinkle/__tests__/mcp-adapter.test.ts +720 -0
  174. package/src/Sprinkle/__tests__/native-script.test.ts +341 -0
  175. package/src/Sprinkle/__tests__/tui-helpers.test.ts +325 -0
  176. package/src/Sprinkle/__tests__/utility-actions.test.ts +348 -0
  177. package/src/Sprinkle/__tests__/wallet-transaction-actions.test.ts +695 -0
  178. package/src/Sprinkle/actions/builtin/addressbook-actions.ts +168 -0
  179. package/src/Sprinkle/actions/builtin/blaze-helper.ts +89 -0
  180. package/src/Sprinkle/actions/builtin/index.ts +125 -0
  181. package/src/Sprinkle/actions/builtin/native-script.ts +165 -0
  182. package/src/Sprinkle/actions/builtin/profile-actions.ts +229 -0
  183. package/src/Sprinkle/actions/builtin/settings-actions.ts +99 -0
  184. package/src/Sprinkle/actions/builtin/transaction-actions.ts +381 -0
  185. package/src/Sprinkle/actions/builtin/utility-actions.ts +285 -0
  186. package/src/Sprinkle/actions/builtin/wallet-actions.ts +233 -0
  187. package/src/Sprinkle/actions/cli-adapter.ts +446 -0
  188. package/src/Sprinkle/actions/index.ts +33 -0
  189. package/src/Sprinkle/actions/mcp-adapter.ts +638 -0
  190. package/src/Sprinkle/actions/registry.ts +97 -0
  191. package/src/Sprinkle/actions/runner.ts +200 -0
  192. package/src/Sprinkle/actions/tui-helpers.ts +114 -0
  193. package/src/Sprinkle/actions/types.ts +91 -0
  194. package/src/Sprinkle/index.ts +612 -3
  195. package/src/Sprinkle/prompts.ts +118 -72
  196. package/src/Sprinkle/schemas.ts +20 -0
  197. package/src/Sprinkle/type-guards.ts +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","names":["createPrompt","useState","useKeypress","usePrefix","usePagination","useMemo","makeTheme","isEnterKey","isUpKey","isDownKey","isBackspaceKey","Separator","ValidationError","colors","figures","isEscapeKey","key","name","selectTheme","icon","cursor","pointer","style","disabled","text","dim","description","cyan","helpTip","helpMode","inputTheme","isSelectable","item","isSeparator","normalizeChoices","choices","map","choice","value","short","String","selectCancellable","config","done","loop","pageSize","theme","status","setStatus","prefix","items","bounds","first","findIndex","last","i","length","defaultItemIndex","default","active","setActive","selectedChoice","rl","clearLine","newActive","page","renderItem","isActive","separator","line","disabledLabel","color","x","message","clearLines","count","process","stdout","write","repeat","selectWithClear","result","inputWithClear","inputCancellable","passwordWithClear","passwordCancellable","confirmWithClear","confirmCancellable","setValue","touched","setTouched","error","setError","answer","validate","ctrl","meta","displayValue","transformer","isFinal","errorMsg","red","mask","slice","char","sequence","masked","undefined","hint","select","searchCancellable","searchTerm","setSearchTerm","results","setResults","loading","setLoading","source","selected","searchLine","resultLines","join"],"sources":["../../../src/Sprinkle/prompts.ts"],"sourcesContent":["/**\n * Cancellable prompt wrappers with escape key support.\n * Uses @inquirer/core's createPrompt and useKeypress for proper escape handling.\n */\n\nimport {\n createPrompt,\n useState,\n useKeypress,\n usePrefix,\n usePagination,\n useMemo,\n makeTheme,\n isEnterKey,\n isUpKey,\n isDownKey,\n isBackspaceKey,\n Separator,\n ValidationError,\n type Theme,\n} from \"@inquirer/core\";\nimport type { PartialDeep } from \"@inquirer/type\";\nimport colors from \"yoctocolors-cjs\";\nimport figures from \"@inquirer/figures\";\n\n// Check if key is escape\nconst isEscapeKey = (key: { name: string }) => key.name === \"escape\";\n\n// Theme for select prompt\nconst selectTheme = {\n icon: { cursor: figures.pointer },\n style: {\n disabled: (text: string) => colors.dim(`- ${text}`),\n description: (text: string) => colors.cyan(text),\n helpTip: colors.dim(\"(Use arrow keys, Enter to select, Esc to cancel)\"),\n },\n helpMode: \"always\" as const,\n};\n\n// Theme for input prompt\nconst inputTheme = {\n style: {\n helpTip: colors.dim(\"(Esc to cancel)\"),\n },\n};\n\ninterface SelectChoice<T> {\n name?: string;\n value: T;\n description?: string;\n short?: string;\n disabled?: boolean | string;\n}\n\ninterface SelectConfig<T> {\n message: string;\n choices: ReadonlyArray<SelectChoice<T> | Separator | string>;\n default?: T;\n pageSize?: number;\n loop?: boolean;\n theme?: PartialDeep<Theme<typeof selectTheme>>;\n}\n\nfunction isSelectable<T>(item: SelectChoice<T> | Separator): item is SelectChoice<T> {\n return !Separator.isSeparator(item) && !item.disabled;\n}\n\nfunction normalizeChoices<T>(\n choices: ReadonlyArray<SelectChoice<T> | Separator | string>,\n): Array<SelectChoice<T> | Separator> {\n return choices.map((choice) => {\n if (Separator.isSeparator(choice)) return choice;\n if (typeof choice === \"string\") {\n return {\n value: choice as unknown as T,\n name: choice,\n short: choice,\n disabled: false,\n };\n }\n const name = choice.name ?? String(choice.value);\n return {\n value: choice.value,\n name,\n short: choice.short ?? name,\n disabled: choice.disabled ?? false,\n description: choice.description,\n };\n });\n}\n\n/**\n * Select prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const selectCancellable = createPrompt<\n unknown | null,\n SelectConfig<unknown>\n>((config, done) => {\n const { loop = true, pageSize = 15 } = config;\n const theme = makeTheme(selectTheme, config.theme);\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const prefix = usePrefix({ status: status === \"cancelled\" ? \"done\" : status, theme });\n\n const items = useMemo(\n () => normalizeChoices(config.choices),\n [config.choices],\n );\n\n const bounds = useMemo(() => {\n const first = items.findIndex(isSelectable);\n // Find last selectable item (compatible with es2022)\n let last = -1;\n for (let i = items.length - 1; i >= 0; i--) {\n if (isSelectable(items[i]!)) {\n last = i;\n break;\n }\n }\n if (first === -1) {\n throw new ValidationError(\n \"[select prompt] No selectable choices. All choices are disabled.\",\n );\n }\n return { first, last };\n }, [items]);\n\n const defaultItemIndex = useMemo(() => {\n if (!(\"default\" in config)) return -1;\n return items.findIndex(\n (item) => isSelectable(item) && item.value === config.default,\n );\n }, [config.default, items]);\n\n const [active, setActive] = useState(\n defaultItemIndex === -1 ? bounds.first : defaultItemIndex,\n );\n\n const selectedChoice = items[active] as SelectChoice<unknown>;\n\n useKeypress((key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n setStatus(\"done\");\n done(selectedChoice.value);\n } else if (isUpKey(key)) {\n rl.clearLine(0);\n if (active === bounds.first && loop) {\n setActive(bounds.last);\n } else {\n let newActive = active - 1;\n while (newActive >= bounds.first && !isSelectable(items[newActive]!)) {\n newActive--;\n }\n if (newActive >= bounds.first) setActive(newActive);\n }\n } else if (isDownKey(key)) {\n rl.clearLine(0);\n if (active === bounds.last && loop) {\n setActive(bounds.first);\n } else {\n let newActive = active + 1;\n while (newActive <= bounds.last && !isSelectable(items[newActive]!)) {\n newActive++;\n }\n if (newActive <= bounds.last) setActive(newActive);\n }\n }\n });\n\n const page = usePagination({\n items,\n active,\n renderItem: ({ item, isActive }) => {\n if (Separator.isSeparator(item)) {\n return ` ${item.separator}`;\n }\n const line = item.name;\n if (item.disabled) {\n const disabledLabel =\n typeof item.disabled === \"string\" ? item.disabled : \"(disabled)\";\n return colors.dim(`- ${line} ${disabledLabel}`);\n }\n const cursor = isActive ? figures.pointer : \" \";\n const color = isActive ? colors.cyan : (x: string) => x;\n return color(`${cursor} ${line}`);\n },\n pageSize,\n loop,\n });\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.cyan(selectedChoice?.short ?? selectedChoice?.name ?? \"\")}`;\n }\n\n const helpTip = colors.dim(\"(Use arrow keys, Enter to select, Esc to cancel)\");\n return `${prefix} ${config.message} ${helpTip}\\n${page}`;\n});\n\n/**\n * Clears N lines above the cursor.\n * Used after prompts to clean up menu output.\n */\nexport function clearLines(count: number): void {\n // Move up and clear each line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\".repeat(count));\n}\n\n/**\n * Select prompt that clears its output after completion.\n * Returns the selected value or null if cancelled.\n */\nexport async function selectWithClear<T>(\n config: SelectConfig<T>,\n): Promise<T | null> {\n const result = await selectCancellable(config as SelectConfig<unknown>);\n\n // Clear the \"done\" line that inquirer left behind\n // Move up one line, clear it, move cursor to start\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result as T | null;\n}\n\n/**\n * Input prompt that clears its output after completion.\n * Returns the input value or null if cancelled.\n */\nexport async function inputWithClear(\n config: InputConfig,\n): Promise<string | null> {\n const result = await inputCancellable(config);\n\n // Clear the \"done\" line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result;\n}\n\n/**\n * Password prompt that clears its output after completion.\n * Returns the password or null if cancelled.\n */\nexport async function passwordWithClear(\n config: PasswordConfig,\n): Promise<string | null> {\n const result = await passwordCancellable(config);\n\n // Clear the \"done\" line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result;\n}\n\n/**\n * Confirm prompt that clears its output after completion.\n * Returns true/false or null if cancelled.\n */\nexport async function confirmWithClear(\n config: ConfirmConfig,\n): Promise<boolean | null> {\n const result = await confirmCancellable(config);\n\n // Clear the \"done\" line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result;\n}\n\ninterface InputConfig {\n message: string;\n default?: string;\n transformer?: (value: string, options: { isFinal: boolean }) => string;\n validate?: (value: string) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * Input prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const inputCancellable = createPrompt<string | null, InputConfig>(\n (config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const [value, setValue] = useState(config.default ?? \"\");\n const [touched, setTouched] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const theme = makeTheme(inputTheme);\n const prefix = usePrefix({ status: status === \"cancelled\" ? \"done\" : status, theme });\n\n useKeypress(async (key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n // If user has edited, use their value (even if empty); otherwise use default\n const answer = touched ? value : (config.default ?? \"\");\n if (config.validate) {\n const result = await config.validate(answer);\n if (result !== true) {\n setError(typeof result === \"string\" ? result : \"Invalid input\");\n return;\n }\n }\n setStatus(\"done\");\n done(answer);\n } else if (isBackspaceKey(key)) {\n // Sync with readline's buffer after backspace\n setValue(rl.line);\n setTouched(true);\n setError(null);\n } else if (key.name !== \"tab\" && !key.ctrl && !(key as any).meta) {\n // Sync state with readline's current line buffer\n setValue(rl.line);\n setTouched(true);\n setError(null);\n }\n });\n\n const displayValue = config.transformer\n ? config.transformer(value, { isFinal: status === \"done\" })\n : value;\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.cyan(displayValue)}`;\n }\n\n const helpTip = colors.dim(\"(Esc to cancel)\");\n const errorMsg = error ? colors.red(`\\n> ${error}`) : \"\";\n return `${prefix} ${config.message} ${helpTip} ${displayValue}${errorMsg}`;\n },\n);\n\ninterface PasswordConfig {\n message: string;\n mask?: string;\n validate?: (value: string) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * Password prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const passwordCancellable = createPrompt<string | null, PasswordConfig>(\n (config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const [value, setValue] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const theme = makeTheme(inputTheme);\n const prefix = usePrefix({ status: status === \"cancelled\" ? \"done\" : status, theme });\n const mask = config.mask ?? \"*\";\n\n useKeypress(async (key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n if (config.validate) {\n const result = await config.validate(value);\n if (result !== true) {\n setError(typeof result === \"string\" ? result : \"Invalid input\");\n return;\n }\n }\n setStatus(\"done\");\n done(value);\n } else if (isBackspaceKey(key)) {\n setValue(value.slice(0, -1));\n setError(null);\n } else if (key.name !== \"tab\" && !key.ctrl && !(key as any).meta) {\n // Use key.sequence for single character to avoid rl.line buffer issues\n const char = (key as any).sequence ?? \"\";\n if (char) {\n rl.clearLine(0);\n setValue(value + char);\n setError(null);\n }\n }\n });\n\n const masked = mask.repeat(value.length);\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.dim(masked)}`;\n }\n\n const helpTip = colors.dim(\"(Esc to cancel)\");\n const errorMsg = error ? colors.red(`\\n> ${error}`) : \"\";\n return `${prefix} ${config.message} ${helpTip} ${masked}${errorMsg}`;\n },\n);\n\ninterface ConfirmConfig {\n message: string;\n default?: boolean;\n}\n\n/**\n * Confirm prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const confirmCancellable = createPrompt<boolean | null, ConfirmConfig>(\n (config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n // Track value as undefined when no default, requiring explicit y/n\n const [value, setValue] = useState<boolean | undefined>(config.default);\n const theme = makeTheme(inputTheme);\n const prefix = usePrefix({ status: status === \"cancelled\" ? \"done\" : status, theme });\n\n useKeypress((key) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n // Only accept Enter if a value has been chosen (explicit or default)\n if (value !== undefined) {\n setStatus(\"done\");\n done(value);\n }\n } else if (key.name === \"y\" || key.name === \"Y\") {\n setValue(true);\n } else if (key.name === \"n\" || key.name === \"N\") {\n setValue(false);\n }\n });\n\n const hint = config.default === true ? \"(Y/n)\" : config.default === false ? \"(y/N)\" : \"(y/n)\";\n const displayValue = value === true ? \"Yes\" : value === false ? \"No\" : \"\";\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.cyan(displayValue)}`;\n }\n\n const helpTip = colors.dim(\"(Esc to cancel)\");\n return `${prefix} ${config.message} ${helpTip} ${hint} ${displayValue}`;\n },\n);\n\n/**\n * Type-safe wrapper for selectCancellable.\n * Returns the selected value with proper typing, or null if cancelled.\n */\nexport async function select<T>(config: SelectConfig<T>): Promise<T | null> {\n return selectCancellable(config as SelectConfig<unknown>) as Promise<T | null>;\n}\n\ninterface SearchConfig<T> {\n message: string;\n source: (\n term: string | undefined,\n ) => Promise<{ name: string; value: T }[]> | { name: string; value: T }[];\n}\n\n/**\n * Search prompt with escape key support.\n * Returns null if user presses Escape.\n *\n * Note: This wraps @inquirer/search which has built-in escape handling,\n * but we provide a consistent API with other cancellable prompts.\n */\nexport const searchCancellable = createPrompt<unknown | null, SearchConfig<unknown>>(\n (config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [results, setResults] = useState<{ name: string; value: unknown }[]>([]);\n const [active, setActive] = useState(0);\n const [loading, setLoading] = useState(false);\n const theme = makeTheme(selectTheme);\n const prefix = usePrefix({ status: status === \"cancelled\" ? \"done\" : status, theme });\n\n // Fetch results when search term changes\n useMemo(async () => {\n setLoading(true);\n try {\n const items = await config.source(searchTerm || undefined);\n setResults(items);\n setActive(0);\n } finally {\n setLoading(false);\n }\n }, [searchTerm]);\n\n useKeypress((key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key) && results.length > 0) {\n setStatus(\"done\");\n done(results[active]?.value ?? null);\n } else if (isUpKey(key) && results.length > 0) {\n rl.clearLine(0);\n setActive(active > 0 ? active - 1 : results.length - 1);\n } else if (isDownKey(key) && results.length > 0) {\n rl.clearLine(0);\n setActive(active < results.length - 1 ? active + 1 : 0);\n } else if (isBackspaceKey(key)) {\n setSearchTerm(rl.line);\n } else if (key.name !== \"tab\" && !key.ctrl && !(key as any).meta) {\n setSearchTerm(rl.line);\n }\n });\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n const selected = results[active];\n return `${prefix} ${config.message} ${colors.cyan(selected?.name ?? \"\")}`;\n }\n\n const helpTip = colors.dim(\"(Type to search, Esc to cancel)\");\n const searchLine = `${prefix} ${config.message} ${helpTip} ${searchTerm}`;\n\n if (loading) {\n return `${searchLine}\\n${colors.dim(\" Searching...\")}`;\n }\n\n if (results.length === 0) {\n return `${searchLine}\\n${colors.dim(\" No results\")}`;\n }\n\n const resultLines = results\n .slice(0, 7)\n .map((item, i) => {\n const cursor = i === active ? figures.pointer : \" \";\n const color = i === active ? colors.cyan : (x: string) => x;\n return color(`${cursor} ${item.name}`);\n })\n .join(\"\\n\");\n\n return `${searchLine}\\n${resultLines}`;\n },\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"prompts.js","names":["createPrompt","useState","useKeypress","usePrefix","usePagination","useMemo","makeTheme","isEnterKey","isUpKey","isDownKey","isBackspaceKey","Separator","ValidationError","colors","figures","isEscapeKey","key","name","selectTheme","icon","cursor","pointer","style","disabled","text","dim","description","cyan","helpTip","helpMode","inputTheme","isSelectable","item","isSeparator","normalizeChoices","choices","map","choice","value","short","String","selectCancellable","config","done","loop","pageSize","theme","status","setStatus","prefix","items","bounds","first","findIndex","last","i","length","defaultItemIndex","default","active","setActive","selectedChoice","rl","clearLine","newActive","page","renderItem","isActive","separator","line","disabledLabel","color","x","message","clearLines","count","process","stdout","write","repeat","selectWithClear","result","inputWithClear","inputCancellable","passwordWithClear","passwordCancellable","confirmWithClear","confirmCancellable","setValue","touched","setTouched","error","setError","answer","validate","ctrl","meta","displayValue","transformer","isFinal","errorMsg","red","mask","slice","char","sequence","masked","undefined","hint","select","searchCancellable","searchTerm","setSearchTerm","results","setResults","loading","setLoading","selectedName","setSelectedName","source","selected","searchLine","resultLines","join"],"sources":["../../../src/Sprinkle/prompts.ts"],"sourcesContent":["/**\n * Cancellable prompt wrappers with escape key support.\n * Uses @inquirer/core's createPrompt and useKeypress for proper escape handling.\n */\n\nimport {\n createPrompt,\n useState,\n useKeypress,\n usePrefix,\n usePagination,\n useMemo,\n makeTheme,\n isEnterKey,\n isUpKey,\n isDownKey,\n isBackspaceKey,\n Separator,\n ValidationError,\n type Theme,\n} from \"@inquirer/core\";\nimport type { PartialDeep } from \"@inquirer/type\";\nimport colors from \"yoctocolors-cjs\";\nimport figures from \"@inquirer/figures\";\n\n// Check if key is escape\nconst isEscapeKey = (key: { name: string }) => key.name === \"escape\";\n\n// Theme for select prompt\nconst selectTheme = {\n icon: { cursor: figures.pointer },\n style: {\n disabled: (text: string) => colors.dim(`- ${text}`),\n description: (text: string) => colors.cyan(text),\n helpTip: colors.dim(\"(Use arrow keys, Enter to select, Esc to cancel)\"),\n },\n helpMode: \"always\" as const,\n};\n\n// Theme for input prompt\nconst inputTheme = {\n style: {\n helpTip: colors.dim(\"(Esc to cancel)\"),\n },\n};\n\ninterface SelectChoice<T> {\n name?: string;\n value: T;\n description?: string;\n short?: string;\n disabled?: boolean | string;\n}\n\ninterface SelectConfig<T> {\n message: string;\n choices: ReadonlyArray<SelectChoice<T> | Separator | string>;\n default?: T;\n pageSize?: number;\n loop?: boolean;\n theme?: PartialDeep<Theme<typeof selectTheme>>;\n}\n\nfunction isSelectable<T>(\n item: SelectChoice<T> | Separator,\n): item is SelectChoice<T> {\n return !Separator.isSeparator(item) && !item.disabled;\n}\n\nfunction normalizeChoices<T>(\n choices: ReadonlyArray<SelectChoice<T> | Separator | string>,\n): Array<SelectChoice<T> | Separator> {\n return choices.map((choice) => {\n if (Separator.isSeparator(choice)) return choice;\n if (typeof choice === \"string\") {\n return {\n value: choice as unknown as T,\n name: choice,\n short: choice,\n disabled: false,\n };\n }\n const name = choice.name ?? String(choice.value);\n return {\n value: choice.value,\n name,\n short: choice.short ?? name,\n disabled: choice.disabled ?? false,\n description: choice.description,\n };\n });\n}\n\n/**\n * Select prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const selectCancellable = createPrompt<\n unknown | null,\n SelectConfig<unknown>\n>((config, done) => {\n const { loop = true, pageSize = 15 } = config;\n const theme = makeTheme(selectTheme, config.theme);\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const prefix = usePrefix({\n status: status === \"cancelled\" ? \"done\" : status,\n theme,\n });\n\n const items = useMemo(\n () => normalizeChoices(config.choices),\n [config.choices],\n );\n\n const bounds = useMemo(() => {\n const first = items.findIndex(isSelectable);\n // Find last selectable item (compatible with es2022)\n let last = -1;\n for (let i = items.length - 1; i >= 0; i--) {\n if (isSelectable(items[i]!)) {\n last = i;\n break;\n }\n }\n if (first === -1) {\n throw new ValidationError(\n \"[select prompt] No selectable choices. All choices are disabled.\",\n );\n }\n return { first, last };\n }, [items]);\n\n const defaultItemIndex = useMemo(() => {\n if (!(\"default\" in config)) return -1;\n return items.findIndex(\n (item) => isSelectable(item) && item.value === config.default,\n );\n }, [config.default, items]);\n\n const [active, setActive] = useState(\n defaultItemIndex === -1 ? bounds.first : defaultItemIndex,\n );\n\n const selectedChoice = items[active] as SelectChoice<unknown>;\n\n useKeypress((key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n setStatus(\"done\");\n done(selectedChoice.value);\n } else if (isUpKey(key)) {\n rl.clearLine(0);\n if (active === bounds.first && loop) {\n setActive(bounds.last);\n } else {\n let newActive = active - 1;\n while (newActive >= bounds.first && !isSelectable(items[newActive]!)) {\n newActive--;\n }\n if (newActive >= bounds.first) setActive(newActive);\n }\n } else if (isDownKey(key)) {\n rl.clearLine(0);\n if (active === bounds.last && loop) {\n setActive(bounds.first);\n } else {\n let newActive = active + 1;\n while (newActive <= bounds.last && !isSelectable(items[newActive]!)) {\n newActive++;\n }\n if (newActive <= bounds.last) setActive(newActive);\n }\n }\n });\n\n const page = usePagination({\n items,\n active,\n renderItem: ({ item, isActive }) => {\n if (Separator.isSeparator(item)) {\n return ` ${item.separator}`;\n }\n const line = item.name;\n if (item.disabled) {\n const disabledLabel =\n typeof item.disabled === \"string\" ? item.disabled : \"(disabled)\";\n return colors.dim(`- ${line} ${disabledLabel}`);\n }\n const cursor = isActive ? figures.pointer : \" \";\n const color = isActive ? colors.cyan : (x: string) => x;\n return color(`${cursor} ${line}`);\n },\n pageSize,\n loop,\n });\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.cyan(selectedChoice?.short ?? selectedChoice?.name ?? \"\")}`;\n }\n\n const helpTip = colors.dim(\n \"(Use arrow keys, Enter to select, Esc to cancel)\",\n );\n return `${prefix} ${config.message} ${helpTip}\\n${page}`;\n});\n\n/**\n * Clears N lines above the cursor.\n * Used after prompts to clean up menu output.\n */\nexport function clearLines(count: number): void {\n // Move up and clear each line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\".repeat(count));\n}\n\n/**\n * Select prompt that clears its output after completion.\n * Returns the selected value or null if cancelled.\n */\nexport async function selectWithClear<T>(\n config: SelectConfig<T>,\n): Promise<T | null> {\n const result = await selectCancellable(config as SelectConfig<unknown>);\n\n // Clear the \"done\" line that inquirer left behind\n // Move up one line, clear it, move cursor to start\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result as T | null;\n}\n\n/**\n * Input prompt that clears its output after completion.\n * Returns the input value or null if cancelled.\n */\nexport async function inputWithClear(\n config: InputConfig,\n): Promise<string | null> {\n const result = await inputCancellable(config);\n\n // Clear the \"done\" line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result;\n}\n\n/**\n * Password prompt that clears its output after completion.\n * Returns the password or null if cancelled.\n */\nexport async function passwordWithClear(\n config: PasswordConfig,\n): Promise<string | null> {\n const result = await passwordCancellable(config);\n\n // Clear the \"done\" line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result;\n}\n\n/**\n * Confirm prompt that clears its output after completion.\n * Returns true/false or null if cancelled.\n */\nexport async function confirmWithClear(\n config: ConfirmConfig,\n): Promise<boolean | null> {\n const result = await confirmCancellable(config);\n\n // Clear the \"done\" line\n process.stdout.write(\"\\x1b[1A\\x1b[2K\\x1b[G\");\n\n return result;\n}\n\ninterface InputConfig {\n message: string;\n default?: string;\n transformer?: (value: string, options: { isFinal: boolean }) => string;\n validate?: (value: string) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * Input prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const inputCancellable = createPrompt<string | null, InputConfig>(\n (config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const [value, setValue] = useState(config.default ?? \"\");\n const [touched, setTouched] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const theme = makeTheme(inputTheme);\n const prefix = usePrefix({\n status: status === \"cancelled\" ? \"done\" : status,\n theme,\n });\n\n useKeypress(async (key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n // If user has edited, use their value (even if empty); otherwise use default\n const answer = touched ? value : (config.default ?? \"\");\n if (config.validate) {\n const result = await config.validate(answer);\n if (result !== true) {\n setError(typeof result === \"string\" ? result : \"Invalid input\");\n return;\n }\n }\n setStatus(\"done\");\n done(answer);\n } else if (isBackspaceKey(key)) {\n // Sync with readline's buffer after backspace\n setValue(rl.line);\n setTouched(true);\n setError(null);\n } else if (key.name !== \"tab\" && !key.ctrl && !(key as any).meta) {\n // Sync state with readline's current line buffer\n setValue(rl.line);\n setTouched(true);\n setError(null);\n }\n });\n\n const displayValue = config.transformer\n ? config.transformer(value, { isFinal: status === \"done\" })\n : value;\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.cyan(displayValue)}`;\n }\n\n const helpTip = colors.dim(\"(Esc to cancel)\");\n const errorMsg = error ? colors.red(`\\n> ${error}`) : \"\";\n return `${prefix} ${config.message} ${helpTip} ${displayValue}${errorMsg}`;\n },\n);\n\ninterface PasswordConfig {\n message: string;\n mask?: string;\n validate?: (value: string) => boolean | string | Promise<boolean | string>;\n}\n\n/**\n * Password prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const passwordCancellable = createPrompt<string | null, PasswordConfig>(\n (config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const [value, setValue] = useState(\"\");\n const [error, setError] = useState<string | null>(null);\n const theme = makeTheme(inputTheme);\n const prefix = usePrefix({\n status: status === \"cancelled\" ? \"done\" : status,\n theme,\n });\n const mask = config.mask ?? \"*\";\n\n useKeypress(async (key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n if (config.validate) {\n const result = await config.validate(value);\n if (result !== true) {\n setError(typeof result === \"string\" ? result : \"Invalid input\");\n return;\n }\n }\n setStatus(\"done\");\n done(value);\n } else if (isBackspaceKey(key)) {\n setValue(value.slice(0, -1));\n setError(null);\n } else if (key.name !== \"tab\" && !key.ctrl && !(key as any).meta) {\n // Use key.sequence for single character to avoid rl.line buffer issues\n const char = (key as any).sequence ?? \"\";\n if (char) {\n rl.clearLine(0);\n setValue(value + char);\n setError(null);\n }\n }\n });\n\n const masked = mask.repeat(value.length);\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.dim(masked)}`;\n }\n\n const helpTip = colors.dim(\"(Esc to cancel)\");\n const errorMsg = error ? colors.red(`\\n> ${error}`) : \"\";\n return `${prefix} ${config.message} ${helpTip} ${masked}${errorMsg}`;\n },\n);\n\ninterface ConfirmConfig {\n message: string;\n default?: boolean;\n}\n\n/**\n * Confirm prompt with escape key support.\n * Returns null if user presses Escape.\n */\nexport const confirmCancellable = createPrompt<boolean | null, ConfirmConfig>(\n (config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n // Track value as undefined when no default, requiring explicit y/n\n const [value, setValue] = useState<boolean | undefined>(config.default);\n const theme = makeTheme(inputTheme);\n const prefix = usePrefix({\n status: status === \"cancelled\" ? \"done\" : status,\n theme,\n });\n\n useKeypress((key) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key)) {\n // Only accept Enter if a value has been chosen (explicit or default)\n if (value !== undefined) {\n setStatus(\"done\");\n done(value);\n }\n } else if (key.name === \"y\" || key.name === \"Y\") {\n setValue(true);\n } else if (key.name === \"n\" || key.name === \"N\") {\n setValue(false);\n }\n });\n\n const hint =\n config.default === true\n ? \"(Y/n)\"\n : config.default === false\n ? \"(y/N)\"\n : \"(y/n)\";\n const displayValue = value === true ? \"Yes\" : value === false ? \"No\" : \"\";\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.cyan(displayValue)}`;\n }\n\n const helpTip = colors.dim(\"(Esc to cancel)\");\n return `${prefix} ${config.message} ${helpTip} ${hint} ${displayValue}`;\n },\n);\n\n/**\n * Type-safe wrapper for selectCancellable.\n * Returns the selected value with proper typing, or null if cancelled.\n */\nexport async function select<T>(config: SelectConfig<T>): Promise<T | null> {\n return selectCancellable(\n config as SelectConfig<unknown>,\n ) as Promise<T | null>;\n}\n\ninterface SearchConfig<T> {\n message: string;\n source: (\n term: string | undefined,\n ) => Promise<{ name: string; value: T }[]> | { name: string; value: T }[];\n}\n\n/**\n * Search prompt with escape key support.\n * Returns null if user presses Escape.\n *\n * Note: This wraps @inquirer/search which has built-in escape handling,\n * but we provide a consistent API with other cancellable prompts.\n */\nexport const searchCancellable = createPrompt<\n unknown | null,\n SearchConfig<unknown>\n>((config, done) => {\n const [status, setStatus] = useState<\"idle\" | \"done\" | \"cancelled\">(\"idle\");\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [results, setResults] = useState<{ name: string; value: unknown }[]>(\n [],\n );\n const [active, setActive] = useState(0);\n const [loading, setLoading] = useState(false);\n // Store selected item when Enter is pressed to avoid stale closure issues\n const [selectedName, setSelectedName] = useState<string>(\"\");\n const theme = makeTheme(selectTheme);\n const prefix = usePrefix({\n status: status === \"cancelled\" ? \"done\" : status,\n theme,\n });\n\n // Fetch results when search term changes\n useMemo(async () => {\n setLoading(true);\n try {\n const items = await config.source(searchTerm || undefined);\n setResults(items);\n // Don't reset active here - it's reset in keypress handler when user types\n } finally {\n setLoading(false);\n }\n }, [searchTerm]);\n\n useKeypress((key, rl) => {\n if (isEscapeKey(key)) {\n setStatus(\"cancelled\");\n done(null);\n } else if (isEnterKey(key) && results.length > 0) {\n const selected = results[active];\n setSelectedName(selected?.name ?? \"\");\n setStatus(\"done\");\n done(selected?.value ?? null);\n } else if (isUpKey(key) && results.length > 0) {\n setActive(active > 0 ? active - 1 : results.length - 1);\n } else if (isDownKey(key) && results.length > 0) {\n setActive(active < results.length - 1 ? active + 1 : 0);\n } else if (isBackspaceKey(key)) {\n // Reset active when user modifies search term\n setActive(0);\n setSearchTerm(rl.line);\n } else if (\n key.name !== \"tab\" &&\n key.name !== \"return\" &&\n key.name !== \"enter\" &&\n key.name !== \"up\" &&\n key.name !== \"down\" &&\n key.name !== \"left\" &&\n key.name !== \"right\" &&\n key.name !== \"escape\" &&\n key.name !== \"backspace\" &&\n !key.ctrl &&\n !(key as any).meta\n ) {\n // Reset active when user types new characters (not navigation/action keys)\n setActive(0);\n setSearchTerm(rl.line);\n }\n });\n\n if (status === \"cancelled\") {\n return `${prefix} ${config.message} ${colors.dim(\"(cancelled)\")}`;\n }\n\n if (status === \"done\") {\n return `${prefix} ${config.message} ${colors.cyan(selectedName)}`;\n }\n\n const helpTip = colors.dim(\"(Type to search, Esc to cancel)\");\n const searchLine = `${prefix} ${config.message} ${helpTip} ${searchTerm}`;\n\n if (loading) {\n return `${searchLine}\\n${colors.dim(\" Searching...\")}`;\n }\n\n if (results.length === 0) {\n return `${searchLine}\\n${colors.dim(\" No results\")}`;\n }\n\n const resultLines = results\n .slice(0, 7)\n .map((item, i) => {\n const cursor = i === active ? figures.pointer : \" \";\n const color = i === active ? colors.cyan : (x: string) => x;\n return color(`${cursor} ${item.name}`);\n })\n .join(\"\\n\");\n\n return `${searchLine}\\n${resultLines}`;\n});\n"],"mappings":"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","ignoreList":[]}
@@ -54,6 +54,22 @@ export const MultisigScriptModule = Type.Module({
54
54
  })])
55
55
  });
56
56
  export const MultisigScript = MultisigScriptModule.Import("MultisigScript");
57
+ /**
58
+ * Native script input schema: accepts either a CBOR hex string or a MultisigScript JSON structure.
59
+ * Use as an optional array parameter on actions that build transactions.
60
+ */
61
+ export const NativeScriptInputSchema = Type.Union([Type.String({
62
+ description: "Native script CBOR hex"
63
+ }), MultisigScript]);
64
+
65
+ /**
66
+ * Optional array of native scripts to attach to a transaction.
67
+ * Reusable schema fragment for action input definitions.
68
+ */
69
+ export const NativeScriptsParam = Type.Optional(Type.Array(NativeScriptInputSchema, {
70
+ description: "Native scripts to attach to the transaction witness set (CBOR hex or MultisigScript JSON)"
71
+ }));
72
+
57
73
  /**
58
74
  * Provider settings schema for blockchain data providers.
59
75
  */
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","names":["Type","NetworkSchema","Union","Literal","MultisigScriptModule","Module","MultisigScript","Object","Signature","key_hash","String","ctor","AllOf","scripts","Array","Ref","AnyOf","AtLeast","required","BigInt","Before","time","After","Script","script_hash","Import","ProviderSettingsSchema","type","projectId","minLength","title","apiKey","WalletSettingsSchema","privateKey","sensitive","address"],"sources":["../../../src/Sprinkle/schemas.ts"],"sourcesContent":["import { Type } from \"@sinclair/typebox\";\nimport type { TExact } from \"./types.js\";\n\n/**\n * Network selection schema (mainnet, preview, preprod).\n */\nexport const NetworkSchema = Type.Union([\n Type.Literal(\"mainnet\"),\n Type.Literal(\"preview\"),\n Type.Literal(\"preprod\"),\n]);\n\n/**\n * Recursive multisig script module for Cardano native scripts.\n */\nexport const MultisigScriptModule = Type.Module({\n MultisigScript: Type.Union([\n Type.Object({\n Signature: Type.Object(\n {\n key_hash: Type.String(),\n },\n { ctor: 0n },\n ),\n }),\n Type.Object({\n AllOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 1n },\n ),\n }),\n Type.Object({\n AnyOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 2n },\n ),\n }),\n Type.Object({\n AtLeast: Type.Object(\n {\n required: Type.BigInt(),\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 3n },\n ),\n }),\n Type.Object({\n Before: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 4n },\n ),\n }),\n Type.Object({\n After: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 5n },\n ),\n }),\n Type.Object({\n Script: Type.Object(\n {\n script_hash: Type.String(),\n },\n { ctor: 6n },\n ),\n }),\n ]),\n});\n\nexport const MultisigScript = MultisigScriptModule.Import(\"MultisigScript\");\nexport type TMultisigScript = TExact<typeof MultisigScript>;\n\n/**\n * Provider settings schema for blockchain data providers.\n */\nexport const ProviderSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"blockfrost\"),\n projectId: Type.String({ minLength: 1, title: \"Blockfrost Project ID\" }),\n }),\n Type.Object({\n type: Type.Literal(\"maestro\"),\n apiKey: Type.String({ minLength: 1, title: \"Maestro API Key\" }),\n }),\n]);\n\n/**\n * Wallet settings schema for hot and cold wallets.\n */\nexport const WalletSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"hot\"),\n privateKey: Type.String({\n minLength: 1,\n title: \"Hot Wallet Private Key\",\n sensitive: true,\n }),\n }),\n Type.Object({\n type: Type.Literal(\"cold\"),\n address: Type.String({ minLength: 1, title: \"Cold Wallet Address\" }),\n }),\n]);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"schemas.js","names":["Type","NetworkSchema","Union","Literal","MultisigScriptModule","Module","MultisigScript","Object","Signature","key_hash","String","ctor","AllOf","scripts","Array","Ref","AnyOf","AtLeast","required","BigInt","Before","time","After","Script","script_hash","Import","NativeScriptInputSchema","description","NativeScriptsParam","Optional","ProviderSettingsSchema","type","projectId","minLength","title","apiKey","WalletSettingsSchema","privateKey","sensitive","address"],"sources":["../../../src/Sprinkle/schemas.ts"],"sourcesContent":["import { Type } from \"@sinclair/typebox\";\nimport type { TExact } from \"./types.js\";\n\n/**\n * Network selection schema (mainnet, preview, preprod).\n */\nexport const NetworkSchema = Type.Union([\n Type.Literal(\"mainnet\"),\n Type.Literal(\"preview\"),\n Type.Literal(\"preprod\"),\n]);\n\n/**\n * Recursive multisig script module for Cardano native scripts.\n */\nexport const MultisigScriptModule = Type.Module({\n MultisigScript: Type.Union([\n Type.Object({\n Signature: Type.Object(\n {\n key_hash: Type.String(),\n },\n { ctor: 0n },\n ),\n }),\n Type.Object({\n AllOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 1n },\n ),\n }),\n Type.Object({\n AnyOf: Type.Object(\n {\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 2n },\n ),\n }),\n Type.Object({\n AtLeast: Type.Object(\n {\n required: Type.BigInt(),\n scripts: Type.Array(Type.Ref(\"MultisigScript\")),\n },\n { ctor: 3n },\n ),\n }),\n Type.Object({\n Before: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 4n },\n ),\n }),\n Type.Object({\n After: Type.Object(\n {\n time: Type.BigInt(),\n },\n { ctor: 5n },\n ),\n }),\n Type.Object({\n Script: Type.Object(\n {\n script_hash: Type.String(),\n },\n { ctor: 6n },\n ),\n }),\n ]),\n});\n\nexport const MultisigScript = MultisigScriptModule.Import(\"MultisigScript\");\nexport type TMultisigScript = TExact<typeof MultisigScript>;\n\n/**\n * Native script input schema: accepts either a CBOR hex string or a MultisigScript JSON structure.\n * Use as an optional array parameter on actions that build transactions.\n */\nexport const NativeScriptInputSchema = Type.Union([\n Type.String({ description: \"Native script CBOR hex\" }),\n MultisigScript,\n]);\n\n/**\n * Optional array of native scripts to attach to a transaction.\n * Reusable schema fragment for action input definitions.\n */\nexport const NativeScriptsParam = Type.Optional(\n Type.Array(NativeScriptInputSchema, {\n description:\n \"Native scripts to attach to the transaction witness set (CBOR hex or MultisigScript JSON)\",\n }),\n);\n\n/**\n * Provider settings schema for blockchain data providers.\n */\nexport const ProviderSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"blockfrost\"),\n projectId: Type.String({ minLength: 1, title: \"Blockfrost Project ID\" }),\n }),\n Type.Object({\n type: Type.Literal(\"maestro\"),\n apiKey: Type.String({ minLength: 1, title: \"Maestro API Key\" }),\n }),\n]);\n\n/**\n * Wallet settings schema for hot and cold wallets.\n */\nexport const WalletSettingsSchema = Type.Union([\n Type.Object({\n type: Type.Literal(\"hot\"),\n privateKey: Type.String({\n minLength: 1,\n title: \"Hot Wallet Private Key\",\n sensitive: true,\n }),\n }),\n Type.Object({\n type: Type.Literal(\"cold\"),\n address: Type.String({ minLength: 1, title: \"Cold Wallet Address\" }),\n }),\n]);\n"],"mappings":"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","ignoreList":[]}
@@ -8,6 +8,9 @@ export const isOptional = t => t[OptionalKind] === "Optional";
8
8
  export const isImport = t => t[Kind] === "Import";
9
9
  export const isArray = t => t[Kind] === "Array";
10
10
  export const isBigInt = t => t[Kind] === "BigInt";
11
+ export const isBoolean = t => t[Kind] === "Boolean";
12
+ export const isInteger = t => t[Kind] === "Integer";
13
+ export const isNumber = t => t[Kind] === "Number";
11
14
  export const isLiteral = t => t[Kind] === "Literal";
12
15
  export const isObject = t => t[Kind] === "Object";
13
16
  export const isRef = t => t[Kind] === "Ref";
@@ -1 +1 @@
1
- {"version":3,"file":"type-guards.js","names":["Kind","OptionalKind","isOptional","t","isImport","isArray","isBigInt","isLiteral","isObject","isRef","isString","isThis","isTuple","isUnion","isSensitive","sensitive","isNull","isNullable","anyOf","some","member","unwrapNullable","nonNull","filter","length","hasDefault","getDefault","default"],"sources":["../../../src/Sprinkle/type-guards.ts"],"sourcesContent":["/**\n * Type guard utilities for TypeBox schema types.\n * These are internal helpers used by FillInStruct, encryption, and other modules.\n */\n\nimport {\n Kind,\n type TBigInt,\n type TLiteral,\n type TNull,\n type TObject,\n type TSchema,\n type TString,\n type TTuple,\n type TUnion,\n type TArray,\n type TThis,\n type TRef,\n type TImport,\n type TOptional,\n type Static,\n OptionalKind,\n} from \"@sinclair/typebox\";\n\nexport const isOptional = <T extends TSchema>(t: T): t is TOptional<T> =>\n t[OptionalKind] === \"Optional\";\n\nexport const isImport = (t: TSchema): t is TImport => t[Kind] === \"Import\";\n\nexport const isArray = (t: TSchema): t is TArray => t[Kind] === \"Array\";\n\nexport const isBigInt = (t: TSchema): t is TBigInt => t[Kind] === \"BigInt\";\n\nexport const isLiteral = (t: TSchema): t is TLiteral => t[Kind] === \"Literal\";\n\nexport const isObject = (t: TSchema): t is TObject => t[Kind] === \"Object\";\n\nexport const isRef = (t: TSchema): t is TRef => t[Kind] === \"Ref\";\n\nexport const isString = (t: TSchema): t is TString => t[Kind] === \"String\";\n\nexport const isThis = (t: TSchema): t is TThis => t[Kind] === \"This\";\n\nexport const isTuple = (t: TSchema): t is TTuple => t[Kind] === \"Tuple\";\n\nexport const isUnion = (t: TSchema): t is TUnion => t[Kind] === \"Union\";\n\n/**\n * Check if a schema field is marked as sensitive.\n * Sensitive fields are encrypted when saved and masked when displayed.\n */\nexport const isSensitive = (t: TSchema): boolean =>\n isString(t) && t.sensitive === true;\n\n/**\n * Check if a schema is a Null type.\n */\nexport const isNull = (t: TSchema): t is TNull => t[Kind] === \"Null\";\n\n/**\n * Check if a schema allows null values.\n * Returns true for TNull or unions containing TNull.\n */\nexport const isNullable = (t: TSchema): boolean => {\n if (isNull(t)) return true;\n if (isUnion(t)) return t.anyOf.some((member) => isNull(member));\n return false;\n};\n\n/**\n * Unwrap a nullable type to get the non-null inner type.\n * For unions with Null, returns the union without the Null member.\n * For single non-null member unions, returns just that type.\n */\nexport const unwrapNullable = (t: TSchema): TSchema => {\n if (isUnion(t)) {\n const nonNull = t.anyOf.filter((member) => !isNull(member));\n if (nonNull.length === 1) return nonNull[0]!;\n return { ...t, anyOf: nonNull } as TSchema;\n }\n return t;\n};\n\n/**\n * Check if a schema has a default value defined.\n */\nexport const hasDefault = (t: TSchema): boolean => \"default\" in t;\n\n/**\n * Get the default value from a schema, if defined.\n */\nexport const getDefault = <T extends TSchema>(t: T): Static<T> | undefined =>\n t.default as Static<T> | undefined;\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA,SACEA,IAAI,EAeJC,YAAY,QACP,mBAAmB;AAE1B,OAAO,MAAMC,UAAU,GAAuBC,CAAI,IAChDA,CAAC,CAACF,YAAY,CAAC,KAAK,UAAU;AAEhC,OAAO,MAAMG,QAAQ,GAAID,CAAU,IAAmBA,CAAC,CAACH,IAAI,CAAC,KAAK,QAAQ;AAE1E,OAAO,MAAMK,OAAO,GAAIF,CAAU,IAAkBA,CAAC,CAACH,IAAI,CAAC,KAAK,OAAO;AAEvE,OAAO,MAAMM,QAAQ,GAAIH,CAAU,IAAmBA,CAAC,CAACH,IAAI,CAAC,KAAK,QAAQ;AAE1E,OAAO,MAAMO,SAAS,GAAIJ,CAAU,IAAoBA,CAAC,CAACH,IAAI,CAAC,KAAK,SAAS;AAE7E,OAAO,MAAMQ,QAAQ,GAAIL,CAAU,IAAmBA,CAAC,CAACH,IAAI,CAAC,KAAK,QAAQ;AAE1E,OAAO,MAAMS,KAAK,GAAIN,CAAU,IAAgBA,CAAC,CAACH,IAAI,CAAC,KAAK,KAAK;AAEjE,OAAO,MAAMU,QAAQ,GAAIP,CAAU,IAAmBA,CAAC,CAACH,IAAI,CAAC,KAAK,QAAQ;AAE1E,OAAO,MAAMW,MAAM,GAAIR,CAAU,IAAiBA,CAAC,CAACH,IAAI,CAAC,KAAK,MAAM;AAEpE,OAAO,MAAMY,OAAO,GAAIT,CAAU,IAAkBA,CAAC,CAACH,IAAI,CAAC,KAAK,OAAO;AAEvE,OAAO,MAAMa,OAAO,GAAIV,CAAU,IAAkBA,CAAC,CAACH,IAAI,CAAC,KAAK,OAAO;;AAEvE;AACA;AACA;AACA;AACA,OAAO,MAAMc,WAAW,GAAIX,CAAU,IACpCO,QAAQ,CAACP,CAAC,CAAC,IAAIA,CAAC,CAACY,SAAS,KAAK,IAAI;;AAErC;AACA;AACA;AACA,OAAO,MAAMC,MAAM,GAAIb,CAAU,IAAiBA,CAAC,CAACH,IAAI,CAAC,KAAK,MAAM;;AAEpE;AACA;AACA;AACA;AACA,OAAO,MAAMiB,UAAU,GAAId,CAAU,IAAc;EACjD,IAAIa,MAAM,CAACb,CAAC,CAAC,EAAE,OAAO,IAAI;EAC1B,IAAIU,OAAO,CAACV,CAAC,CAAC,EAAE,OAAOA,CAAC,CAACe,KAAK,CAACC,IAAI,CAAEC,MAAM,IAAKJ,MAAM,CAACI,MAAM,CAAC,CAAC;EAC/D,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,cAAc,GAAIlB,CAAU,IAAc;EACrD,IAAIU,OAAO,CAACV,CAAC,CAAC,EAAE;IACd,MAAMmB,OAAO,GAAGnB,CAAC,CAACe,KAAK,CAACK,MAAM,CAAEH,MAAM,IAAK,CAACJ,MAAM,CAACI,MAAM,CAAC,CAAC;IAC3D,IAAIE,OAAO,CAACE,MAAM,KAAK,CAAC,EAAE,OAAOF,OAAO,CAAC,CAAC,CAAC;IAC3C,OAAO;MAAE,GAAGnB,CAAC;MAAEe,KAAK,EAAEI;IAAQ,CAAC;EACjC;EACA,OAAOnB,CAAC;AACV,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMsB,UAAU,GAAItB,CAAU,IAAc,SAAS,IAAIA,CAAC;;AAEjE;AACA;AACA;AACA,OAAO,MAAMuB,UAAU,GAAuBvB,CAAI,IAChDA,CAAC,CAACwB,OAAgC","ignoreList":[]}
1
+ {"version":3,"file":"type-guards.js","names":["Kind","OptionalKind","isOptional","t","isImport","isArray","isBigInt","isBoolean","isInteger","isNumber","isLiteral","isObject","isRef","isString","isThis","isTuple","isUnion","isSensitive","sensitive","isNull","isNullable","anyOf","some","member","unwrapNullable","nonNull","filter","length","hasDefault","getDefault","default"],"sources":["../../../src/Sprinkle/type-guards.ts"],"sourcesContent":["/**\n * Type guard utilities for TypeBox schema types.\n * These are internal helpers used by FillInStruct, encryption, and other modules.\n */\n\nimport {\n Kind,\n type TBigInt,\n type TBoolean,\n type TInteger,\n type TLiteral,\n type TNull,\n type TNumber,\n type TObject,\n type TSchema,\n type TString,\n type TTuple,\n type TUnion,\n type TArray,\n type TThis,\n type TRef,\n type TImport,\n type TOptional,\n type Static,\n OptionalKind,\n} from \"@sinclair/typebox\";\n\nexport const isOptional = <T extends TSchema>(t: T): t is TOptional<T> =>\n t[OptionalKind] === \"Optional\";\n\nexport const isImport = (t: TSchema): t is TImport => t[Kind] === \"Import\";\n\nexport const isArray = (t: TSchema): t is TArray => t[Kind] === \"Array\";\n\nexport const isBigInt = (t: TSchema): t is TBigInt => t[Kind] === \"BigInt\";\n\nexport const isBoolean = (t: TSchema): t is TBoolean => t[Kind] === \"Boolean\";\n\nexport const isInteger = (t: TSchema): t is TInteger => t[Kind] === \"Integer\";\n\nexport const isNumber = (t: TSchema): t is TNumber => t[Kind] === \"Number\";\n\nexport const isLiteral = (t: TSchema): t is TLiteral => t[Kind] === \"Literal\";\n\nexport const isObject = (t: TSchema): t is TObject => t[Kind] === \"Object\";\n\nexport const isRef = (t: TSchema): t is TRef => t[Kind] === \"Ref\";\n\nexport const isString = (t: TSchema): t is TString => t[Kind] === \"String\";\n\nexport const isThis = (t: TSchema): t is TThis => t[Kind] === \"This\";\n\nexport const isTuple = (t: TSchema): t is TTuple => t[Kind] === \"Tuple\";\n\nexport const isUnion = (t: TSchema): t is TUnion => t[Kind] === \"Union\";\n\n/**\n * Check if a schema field is marked as sensitive.\n * Sensitive fields are encrypted when saved and masked when displayed.\n */\nexport const isSensitive = (t: TSchema): boolean =>\n isString(t) && t.sensitive === true;\n\n/**\n * Check if a schema is a Null type.\n */\nexport const isNull = (t: TSchema): t is TNull => t[Kind] === \"Null\";\n\n/**\n * Check if a schema allows null values.\n * Returns true for TNull or unions containing TNull.\n */\nexport const isNullable = (t: TSchema): boolean => {\n if (isNull(t)) return true;\n if (isUnion(t)) return t.anyOf.some((member) => isNull(member));\n return false;\n};\n\n/**\n * Unwrap a nullable type to get the non-null inner type.\n * For unions with Null, returns the union without the Null member.\n * For single non-null member unions, returns just that type.\n */\nexport const unwrapNullable = (t: TSchema): TSchema => {\n if (isUnion(t)) {\n const nonNull = t.anyOf.filter((member) => !isNull(member));\n if (nonNull.length === 1) return nonNull[0]!;\n return { ...t, anyOf: nonNull } as TSchema;\n }\n return t;\n};\n\n/**\n * Check if a schema has a default value defined.\n */\nexport const hasDefault = (t: TSchema): boolean => \"default\" in t;\n\n/**\n * Get the default value from a schema, if defined.\n */\nexport const getDefault = <T extends TSchema>(t: T): Static<T> | undefined =>\n t.default as Static<T> | undefined;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Built-in addressbook actions for managing named native scripts.
3
+ *
4
+ * The addressbook stores MultisigScript entries by name in the profile,
5
+ * allowing them to be reused across actions and automatically resolved
6
+ * by script hash during transaction building.
7
+ */
8
+ import type { TSchema } from "@sinclair/typebox";
9
+ import type { TMultisigScript } from "../../schemas.js";
10
+ import type { IAction } from "../types.js";
11
+ /**
12
+ * `list-addressbook` -- List all entries in the addressbook.
13
+ */
14
+ export declare const listAddressbook: IAction<Record<string, never>, {
15
+ entries: Array<{
16
+ name: string;
17
+ scriptHash: string;
18
+ script: TMultisigScript;
19
+ }>;
20
+ }, TSchema>;
21
+ /**
22
+ * `set-addressbook-entry` -- Add or update a named native script in the addressbook.
23
+ */
24
+ export declare const setAddressbookEntry: IAction<{
25
+ name: string;
26
+ script: TMultisigScript;
27
+ }, {
28
+ name: string;
29
+ scriptHash: string;
30
+ }, TSchema>;
31
+ /**
32
+ * `delete-addressbook-entry` -- Remove a named native script from the addressbook.
33
+ */
34
+ export declare const deleteAddressbookEntry: IAction<{
35
+ name: string;
36
+ }, {
37
+ deleted: boolean;
38
+ name: string;
39
+ }, TSchema>;
40
+ /**
41
+ * `get-addressbook-entry` -- Get a specific named native script from the addressbook.
42
+ */
43
+ export declare const getAddressbookEntry: IAction<{
44
+ name: string;
45
+ }, {
46
+ name: string;
47
+ scriptHash: string;
48
+ script: TMultisigScript;
49
+ }, TSchema>;
50
+ //# sourceMappingURL=addressbook-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressbook-actions.d.ts","sourceRoot":"","sources":["../../../../../src/Sprinkle/actions/builtin/addressbook-actions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,CACnC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CAAA;CAAE,EACjF,OAAO,CA6BR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,EACzC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EACpC,OAAO,CA2BR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,OAAO,CAC1C;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAChB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAClC,OAAO,CA6BR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAAO,CACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,EAC7D,OAAO,CAoCR,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Shared helper utilities for wallet and transaction actions.
3
+ * Provides Blaze instance creation from action context settings.
4
+ */
5
+ import type { TSchema } from "@sinclair/typebox";
6
+ import { Blaze } from "@blaze-cardano/sdk";
7
+ import type { Provider } from "@blaze-cardano/query";
8
+ import type { Wallet } from "@blaze-cardano/sdk";
9
+ import type { IActionContext } from "../types.js";
10
+ import type { NetworkSchema, ProviderSettingsSchema, WalletSettingsSchema } from "../../schemas.js";
11
+ import type { TExact } from "../../types.js";
12
+ /** Settings shape expected on context.settings for wallet access */
13
+ export interface IWalletSettings {
14
+ network?: TExact<typeof NetworkSchema>;
15
+ provider?: TExact<typeof ProviderSettingsSchema>;
16
+ wallet?: TExact<typeof WalletSettingsSchema>;
17
+ }
18
+ /** Optional overrides for Blaze initialization, in case field names differ */
19
+ export interface IBlazeOverrides {
20
+ network?: TExact<typeof NetworkSchema>;
21
+ provider?: TExact<typeof ProviderSettingsSchema>;
22
+ wallet?: TExact<typeof WalletSettingsSchema>;
23
+ }
24
+ /**
25
+ * Creates a Blaze instance from action context settings.
26
+ *
27
+ * Falls back to `context.settings.network`, `context.settings.provider`,
28
+ * and `context.settings.wallet` when overrides are not provided.
29
+ *
30
+ * @throws `ActionError("WALLET_NOT_CONFIGURED")` if required settings are missing
31
+ * @throws `ActionError("BLAZE_INIT_ERROR")` if Blaze fails to initialize
32
+ */
33
+ export declare function getBlazeFromContext<S extends TSchema>(context: IActionContext<S>, overrides?: IBlazeOverrides): Promise<Blaze<Provider, Wallet>>;
34
+ /**
35
+ * Checks whether the wallet in a Blaze instance is a hot wallet.
36
+ * Cold wallets cannot sign transactions.
37
+ */
38
+ export declare function isHotWallet(blaze: Blaze<Provider, Wallet>): boolean;
39
+ //# sourceMappingURL=blaze-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blaze-helper.d.ts","sourceRoot":"","sources":["../../../../../src/Sprinkle/actions/builtin/blaze-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAa,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;CAC9C;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,aAAa,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;CAC9C;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,OAAO,EACzD,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAC1B,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAmClC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAEnE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Barrel export for built-in Sprinkle actions.
3
+ *
4
+ * Provides a `getBuiltinActions()` factory that returns all 17 built-in actions
5
+ * ready for registration on an ActionRegistry.
6
+ */
7
+ import type { TSchema } from "@sinclair/typebox";
8
+ import type { AnyAction } from "../types.js";
9
+ export { listProfiles, getProfile, setProfile, createProfile, deleteProfile, } from "./profile-actions.js";
10
+ export { getSettings, updateSettings } from "./settings-actions.js";
11
+ export { getWalletAddress, getWalletBalance, getWalletUtxos, } from "./wallet-actions.js";
12
+ export { signTransaction, submitTransaction, signAndSubmit, decodeTransaction, } from "./transaction-actions.js";
13
+ export { mintToken, simpleSend, registerStakeScript, } from "./utility-actions.js";
14
+ export { toNativeScript, completeWithScripts, } from "./native-script.js";
15
+ export type { NativeScriptInput } from "./native-script.js";
16
+ export { listAddressbook, getAddressbookEntry, setAddressbookEntry, deleteAddressbookEntry, } from "./addressbook-actions.js";
17
+ /**
18
+ * Returns all built-in Sprinkle actions.
19
+ * Register them on your ActionRegistry or pass them to `Sprinkle.run()`.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const sprinkle = new Sprinkle(MySchema, storagePath);
24
+ * for (const action of getBuiltinActions()) {
25
+ * sprinkle.registerAction(action);
26
+ * }
27
+ * ```
28
+ */
29
+ export declare function getBuiltinActions<S extends TSchema>(): AnyAction<S>[];
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/Sprinkle/actions/builtin/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,SAAS,EACT,UAAU,EACV,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,cAAc,EACd,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAsClC;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAwBrE"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Native script utilities for Sprinkle actions.
3
+ *
4
+ * Provides conversion from user-friendly input formats (CBOR hex or structured JSON)
5
+ * to Blaze NativeScript objects, and a helper to attach scripts during tx completion.
6
+ */
7
+ import { Core } from "@blaze-cardano/sdk";
8
+ import type { TxBuilder } from "@blaze-cardano/tx";
9
+ import type { TSchema } from "@sinclair/typebox";
10
+ import type { TMultisigScript } from "../../schemas.js";
11
+ import type { IActionContext } from "../types.js";
12
+ /** Input type: either a CBOR hex string or a MultisigScript JSON structure */
13
+ export type NativeScriptInput = string | TMultisigScript;
14
+ /**
15
+ * Converts a native script input (CBOR hex string or MultisigScript JSON)
16
+ * to a Blaze Script object suitable for `provideScript()`.
17
+ */
18
+ export declare function toNativeScript(input: NativeScriptInput): Core.Script;
19
+ /**
20
+ * Attaches optional native scripts to a transaction builder and completes it.
21
+ *
22
+ * If completion fails because Blaze cannot resolve a required native script hash,
23
+ * and a context with an addressbook is provided, it will look up the missing script
24
+ * by hash in the addressbook and retry once.
25
+ */
26
+ export declare function completeWithScripts<S extends TSchema>(txBuilder: TxBuilder, nativeScripts?: NativeScriptInput[], context?: IActionContext<S>): Promise<Core.Transaction>;
27
+ //# sourceMappingURL=native-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-script.d.ts","sourceRoot":"","sources":["../../../../../src/Sprinkle/actions/builtin/native-script.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,eAAe,CAAC;AAiDzD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC,MAAM,CA2BpE;AA0BD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,OAAO,EACzD,SAAS,EAAE,SAAS,EACpB,aAAa,CAAC,EAAE,iBAAiB,EAAE,EACnC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAgC3B"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Built-in profile management actions for the Sprinkle action system.
3
+ * These actions expose profile CRUD operations as non-interactive actions
4
+ * available in CLI and MCP modes.
5
+ *
6
+ * All actions use category "sprinkles".
7
+ */
8
+ import type { TSchema } from "@sinclair/typebox";
9
+ import type { IAction } from "../types.js";
10
+ /**
11
+ * `list-profiles` -- Returns all profiles and the active profile ID.
12
+ */
13
+ export declare const listProfiles: IAction<Record<string, never>, {
14
+ profiles: unknown[];
15
+ activeProfileId: string | undefined;
16
+ }, TSchema>;
17
+ /**
18
+ * `get-profile` -- Returns metadata and settings for a specific profile.
19
+ * Settings are masked by default; pass `includeSensitive: true` to get raw values.
20
+ */
21
+ export declare const getProfile: IAction<{
22
+ id: string;
23
+ includeSensitive?: boolean;
24
+ }, unknown, TSchema>;
25
+ /**
26
+ * `set-profile` -- Switch the active profile.
27
+ */
28
+ export declare const setProfile: IAction<{
29
+ id: string;
30
+ }, {
31
+ id: string;
32
+ name: string;
33
+ }, TSchema>;
34
+ /**
35
+ * `create-profile` -- Create a new profile without prompts.
36
+ */
37
+ export declare const createProfile: IAction<{
38
+ name: string;
39
+ description?: string;
40
+ settings?: unknown;
41
+ }, {
42
+ id: string;
43
+ name: string;
44
+ }, TSchema>;
45
+ /**
46
+ * `delete-profile` -- Delete a profile by ID.
47
+ * Cannot delete the only profile or the currently active profile.
48
+ */
49
+ export declare const deleteProfile: IAction<{
50
+ id: string;
51
+ }, {
52
+ deleted: boolean;
53
+ id: string;
54
+ }, TSchema>;
55
+ //# sourceMappingURL=profile-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-actions.d.ts","sourceRoot":"","sources":["../../../../../src/Sprinkle/actions/builtin/profile-actions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,OAAO,CAChC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACrB;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC5D,OAAO,CAwBR,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,CAC9B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1C,OAAO,EACP,OAAO,CAwER,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,CAC9B;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACd;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC5B,OAAO,CA4BR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1D;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC5B,OAAO,CAyBR,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CACjC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAChC,OAAO,CAiBR,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Built-in settings actions for the Sprinkle action system.
3
+ * These actions expose settings read and update operations as non-interactive
4
+ * actions available in CLI and MCP modes.
5
+ *
6
+ * All actions use category "sprinkles".
7
+ */
8
+ import type { TSchema } from "@sinclair/typebox";
9
+ import type { IAction } from "../types.js";
10
+ /**
11
+ * `get-settings` -- Returns the current profile settings.
12
+ * Sensitive fields are masked by default; pass `includeSensitive: true` for raw values.
13
+ */
14
+ export declare const getSettings: IAction<{
15
+ includeSensitive?: boolean;
16
+ }, {
17
+ settings: unknown;
18
+ profileId: string;
19
+ profileName: string;
20
+ }, TSchema>;
21
+ /**
22
+ * `update-settings` -- Shallow-merges settings onto the current profile and persists.
23
+ * Validates the merged result against the Sprinkle schema before saving.
24
+ * Returns masked settings.
25
+ */
26
+ export declare const updateSettings: IAction<{
27
+ settings: Record<string, unknown>;
28
+ }, {
29
+ settings: unknown;
30
+ profileId: string;
31
+ }, TSchema>;
32
+ //# sourceMappingURL=settings-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-actions.d.ts","sourceRoot":"","sources":["../../../../../src/Sprinkle/actions/builtin/settings-actions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,OAAO,CAC/B;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9B;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC7D,OAAO,CAyBR,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAClC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EACrC;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACxC,OAAO,CA0CR,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Built-in transaction actions for the Sprinkle action system.
3
+ * These actions expose transaction signing, submission, and decoding
4
+ * as non-interactive actions available in CLI and MCP modes.
5
+ *
6
+ * Sign/submit actions use category "wallet".
7
+ * The decode action uses category "transaction" (no wallet required).
8
+ */
9
+ import type { TSchema } from "@sinclair/typebox";
10
+ import type { IAction } from "../types.js";
11
+ /**
12
+ * `sign-transaction` -- Signs a transaction with the configured hot wallet.
13
+ * Cold wallets cannot sign; use an external signing tool and submit the result.
14
+ */
15
+ export declare const signTransaction: IAction<{
16
+ txCbor: string;
17
+ }, {
18
+ signedTxCbor: string;
19
+ txHash: string;
20
+ signatureCount: number;
21
+ }, TSchema>;
22
+ /**
23
+ * `submit-transaction` -- Submits a signed transaction to the blockchain.
24
+ */
25
+ export declare const submitTransaction: IAction<{
26
+ txCbor: string;
27
+ }, {
28
+ txHash: string;
29
+ submitted: boolean;
30
+ }, TSchema>;
31
+ /**
32
+ * `sign-and-submit` -- Signs a transaction and immediately submits it.
33
+ * Optionally waits for on-chain confirmation with a configurable timeout.
34
+ */
35
+ export declare const signAndSubmit: IAction<{
36
+ txCbor: string;
37
+ waitForConfirmation?: boolean;
38
+ confirmationTimeout?: number;
39
+ }, {
40
+ txHash: string;
41
+ submitted: boolean;
42
+ confirmed?: boolean;
43
+ signedTxCbor: string;
44
+ }, TSchema>;
45
+ /**
46
+ * `decode-transaction` -- Decodes a transaction CBOR hex without requiring a wallet.
47
+ * Extracts inputs, outputs, fee, witness count, and required signers from the tx body.
48
+ */
49
+ export declare const decodeTransaction: IAction<{
50
+ txCbor: string;
51
+ }, {
52
+ txHash: string;
53
+ inputs: Array<{
54
+ txHash: string;
55
+ outputIndex: number;
56
+ }>;
57
+ outputs: Array<{
58
+ address: string;
59
+ lovelace: string;
60
+ tokens: Array<{
61
+ policyId: string;
62
+ assetName: string;
63
+ quantity: string;
64
+ }>;
65
+ }>;
66
+ fee: string;
67
+ signatureCount: number;
68
+ requiredSigners: string[];
69
+ }, TSchema>;
70
+ //# sourceMappingURL=transaction-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-actions.d.ts","sourceRoot":"","sources":["../../../../../src/Sprinkle/actions/builtin/transaction-actions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AA2B3C;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,OAAO,CACnC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAClB;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAChE,OAAO,CA2CR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CACrC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EACtC,OAAO,CAgCR,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CACjC;IACE,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,EACD;IACE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,EACD,OAAO,CAgIR,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,OAAO,CACrC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAClB;IACE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC1E,CAAC,CAAC;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,EACD,OAAO,CAoFR,CAAC"}