@pikku/core 0.12.107 → 0.12.112

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 (594) hide show
  1. package/CHANGELOG.md +357 -0
  2. package/dist/analytics/analytics.d.ts +6 -0
  3. package/dist/analytics/analytics.js +58 -0
  4. package/dist/analytics/analytics.types.d.ts +156 -0
  5. package/dist/analytics/analytics.types.js +1 -0
  6. package/dist/analytics/anonymous-analytics-identity.d.ts +23 -0
  7. package/dist/analytics/anonymous-analytics-identity.js +27 -0
  8. package/dist/analytics/compose-analytics-identity.d.ts +14 -0
  9. package/dist/analytics/compose-analytics-identity.js +33 -0
  10. package/dist/analytics/cookie-analytics-identity.d.ts +24 -0
  11. package/dist/analytics/cookie-analytics-identity.js +37 -0
  12. package/dist/analytics/define-analytics-events.d.ts +22 -0
  13. package/dist/analytics/define-analytics-events.js +9 -0
  14. package/dist/analytics/fan-out-analytics.d.ts +15 -0
  15. package/dist/analytics/fan-out-analytics.js +36 -0
  16. package/dist/analytics/index.d.ts +13 -0
  17. package/dist/analytics/index.js +8 -0
  18. package/dist/analytics/logger-analytics-service.d.ts +14 -0
  19. package/dist/analytics/logger-analytics-service.js +23 -0
  20. package/dist/analytics/mint-cookie.d.ts +44 -0
  21. package/dist/analytics/mint-cookie.js +55 -0
  22. package/dist/dev/hot-reload.d.ts +0 -1
  23. package/dist/dev/hot-reload.js +4 -25
  24. package/dist/dev/module-runner.js +104 -25
  25. package/dist/errors/errors.d.ts +7 -0
  26. package/dist/errors/errors.js +17 -0
  27. package/dist/function/function-meta.types.d.ts +2 -0
  28. package/dist/function/function-runner.js +29 -0
  29. package/dist/function/functions.types.d.ts +22 -3
  30. package/dist/middleware/auth-apikey.d.ts +1 -1
  31. package/dist/pikku-state.d.ts +1 -1
  32. package/dist/scopes.d.ts +11 -0
  33. package/dist/scopes.js +17 -0
  34. package/dist/services/credential-wire-service.d.ts +1 -1
  35. package/dist/services/feature-flag-service.d.ts +100 -0
  36. package/dist/services/feature-flag-service.js +1 -0
  37. package/dist/services/index.d.ts +1 -0
  38. package/dist/services/meta-service.d.ts +16 -0
  39. package/dist/services/meta-service.js +19 -0
  40. package/dist/services/webhook-service.d.ts +7 -2
  41. package/dist/services/webhook-service.js +11 -6
  42. package/dist/testing/service-tests/agent-run-service-tests.d.ts +2 -2
  43. package/dist/testing/service-tests/agent-storage-service-tests.d.ts +1 -1
  44. package/dist/testing/service-tests/channel-store-tests.d.ts +1 -1
  45. package/dist/testing/service-tests/credential-service-tests.d.ts +1 -1
  46. package/dist/testing/service-tests/deployment-service-tests.d.ts +1 -1
  47. package/dist/testing/service-tests/event-hub-store-tests.d.ts +1 -1
  48. package/dist/testing/service-tests/secret-service-tests.d.ts +1 -1
  49. package/dist/testing/service-tests/session-store-tests.d.ts +1 -1
  50. package/dist/testing/service-tests/workflow-run-service-tests.d.ts +1 -1
  51. package/dist/testing/service-tests/workflow-service-tests.d.ts +1 -1
  52. package/dist/types/core.types.d.ts +23 -0
  53. package/dist/wirings/agent/agent-rpc.d.ts +1 -1
  54. package/dist/wirings/agent/agent-turn.d.ts +1 -1
  55. package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +1 -1
  56. package/dist/wirings/channel/channel-common.d.ts +1 -1
  57. package/dist/wirings/channel/channel-rpc-validators.d.ts +2 -2
  58. package/dist/wirings/channel/channel-runner.d.ts +1 -1
  59. package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
  60. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
  61. package/dist/wirings/cli/channel/cli-approval.d.ts +2 -2
  62. package/dist/wirings/flag/assert-feature-available.d.ts +15 -0
  63. package/dist/wirings/flag/assert-feature-available.js +23 -0
  64. package/dist/wirings/flag/cached-flag-source.d.ts +73 -0
  65. package/dist/wirings/flag/cached-flag-source.js +96 -0
  66. package/dist/wirings/flag/define-feature-flags.d.ts +33 -0
  67. package/dist/wirings/flag/define-feature-flags.js +32 -0
  68. package/dist/wirings/flag/flag.types.d.ts +97 -0
  69. package/dist/wirings/flag/flag.types.js +1 -0
  70. package/dist/wirings/flag/index.d.ts +7 -0
  71. package/dist/wirings/flag/index.js +5 -0
  72. package/dist/wirings/flag/resolve-flag.d.ts +52 -0
  73. package/dist/wirings/flag/resolve-flag.js +90 -0
  74. package/dist/wirings/flag/validate-flag-definitions.d.ts +26 -0
  75. package/dist/wirings/flag/validate-flag-definitions.js +103 -0
  76. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
  77. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
  78. package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
  79. package/knowledge/decisions/internals/a-reset-suite-makes-the-dev-seed-the-fixture.md +50 -0
  80. package/knowledge/decisions/internals/hot-reload-reads-the-changed-source-never-a-compiled-copy.md +38 -0
  81. package/knowledge/decisions/internals/index.md +2 -0
  82. package/package.json +11 -5
  83. package/run-tests.sh +17 -9
  84. package/src/public-surface.json +26 -0
  85. package/src/agent-naming.test.ts +0 -68
  86. package/src/api-report.test.ts +0 -138
  87. package/src/app-alias-surface.test.ts +0 -179
  88. package/src/app-leaf-surface.test.ts +0 -222
  89. package/src/bootstrap-compat/root.ts +0 -20
  90. package/src/classification/column-form.test.ts +0 -97
  91. package/src/classification/column-form.ts +0 -55
  92. package/src/classification/data-classification.ts +0 -73
  93. package/src/classification/index.ts +0 -40
  94. package/src/classification/key-ids.ts +0 -2
  95. package/src/classification/secret-value.test.ts +0 -204
  96. package/src/classification/secret-value.ts +0 -106
  97. package/src/crypto-utils.test.ts +0 -668
  98. package/src/crypto-utils.ts +0 -460
  99. package/src/dev/hot-reload.test.ts +0 -587
  100. package/src/dev/hot-reload.ts +0 -225
  101. package/src/dev/module-runner.test.ts +0 -235
  102. package/src/dev/module-runner.ts +0 -138
  103. package/src/dev/reload-meta.test.ts +0 -183
  104. package/src/dev/reload-meta.ts +0 -144
  105. package/src/ecosystem-tier-removed.test.ts +0 -72
  106. package/src/env.ts +0 -1
  107. package/src/errors/error-handler.ts +0 -77
  108. package/src/errors/error.test.ts +0 -229
  109. package/src/errors/errors.ts +0 -393
  110. package/src/errors/index.ts +0 -11
  111. package/src/errors/serialized-error.ts +0 -12
  112. package/src/factory-functions.test.ts +0 -111
  113. package/src/function/abort-scope.test.ts +0 -97
  114. package/src/function/abort-scope.ts +0 -80
  115. package/src/function/function-meta.types.ts +0 -151
  116. package/src/function/function-runner.test.ts +0 -1619
  117. package/src/function/function-runner.ts +0 -499
  118. package/src/function/functions.types.ts +0 -319
  119. package/src/function/index.ts +0 -40
  120. package/src/function/list.types.test.ts +0 -100
  121. package/src/function/list.types.ts +0 -69
  122. package/src/function/pikku-request.test.ts +0 -35
  123. package/src/function/pikku-request.ts +0 -17
  124. package/src/gopass-secrets-removed.test.ts +0 -51
  125. package/src/handle-error.test.ts +0 -532
  126. package/src/handle-error.ts +0 -64
  127. package/src/middleware/auth-apikey.test.ts +0 -362
  128. package/src/middleware/auth-apikey.ts +0 -39
  129. package/src/middleware/auth-bearer.test.ts +0 -566
  130. package/src/middleware/auth-bearer.ts +0 -83
  131. package/src/middleware/auth-cookie.test.ts +0 -572
  132. package/src/middleware/auth-cookie.ts +0 -107
  133. package/src/middleware/cors.test.ts +0 -579
  134. package/src/middleware/cors.ts +0 -103
  135. package/src/middleware/index.ts +0 -30
  136. package/src/middleware/middleware-factories.ts +0 -76
  137. package/src/middleware/middleware.types.ts +0 -61
  138. package/src/middleware/remote-auth.test.ts +0 -547
  139. package/src/middleware/remote-auth.ts +0 -95
  140. package/src/middleware/remote-jobs-secret.ts +0 -35
  141. package/src/middleware/require-origin.test.ts +0 -115
  142. package/src/middleware/require-origin.ts +0 -79
  143. package/src/middleware/telemetry.ts +0 -83
  144. package/src/middleware-runner.test.ts +0 -578
  145. package/src/middleware-runner.ts +0 -232
  146. package/src/no-any-casts.test.ts +0 -57
  147. package/src/no-root-barrel.test.ts +0 -122
  148. package/src/permissions.test.ts +0 -256
  149. package/src/permissions.ts +0 -217
  150. package/src/pikku-state.test.ts +0 -198
  151. package/src/pikku-state.ts +0 -206
  152. package/src/production-barrels-stay-lean.test.ts +0 -110
  153. package/src/public-surface.test.ts +0 -133
  154. package/src/remote.test.ts +0 -173
  155. package/src/remote.ts +0 -56
  156. package/src/removed-legacy-exports.test.ts +0 -66
  157. package/src/run-tests-script.test.ts +0 -67
  158. package/src/schema.test.ts +0 -430
  159. package/src/schema.ts +0 -204
  160. package/src/scopes.test.ts +0 -203
  161. package/src/scopes.ts +0 -67
  162. package/src/services/agent-run-state-service.ts +0 -37
  163. package/src/services/agent-runner-service.ts +0 -238
  164. package/src/services/agent-storage-service.ts +0 -39
  165. package/src/services/ai-embedding-service.ts +0 -9
  166. package/src/services/audit-service.test.ts +0 -44
  167. package/src/services/audit-service.ts +0 -280
  168. package/src/services/content-service.ts +0 -65
  169. package/src/services/credential-service.ts +0 -20
  170. package/src/services/credential-wire-service.test.ts +0 -235
  171. package/src/services/credential-wire-service.ts +0 -120
  172. package/src/services/deployment-service.ts +0 -32
  173. package/src/services/email-service.test.ts +0 -100
  174. package/src/services/email-service.ts +0 -60
  175. package/src/services/email-template.test.ts +0 -311
  176. package/src/services/email-template.ts +0 -254
  177. package/src/services/file-scenario-run-store.test.ts +0 -349
  178. package/src/services/file-scenario-run-store.ts +0 -282
  179. package/src/services/gateway-service.ts +0 -5
  180. package/src/services/http-personas-converse.test.ts +0 -274
  181. package/src/services/http-personas.test.ts +0 -379
  182. package/src/services/http-personas.ts +0 -508
  183. package/src/services/in-memory-agent-run-state-service.ts +0 -87
  184. package/src/services/in-memory-queue-service.test.ts +0 -162
  185. package/src/services/in-memory-queue-service.ts +0 -78
  186. package/src/services/in-memory-session-store.test.ts +0 -58
  187. package/src/services/in-memory-session-store.ts +0 -20
  188. package/src/services/in-memory-trigger-service.ts +0 -47
  189. package/src/services/in-memory-workflow-service.test.ts +0 -430
  190. package/src/services/in-memory-workflow-service.ts +0 -595
  191. package/src/services/index.ts +0 -192
  192. package/src/services/istanbul-coverage-service.test.ts +0 -66
  193. package/src/services/istanbul-coverage-service.ts +0 -59
  194. package/src/services/jwt-service.ts +0 -15
  195. package/src/services/local-content-request-handler.test.ts +0 -240
  196. package/src/services/local-content-request-handler.ts +0 -295
  197. package/src/services/local-content.test.ts +0 -186
  198. package/src/services/local-content.ts +0 -242
  199. package/src/services/local-credential-service.ts +0 -63
  200. package/src/services/local-email-service.test.ts +0 -182
  201. package/src/services/local-email-service.ts +0 -43
  202. package/src/services/local-gateway-service.ts +0 -51
  203. package/src/services/local-secrets.test.ts +0 -95
  204. package/src/services/local-secrets.ts +0 -71
  205. package/src/services/local-variables.test.ts +0 -61
  206. package/src/services/local-variables.ts +0 -45
  207. package/src/services/logger-console.test.ts +0 -117
  208. package/src/services/logger-console.ts +0 -174
  209. package/src/services/logger.ts +0 -48
  210. package/src/services/meta-service.test.ts +0 -75
  211. package/src/services/meta-service.ts +0 -767
  212. package/src/services/persona-actor-secret.test.ts +0 -68
  213. package/src/services/persona-actor-secret.ts +0 -70
  214. package/src/services/persona-sign-in.test.ts +0 -219
  215. package/src/services/persona-sign-in.ts +0 -238
  216. package/src/services/personas-service.ts +0 -191
  217. package/src/services/pikku-user-id.test.ts +0 -62
  218. package/src/services/pikku-user-id.ts +0 -13
  219. package/src/services/queue-webhook-service.test.ts +0 -409
  220. package/src/services/queue-webhook-service.ts +0 -150
  221. package/src/services/remote-jobs.test.ts +0 -106
  222. package/src/services/remote-jobs.ts +0 -92
  223. package/src/services/scheduler-service.ts +0 -37
  224. package/src/services/schema-service.ts +0 -10
  225. package/src/services/scope-service.ts +0 -91
  226. package/src/services/scoped-credential-service.test.ts +0 -86
  227. package/src/services/scoped-credential-service.ts +0 -63
  228. package/src/services/scoped-secret-service.test.ts +0 -93
  229. package/src/services/scoped-secret-service.ts +0 -40
  230. package/src/services/secret-host-binding.test.ts +0 -138
  231. package/src/services/secret-host-binding.ts +0 -51
  232. package/src/services/secret-service.ts +0 -25
  233. package/src/services/secretless.test.ts +0 -54
  234. package/src/services/secretless.ts +0 -29
  235. package/src/services/session-store.ts +0 -9
  236. package/src/services/stub-tracker.test.ts +0 -104
  237. package/src/services/stub-tracker.ts +0 -175
  238. package/src/services/system-role-guard.test.ts +0 -96
  239. package/src/services/system-role-guard.ts +0 -71
  240. package/src/services/temporary-file-service.ts +0 -76
  241. package/src/services/trigger-service.ts +0 -5
  242. package/src/services/typed-credential-service.ts +0 -83
  243. package/src/services/typed-secret-service.test.ts +0 -204
  244. package/src/services/typed-secret-service.ts +0 -132
  245. package/src/services/typed-variables-service.test.ts +0 -166
  246. package/src/services/typed-variables-service.ts +0 -166
  247. package/src/services/user-session-service.test.ts +0 -147
  248. package/src/services/user-session-service.ts +0 -85
  249. package/src/services/v8-coverage-service.test.ts +0 -69
  250. package/src/services/v8-coverage-service.ts +0 -163
  251. package/src/services/variables-service.ts +0 -13
  252. package/src/services/webhook-service.ts +0 -147
  253. package/src/services/workflow-service.ts +0 -120
  254. package/src/side-effects-are-declared.test.ts +0 -84
  255. package/src/source-files-stay-composable.test.ts +0 -41
  256. package/src/template-alias-surface.test.ts +0 -240
  257. package/src/test-utils.ts +0 -38
  258. package/src/testing/index.ts +0 -3
  259. package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
  260. package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
  261. package/src/testing/service-tests/channel-store-tests.ts +0 -98
  262. package/src/testing/service-tests/credential-service-tests.ts +0 -143
  263. package/src/testing/service-tests/deployment-service-tests.ts +0 -33
  264. package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
  265. package/src/testing/service-tests/secret-service-tests.ts +0 -105
  266. package/src/testing/service-tests/session-store-tests.ts +0 -62
  267. package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
  268. package/src/testing/service-tests/workflow-service-tests.ts +0 -308
  269. package/src/testing/service-tests.ts +0 -95
  270. package/src/time-utils.test.ts +0 -56
  271. package/src/time-utils.ts +0 -89
  272. package/src/types/core.types.ts +0 -446
  273. package/src/types/index.ts +0 -25
  274. package/src/types/state.types.ts +0 -226
  275. package/src/types/typed-credentials.test.ts +0 -72
  276. package/src/utils/hash.test.ts +0 -68
  277. package/src/utils/hash.ts +0 -26
  278. package/src/utils/hmac.ts +0 -21
  279. package/src/utils/node-host-resolver.ts +0 -20
  280. package/src/utils/safe-fetch.test.ts +0 -515
  281. package/src/utils/safe-fetch.ts +0 -347
  282. package/src/utils.test.ts +0 -359
  283. package/src/utils.ts +0 -165
  284. package/src/version.test.ts +0 -80
  285. package/src/version.ts +0 -25
  286. package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
  287. package/src/wirings/actor-flow/index.ts +0 -10
  288. package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
  289. package/src/wirings/actor-flow/run-conversation.ts +0 -280
  290. package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
  291. package/src/wirings/addon/addon-runner.ts +0 -236
  292. package/src/wirings/addon/addon-scopes.test.ts +0 -225
  293. package/src/wirings/addon/addon-secrets.test.ts +0 -391
  294. package/src/wirings/addon/index.ts +0 -12
  295. package/src/wirings/addon/remote-addon-auth.ts +0 -65
  296. package/src/wirings/addon/wire-addon.test.ts +0 -102
  297. package/src/wirings/addon/wire-addon.ts +0 -202
  298. package/src/wirings/addon/wire-remote-addon.ts +0 -41
  299. package/src/wirings/agent/agent-agui.test.ts +0 -1213
  300. package/src/wirings/agent/agent-agui.ts +0 -405
  301. package/src/wirings/agent/agent-authorization.test.ts +0 -208
  302. package/src/wirings/agent/agent-finalize.test.ts +0 -187
  303. package/src/wirings/agent/agent-finalize.ts +0 -197
  304. package/src/wirings/agent/agent-helpers.test.ts +0 -215
  305. package/src/wirings/agent/agent-helpers.ts +0 -96
  306. package/src/wirings/agent/agent-interrupt.test.ts +0 -833
  307. package/src/wirings/agent/agent-interrupt.ts +0 -400
  308. package/src/wirings/agent/agent-memory.test.ts +0 -397
  309. package/src/wirings/agent/agent-memory.ts +0 -496
  310. package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
  311. package/src/wirings/agent/agent-model-config.test.ts +0 -103
  312. package/src/wirings/agent/agent-model-config.ts +0 -59
  313. package/src/wirings/agent/agent-prepare.test.ts +0 -977
  314. package/src/wirings/agent/agent-prepare.ts +0 -1083
  315. package/src/wirings/agent/agent-registry.test.ts +0 -455
  316. package/src/wirings/agent/agent-registry.ts +0 -99
  317. package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
  318. package/src/wirings/agent/agent-rpc.ts +0 -116
  319. package/src/wirings/agent/agent-runner.test.ts +0 -1229
  320. package/src/wirings/agent/agent-runner.ts +0 -858
  321. package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
  322. package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
  323. package/src/wirings/agent/agent-stream.test.ts +0 -1800
  324. package/src/wirings/agent/agent-stream.ts +0 -1639
  325. package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
  326. package/src/wirings/agent/agent-turn.test.ts +0 -65
  327. package/src/wirings/agent/agent-turn.ts +0 -122
  328. package/src/wirings/agent/agent-utils.ts +0 -20
  329. package/src/wirings/agent/agent.types.ts +0 -676
  330. package/src/wirings/agent/index.ts +0 -58
  331. package/src/wirings/agent/voice-input.test.ts +0 -220
  332. package/src/wirings/agent/voice-input.ts +0 -180
  333. package/src/wirings/agent/voice-output.test.ts +0 -510
  334. package/src/wirings/agent/voice-output.ts +0 -311
  335. package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
  336. package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
  337. package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
  338. package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
  339. package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
  340. package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
  341. package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
  342. package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
  343. package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
  344. package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
  345. package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
  346. package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
  347. package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
  348. package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
  349. package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
  350. package/src/wirings/agent-scorer/index.ts +0 -23
  351. package/src/wirings/channel/channel-common.ts +0 -102
  352. package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
  353. package/src/wirings/channel/channel-handler.test.ts +0 -322
  354. package/src/wirings/channel/channel-handler.ts +0 -259
  355. package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
  356. package/src/wirings/channel/channel-host-rpc.ts +0 -69
  357. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
  358. package/src/wirings/channel/channel-middleware-runner.ts +0 -126
  359. package/src/wirings/channel/channel-rpc-registry.ts +0 -116
  360. package/src/wirings/channel/channel-rpc-responder.ts +0 -117
  361. package/src/wirings/channel/channel-rpc-service.ts +0 -132
  362. package/src/wirings/channel/channel-rpc-validators.ts +0 -65
  363. package/src/wirings/channel/channel-rpc.test.ts +0 -841
  364. package/src/wirings/channel/channel-rpc.ts +0 -5
  365. package/src/wirings/channel/channel-rpc.types.ts +0 -160
  366. package/src/wirings/channel/channel-runner.ts +0 -164
  367. package/src/wirings/channel/channel-store.ts +0 -35
  368. package/src/wirings/channel/channel.types.ts +0 -193
  369. package/src/wirings/channel/define-channel-routes.ts +0 -5
  370. package/src/wirings/channel/eventhub-service.ts +0 -16
  371. package/src/wirings/channel/eventhub-store.ts +0 -13
  372. package/src/wirings/channel/index.ts +0 -40
  373. package/src/wirings/channel/local/index.ts +0 -3
  374. package/src/wirings/channel/local/local-channel-handler.ts +0 -98
  375. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
  376. package/src/wirings/channel/local/local-channel-runner.ts +0 -271
  377. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
  378. package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
  379. package/src/wirings/channel/log-channels.ts +0 -16
  380. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
  381. package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
  382. package/src/wirings/channel/serverless/index.ts +0 -6
  383. package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
  384. package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
  385. package/src/wirings/cli/channel/cli-approval.ts +0 -135
  386. package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
  387. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
  388. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
  389. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
  390. package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
  391. package/src/wirings/cli/channel/index.ts +0 -6
  392. package/src/wirings/cli/cli-runner.test.ts +0 -969
  393. package/src/wirings/cli/cli-runner.ts +0 -538
  394. package/src/wirings/cli/cli.types.ts +0 -388
  395. package/src/wirings/cli/command-parser.test.ts +0 -1120
  396. package/src/wirings/cli/command-parser.ts +0 -713
  397. package/src/wirings/cli/define-cli-commands.ts +0 -13
  398. package/src/wirings/cli/format-cli-error.test.ts +0 -91
  399. package/src/wirings/cli/format-cli-error.ts +0 -96
  400. package/src/wirings/cli/index.ts +0 -19
  401. package/src/wirings/credential/credential.types.ts +0 -37
  402. package/src/wirings/credential/define-credential.ts +0 -49
  403. package/src/wirings/credential/index.ts +0 -7
  404. package/src/wirings/credential/validate-credential-definitions.ts +0 -63
  405. package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
  406. package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
  407. package/src/wirings/gateway/gateway-runner.test.ts +0 -581
  408. package/src/wirings/gateway/gateway-runner.ts +0 -411
  409. package/src/wirings/gateway/gateway.types.ts +0 -137
  410. package/src/wirings/gateway/index.ts +0 -15
  411. package/src/wirings/http/http-routes.test.ts +0 -318
  412. package/src/wirings/http/http-routes.ts +0 -111
  413. package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
  414. package/src/wirings/http/http-runner.test.ts +0 -503
  415. package/src/wirings/http/http-runner.ts +0 -462
  416. package/src/wirings/http/http.types.ts +0 -307
  417. package/src/wirings/http/index.ts +0 -27
  418. package/src/wirings/http/log-http-routes.ts +0 -18
  419. package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
  420. package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
  421. package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
  422. package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
  423. package/src/wirings/http/routers/http-router.ts +0 -13
  424. package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
  425. package/src/wirings/http/routers/path-to-regex.ts +0 -115
  426. package/src/wirings/http/web-request.test.ts +0 -382
  427. package/src/wirings/http/web-request.ts +0 -162
  428. package/src/wirings/mcp/index.ts +0 -26
  429. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
  430. package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
  431. package/src/wirings/mcp/mcp-runner.test.ts +0 -588
  432. package/src/wirings/mcp/mcp-runner.ts +0 -330
  433. package/src/wirings/mcp/mcp.types.ts +0 -199
  434. package/src/wirings/node/index.ts +0 -2
  435. package/src/wirings/node/node.types.ts +0 -23
  436. package/src/wirings/oauth2/index.ts +0 -1
  437. package/src/wirings/oauth2/oauth2.types.ts +0 -12
  438. package/src/wirings/persona/define-personas.ts +0 -33
  439. package/src/wirings/persona/index.ts +0 -75
  440. package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
  441. package/src/wirings/persona/persona-app-scopes.ts +0 -74
  442. package/src/wirings/persona/persona-email.ts +0 -87
  443. package/src/wirings/persona/persona-environments.test.ts +0 -194
  444. package/src/wirings/persona/persona-environments.ts +0 -138
  445. package/src/wirings/persona/persona-mailbox.ts +0 -156
  446. package/src/wirings/persona/persona.test.ts +0 -230
  447. package/src/wirings/persona/persona.types.ts +0 -156
  448. package/src/wirings/persona/validate-personas.ts +0 -137
  449. package/src/wirings/queue/index.ts +0 -29
  450. package/src/wirings/queue/queue-identity.test.ts +0 -454
  451. package/src/wirings/queue/queue-identity.ts +0 -176
  452. package/src/wirings/queue/queue-runner.test.ts +0 -705
  453. package/src/wirings/queue/queue-runner.ts +0 -181
  454. package/src/wirings/queue/queue.types.ts +0 -161
  455. package/src/wirings/queue/register-queue-helper.ts +0 -46
  456. package/src/wirings/queue/signed-queue-service.ts +0 -60
  457. package/src/wirings/queue/validate-worker-config.test.ts +0 -108
  458. package/src/wirings/queue/validate-worker-config.ts +0 -90
  459. package/src/wirings/role/define-system-role.ts +0 -33
  460. package/src/wirings/role/index.ts +0 -13
  461. package/src/wirings/role/role.test.ts +0 -104
  462. package/src/wirings/role/role.types.ts +0 -47
  463. package/src/wirings/role/validate-role-definitions.ts +0 -93
  464. package/src/wirings/rpc/index.ts +0 -8
  465. package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
  466. package/src/wirings/rpc/rpc-runner.ts +0 -569
  467. package/src/wirings/rpc/rpc-types.ts +0 -87
  468. package/src/wirings/scheduler/index.ts +0 -11
  469. package/src/wirings/scheduler/log-schedulers.ts +0 -16
  470. package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
  471. package/src/wirings/scheduler/scheduler-runner.ts +0 -138
  472. package/src/wirings/scheduler/scheduler.types.ts +0 -42
  473. package/src/wirings/scope/define-scope.ts +0 -33
  474. package/src/wirings/scope/index.ts +0 -15
  475. package/src/wirings/scope/scope.test.ts +0 -159
  476. package/src/wirings/scope/scope.types.ts +0 -42
  477. package/src/wirings/scope/validate-scope-definitions.ts +0 -107
  478. package/src/wirings/secret/index.ts +0 -9
  479. package/src/wirings/secret/secret.types.ts +0 -70
  480. package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
  481. package/src/wirings/secret/validate-secret-definitions.ts +0 -88
  482. package/src/wirings/trigger/index.ts +0 -9
  483. package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
  484. package/src/wirings/trigger/trigger-runner.test.ts +0 -78
  485. package/src/wirings/trigger/trigger-runner.ts +0 -113
  486. package/src/wirings/trigger/trigger.types.ts +0 -100
  487. package/src/wirings/variable/index.ts +0 -8
  488. package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
  489. package/src/wirings/variable/validate-variable-definitions.ts +0 -71
  490. package/src/wirings/variable/variable.types.ts +0 -40
  491. package/src/wirings/virtual-user/index.ts +0 -107
  492. package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
  493. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
  494. package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
  495. package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
  496. package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
  497. package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
  498. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
  499. package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
  500. package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
  501. package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
  502. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
  503. package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
  504. package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
  505. package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
  506. package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
  507. package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
  508. package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
  509. package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
  510. package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
  511. package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
  512. package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
  513. package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
  514. package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
  515. package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
  516. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
  517. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
  518. package/src/wirings/workflow/feature.test.ts +0 -131
  519. package/src/wirings/workflow/feature.ts +0 -59
  520. package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
  521. package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
  522. package/src/wirings/workflow/graph/graph-node.ts +0 -115
  523. package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
  524. package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
  525. package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
  526. package/src/wirings/workflow/graph/graph-validation.ts +0 -41
  527. package/src/wirings/workflow/graph/template.test.ts +0 -49
  528. package/src/wirings/workflow/graph/template.ts +0 -42
  529. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
  530. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
  531. package/src/wirings/workflow/index.ts +0 -107
  532. package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
  533. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
  534. package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
  535. package/src/wirings/workflow/run-timeline.test.ts +0 -199
  536. package/src/wirings/workflow/run-timeline.ts +0 -185
  537. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
  538. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
  539. package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
  540. package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
  541. package/src/wirings/workflow/scenario-poll.test.ts +0 -64
  542. package/src/wirings/workflow/scenario-poll.ts +0 -27
  543. package/src/wirings/workflow/scenario-prose.test.ts +0 -275
  544. package/src/wirings/workflow/scenario-prose.ts +0 -86
  545. package/src/wirings/workflow/scenario-run.types.ts +0 -193
  546. package/src/wirings/workflow/scenario-service.test.ts +0 -147
  547. package/src/wirings/workflow/scenario-step-guards.ts +0 -23
  548. package/src/wirings/workflow/scenario-step.test.ts +0 -800
  549. package/src/wirings/workflow/scenario-step.types.ts +0 -262
  550. package/src/wirings/workflow/scenario-surface.test.ts +0 -146
  551. package/src/wirings/workflow/scenario-surface.ts +0 -71
  552. package/src/wirings/workflow/scenario.types.ts +0 -63
  553. package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
  554. package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
  555. package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
  556. package/src/wirings/workflow/workflow-approval.ts +0 -290
  557. package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
  558. package/src/wirings/workflow/workflow-constants.ts +0 -66
  559. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
  560. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
  561. package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
  562. package/src/wirings/workflow/workflow-errors.ts +0 -132
  563. package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
  564. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
  565. package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
  566. package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
  567. package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
  568. package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
  569. package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
  570. package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
  571. package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
  572. package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
  573. package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
  574. package/src/wirings/workflow/workflow-recovery.ts +0 -192
  575. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
  576. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
  577. package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
  578. package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
  579. package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
  580. package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
  581. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
  582. package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
  583. package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
  584. package/src/wirings/workflow/workflow-status-stream.ts +0 -144
  585. package/src/wirings/workflow/workflow-step-claim.ts +0 -46
  586. package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
  587. package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
  588. package/src/wirings/workflow/workflow-suspend.ts +0 -61
  589. package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
  590. package/src/wirings/workflow/workflow.types.ts +0 -268
  591. package/src/wirings-stay-decoupled.test.ts +0 -130
  592. package/tsconfig.json +0 -14
  593. package/tsconfig.tsbuildinfo +0 -1
  594. package/tsconfig.type-tests.json +0 -15
@@ -1,411 +0,0 @@
1
- import { pikkuState } from '../../pikku-state.js'
2
- import { NotFoundError, UnauthorizedError } from '../../errors/errors.js'
3
- import { addFunction, runPikkuFunc } from '../../function/function-runner.js'
4
- import { runMiddleware } from '../../middleware-runner.js'
5
- import { httpRouter } from '../http/routers/http-router.js'
6
- import type { CoreHTTPFunctionWiring } from '../http/http.types.js'
7
- import type {
8
- CoreGateway,
9
- GatewayAdapter,
10
- GatewayOutboundMessage,
11
- PikkuGateway,
12
- } from './gateway.types.js'
13
-
14
- const resolvedAdapters = new WeakMap<CoreGateway, Promise<GatewayAdapter>>()
15
-
16
- const gatewayHandlerFuncId = (name: string) => `gateway__${name}__handler`
17
-
18
- // knowledge: decisions/security/gateway-middleware-sessions-must-be-bridged-onto-the-wire.md
19
- const bridgeMiddlewareSession = async (wire: PikkuRawWire): Promise<void> => {
20
- if (wire.session || !wire.getSession) return
21
- const session = await wire.getSession()
22
- if (session) {
23
- wire.session = session
24
- }
25
- }
26
-
27
- /**
28
- * Metadata the inspector recorded for the function the gateway was wired with.
29
- * The bootstrap loads every meta file before any wiring file, so this is
30
- * already populated by the time a gateway wires itself. A gateway wired by
31
- * hand rather than through codegen has no entry, and falls back to the
32
- * sessionless default below.
33
- */
34
- const declaredHandlerMeta = (config: CoreGateway) => {
35
- const declaredFuncId = pikkuState(null, 'gateway', 'meta')[config.name]
36
- ?.pikkuFuncId
37
- return declaredFuncId
38
- ? pikkuState(null, 'function', 'meta')[declaredFuncId]
39
- : undefined
40
- }
41
-
42
- // knowledge: decisions/security/gateway-handlers-run-through-the-function-runner-gate.md
43
- const registerGatewayHandler = (config: CoreGateway): string => {
44
- const funcId = gatewayHandlerFuncId(config.name)
45
- const funcMeta = pikkuState(null, 'function', 'meta')
46
- const declared = declaredHandlerMeta(config)
47
- funcMeta[funcId] = {
48
- ...declared,
49
- pikkuFuncId: funcId,
50
- inputSchemaName: declared?.inputSchemaName ?? null,
51
- outputSchemaName: declared?.outputSchemaName ?? null,
52
- sessionless: declared?.sessionless ?? true,
53
- }
54
- addFunction(funcId, config.func)
55
- return funcId
56
- }
57
-
58
- /**
59
- * Tag middleware the inspector resolved for this gateway. It is keyed by
60
- * gateway name rather than reachable from `config`, because `tags` is a
61
- * compile-time input everywhere — nothing at runtime maps a tag to its
62
- * middleware group.
63
- */
64
- const gatewayInheritedMiddleware = (config: CoreGateway) =>
65
- pikkuState(null, 'gateway', 'meta')[config.name]?.middleware
66
-
67
- export const resolveGatewayAdapter = (
68
- config: CoreGateway,
69
- services: CoreSingletonServices
70
- ): Promise<GatewayAdapter> => {
71
- let resolved = resolvedAdapters.get(config)
72
- if (!resolved) {
73
- resolved =
74
- typeof config.adapter === 'function'
75
- ? Promise.resolve(config.adapter(services))
76
- : Promise.resolve(config.adapter)
77
- resolvedAdapters.set(config, resolved)
78
- }
79
- return resolved
80
- }
81
- import type {
82
- PikkuWire,
83
- PikkuRawWire,
84
- CoreSingletonServices,
85
- } from '../../types/core.types.js'
86
- import type { CorePikkuMiddleware } from '../../middleware/middleware.types.js'
87
- export const wireGateway = (config: CoreGateway): void => {
88
- pikkuState(null, 'gateway', 'gateways').set(config.name, config)
89
-
90
- switch (config.type) {
91
- case 'webhook':
92
- wireWebhookGateway(config)
93
- break
94
- case 'websocket':
95
- wireWebsocketGateway(config)
96
- break
97
- case 'listener':
98
- wireListenerGateway(config)
99
- break
100
- default:
101
- throw new Error(
102
- `Unknown gateway type '${config.type}' for gateway '${config.name}'`
103
- )
104
- }
105
- }
106
-
107
- const wireWebhookGateway = (config: CoreGateway): void => {
108
- const { name, route, adapter } = config
109
- if (!route) {
110
- throw new Error(`Webhook gateway '${name}' requires a route`)
111
- }
112
-
113
- const postFuncId = `gateway__${name}__post`
114
- const routes = pikkuState(null, 'http', 'routes')
115
-
116
- const postHandler = {
117
- auth: false,
118
- func: createWebhookPostHandler(config),
119
- }
120
-
121
- addFunction(postFuncId, postHandler)
122
-
123
- if (!routes.has('post')) {
124
- routes.set('post', new Map())
125
- }
126
- routes.get('post')!.set(route, {
127
- method: 'post',
128
- route,
129
- func: postHandler,
130
- auth: false,
131
- // A gateway handler takes (services, data, wire) rather than a pikku
132
- // function's shape, so it never matches CorePikkuFunctionConfig. It is only
133
- // ever invoked through runPikkuFunc, which is what makes that safe.
134
- } as unknown as CoreHTTPFunctionWiring<unknown, unknown, string>)
135
-
136
- // knowledge: decisions/internals/gateway-adapters-resolve-lazily-and-are-promise-cached.md
137
- if (typeof adapter === 'function' || adapter.verifyWebhook) {
138
- const verifyFuncId = `gateway__${name}__verify`
139
-
140
- const verifyHandler = {
141
- auth: false,
142
- func: createWebhookVerifyHandler(config),
143
- }
144
-
145
- addFunction(verifyFuncId, verifyHandler)
146
-
147
- if (!routes.has('get')) {
148
- routes.set('get', new Map())
149
- }
150
- routes.get('get')!.set(route, {
151
- method: 'get',
152
- route,
153
- func: verifyHandler,
154
- auth: false,
155
- // knowledge: decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md
156
- returnsJSON: false,
157
- } as unknown as CoreHTTPFunctionWiring<unknown, unknown, string>)
158
- }
159
-
160
- httpRouter.reset()
161
- }
162
-
163
- const createWebhookPostHandler = (config: CoreGateway) => {
164
- const { name, middleware: userMiddleware } = config
165
- const handlerFuncId = registerGatewayHandler(config)
166
- const inheritedMiddleware = gatewayInheritedMiddleware(config)
167
-
168
- return async (
169
- services: CoreSingletonServices,
170
- data: unknown,
171
- wire: PikkuWire
172
- ) => {
173
- const adapter = await resolveGatewayAdapter(config, services)
174
-
175
- if (adapter.verifyWebhook) {
176
- const verifyResult = await adapter.verifyWebhook(data, wire.http?.request)
177
- if (verifyResult.verified) {
178
- return verifyResult.response
179
- }
180
- }
181
-
182
- const parsed = adapter.parse(data)
183
- if (!parsed) {
184
- return { ok: true }
185
- }
186
-
187
- const gateway: PikkuGateway = {
188
- gatewayName: name,
189
- senderId: parsed.senderId,
190
- platform: adapter.name,
191
- send: (msg: GatewayOutboundMessage) => adapter.send(parsed.senderId, msg),
192
- }
193
- wire.gateway = gateway
194
-
195
- // Gateway middleware runs outside the gate so it can establish the session the gate checks.
196
- const invoke = async () => {
197
- await bridgeMiddlewareSession(wire)
198
- return await runPikkuFunc('gateway', name, handlerFuncId, {
199
- singletonServices: services,
200
- data: () => parsed,
201
- auth: config.auth,
202
- inheritedMiddleware,
203
- wire,
204
- })
205
- }
206
-
207
- const gatewayMiddleware = userMiddleware as
208
- CorePikkuMiddleware[] | undefined
209
- const result: any = gatewayMiddleware?.length
210
- ? await runMiddleware(services, wire, gatewayMiddleware, invoke)
211
- : await invoke()
212
-
213
- if (result && (result.text || result.richContent || result.attachments)) {
214
- await adapter.send(parsed.senderId, result as GatewayOutboundMessage)
215
- }
216
- return { ok: true }
217
- }
218
- }
219
-
220
- const createWebhookVerifyHandler = (config: CoreGateway) => {
221
- return async (
222
- services: CoreSingletonServices,
223
- _data: unknown,
224
- wire: PikkuWire
225
- ) => {
226
- const adapter = await resolveGatewayAdapter(config, services)
227
- if (!adapter.verifyWebhook) {
228
- throw new NotFoundError(
229
- `Gateway '${config.name}' does not support webhook verification`
230
- )
231
- }
232
-
233
- const query = wire.http?.request?.query()
234
- const result = await adapter.verifyWebhook(query, wire.http?.request)
235
- if (!result.verified) {
236
- throw new UnauthorizedError('Webhook verification failed')
237
- }
238
- // knowledge: decisions/internals/gateway-webhook-challenges-echo-bytes-not-json.md
239
- const response = result.response
240
- if (typeof response === 'string' || typeof response === 'number') {
241
- return String(response)
242
- }
243
- wire.http?.response?.header('content-type', 'application/json')
244
- return JSON.stringify(response)
245
- }
246
- }
247
-
248
- const wireWebsocketGateway = (config: CoreGateway): void => {
249
- const { name, route } = config
250
- if (!route) {
251
- throw new Error(`WebSocket gateway '${name}' requires a route`)
252
- }
253
-
254
- pikkuState(null, 'gateway', 'gateways').set(config.name, config)
255
-
256
- const channelsMeta = pikkuState(null, 'channel', 'meta')
257
- const channels = pikkuState(null, 'channel', 'channels')
258
-
259
- const messageFuncId = `gateway__${name}__message`
260
- const connectFuncId = `gateway__${name}__connect`
261
-
262
- const funcMeta = pikkuState(null, 'function', 'meta')
263
- funcMeta[messageFuncId] = {
264
- pikkuFuncId: messageFuncId,
265
- inputSchemaName: null,
266
- outputSchemaName: null,
267
- sessionless: true,
268
- }
269
- funcMeta[connectFuncId] = {
270
- pikkuFuncId: connectFuncId,
271
- inputSchemaName: null,
272
- outputSchemaName: null,
273
- sessionless: true,
274
- }
275
-
276
- channelsMeta[name] = {
277
- name,
278
- route,
279
- gateway: true,
280
- input: null,
281
- connect: { pikkuFuncId: connectFuncId },
282
- disconnect: null,
283
- message: { pikkuFuncId: messageFuncId },
284
- messageWirings: {},
285
- }
286
-
287
- const userMiddleware = config.middleware as CorePikkuMiddleware[] | undefined
288
- const handlerFuncId = registerGatewayHandler(config)
289
- const inheritedMiddleware = gatewayInheritedMiddleware(config)
290
-
291
- addFunction(connectFuncId, {
292
- auth: false,
293
- func: async (services: any, _data: unknown, wire: PikkuWire) => {
294
- const adapter = await resolveGatewayAdapter(config, services)
295
- wire.gateway = {
296
- gatewayName: name,
297
- senderId: '',
298
- platform: adapter.name,
299
- send: async (msg: GatewayOutboundMessage) => {
300
- wire.channel?.send(msg)
301
- },
302
- } satisfies PikkuGateway
303
- },
304
- })
305
-
306
- addFunction(messageFuncId, {
307
- auth: false,
308
- func: async (services: any, data: unknown, wire: PikkuWire) => {
309
- const adapter = await resolveGatewayAdapter(config, services)
310
- const parsed = adapter.parse(data)
311
- if (!parsed) return
312
-
313
- const gateway: PikkuGateway = {
314
- gatewayName: name,
315
- senderId: parsed.senderId,
316
- platform: adapter.name,
317
- send: async (msg: GatewayOutboundMessage) => {
318
- wire.channel?.send(msg)
319
- },
320
- }
321
- wire.gateway = gateway
322
-
323
- const invoke = async () => {
324
- await bridgeMiddlewareSession(wire)
325
- return await runPikkuFunc('gateway', name, handlerFuncId, {
326
- singletonServices: services,
327
- data: () => parsed,
328
- auth: config.auth,
329
- inheritedMiddleware,
330
- wire,
331
- })
332
- }
333
-
334
- const gatewayMiddleware = userMiddleware as
335
- CorePikkuMiddleware[] | undefined
336
- const result: any = gatewayMiddleware?.length
337
- ? await runMiddleware(services, wire, gatewayMiddleware, invoke)
338
- : await invoke()
339
-
340
- if (result && (result.text || result.richContent || result.attachments)) {
341
- wire.channel?.send(result)
342
- }
343
- },
344
- })
345
-
346
- // knowledge: decisions/internals/gateway-wiring-is-a-meta-wiring-over-http-and-channels.md
347
- channels.set(name, {
348
- name,
349
- route,
350
- auth: false,
351
- onConnect: { func: async () => {} },
352
- onMessage: { func: async () => {} },
353
- })
354
-
355
- httpRouter.reset()
356
- }
357
-
358
- const wireListenerGateway = (config: CoreGateway): void => {
359
- pikkuState(null, 'gateway', 'gateways').set(config.name, config)
360
- }
361
-
362
- /** The returned callback is what a GatewayService passes to `adapter.init()`. */
363
- export const createListenerMessageHandler = (
364
- name: string,
365
- config: CoreGateway,
366
- singletonServices: CoreSingletonServices
367
- ): ((rawData: unknown) => Promise<void>) => {
368
- const userMiddleware = config.middleware as CorePikkuMiddleware[] | undefined
369
- const handlerFuncId = registerGatewayHandler(config)
370
- const inheritedMiddleware = gatewayInheritedMiddleware(config)
371
-
372
- return async (rawData: unknown): Promise<void> => {
373
- const adapter = await resolveGatewayAdapter(config, singletonServices)
374
- const parsed = adapter.parse(rawData)
375
- if (!parsed) return
376
-
377
- const wire: PikkuRawWire = {}
378
- const gateway: PikkuGateway = {
379
- gatewayName: name,
380
- senderId: parsed.senderId,
381
- platform: adapter.name,
382
- send: (msg: GatewayOutboundMessage) => adapter.send(parsed.senderId, msg),
383
- }
384
- wire.gateway = gateway
385
-
386
- const invoke = async () => {
387
- await bridgeMiddlewareSession(wire)
388
- return await runPikkuFunc('gateway', name, handlerFuncId, {
389
- singletonServices,
390
- data: () => parsed,
391
- auth: config.auth,
392
- inheritedMiddleware,
393
- wire,
394
- })
395
- }
396
-
397
- // knowledge: decisions/internals/gateway-listener-middleware-runs-without-an-rpc-on-the-wire.md
398
- const result: any = userMiddleware?.length
399
- ? await runMiddleware(
400
- singletonServices,
401
- wire as PikkuWire,
402
- userMiddleware,
403
- invoke
404
- )
405
- : await invoke()
406
-
407
- if (result && (result.text || result.richContent || result.attachments)) {
408
- await adapter.send(parsed.senderId, result as GatewayOutboundMessage)
409
- }
410
- }
411
- }
@@ -1,137 +0,0 @@
1
- import type {
2
- CommonWireMeta,
3
- CoreSingletonServices,
4
- } from '../../types/core.types.js'
5
- import type {
6
- CorePikkuMiddleware,
7
- CorePikkuMiddlewareGroup,
8
- } from '../../middleware/middleware.types.js'
9
- import type { CorePikkuFunctionConfig } from '../../function/functions.types.js'
10
- import type { PikkuHTTPRequest } from '../http/http.types.js'
11
-
12
- export interface GatewayAttachment {
13
- type: string
14
- url?: string
15
- data?: ArrayBuffer | Uint8Array
16
- mimeType?: string
17
- filename?: string
18
- }
19
-
20
- /**
21
- * One message arriving from a gateway, normalised: who sent it, in which
22
- * conversation, and what they said.
23
- */
24
- export interface GatewayInboundMessage {
25
- /** Platform-specific: a phone number, a Slack user id, and so on. */
26
- senderId: string
27
- /** What they said, as plain text, with the provider's markup stripped. */
28
- text: string
29
- /** The provider's own event, untouched, for anything this shape drops. */
30
- raw: unknown
31
- /** Files and media that came with the message. */
32
- attachments?: GatewayAttachment[]
33
- /** Anything else the adapter wants to carry through to the wiring. */
34
- metadata?: Record<string, unknown>
35
- }
36
-
37
- /**
38
- * One message to send back through a gateway — plain text, or the provider's
39
- * own rich content.
40
- */
41
- export interface GatewayOutboundMessage {
42
- /** The reply as plain text. Every provider can render this. */
43
- text?: string
44
- /** The provider's own rich payload, e.g. Slack blocks. Passed through as-is. */
45
- richContent?: Record<string, unknown>
46
- /** Files and media to send alongside. */
47
- attachments?: GatewayAttachment[]
48
- }
49
-
50
- /**
51
- * What a gateway's `verifyWebhook` returns — verified, with the response the
52
- * provider expects back, or not.
53
- */
54
- export type WebhookVerificationResult =
55
- | {
56
- /** True when the request really came from the provider. */
57
- verified: true
58
- /** What to echo back, e.g. Meta's hub.challenge. */
59
- response: unknown
60
- }
61
- | {
62
- /** False when the signature or challenge did not check out. */
63
- verified: false
64
- }
65
-
66
- /**
67
- * What a gateway integration implements: parse an incoming event into a
68
- * message, send one back, and open and close the connection.
69
- */
70
- export interface GatewayAdapter {
71
- /** Identifies the gateway in wirings and logs, e.g. `'slack'`. */
72
- name: string
73
- /** Return null to ignore the event, e.g. a delivery receipt. */
74
- parse(data: unknown): GatewayInboundMessage | null
75
- /** Deliver a reply back to the sender the message came from. */
76
- send(senderId: string, message: GatewayOutboundMessage): Promise<void>
77
- /** Called by GatewayService.start(); must call onMessage per incoming event. */
78
- init(onMessage: (data: unknown) => Promise<void>): Promise<void>
79
- /** Called by GatewayService.stop(); release the connection init() opened. */
80
- close(): Promise<void>
81
- /** Receives the GET query params, or the POST body when called from the POST handler. */
82
- verifyWebhook?(
83
- data: unknown,
84
- request?: PikkuHTTPRequest
85
- ): WebhookVerificationResult | Promise<WebhookVerificationResult>
86
- }
87
-
88
- export type GatewayAdapterFactory = (
89
- services: CoreSingletonServices
90
- ) => GatewayAdapter | Promise<GatewayAdapter>
91
-
92
- export interface PikkuGateway {
93
- gatewayName: string
94
- senderId: string
95
- platform: string
96
- send(msg: GatewayOutboundMessage): Promise<void>
97
- }
98
-
99
- /** 'webhook' the platform POSTs to us, 'websocket' the client connects to us, 'listener' no route at all. */
100
- export type GatewayTransportType = 'webhook' | 'websocket' | 'listener'
101
-
102
- export type CoreGateway<
103
- PikkuFunctionConfig = CorePikkuFunctionConfig<any, any>,
104
- PikkuMiddleware extends CorePikkuMiddleware = CorePikkuMiddleware,
105
- > = Partial<
106
- Pick<CommonWireMeta, 'title' | 'summary' | 'description' | 'errors'>
107
- > & {
108
- /** Unique across the project. It is how the gateway is addressed in `pikku meta` and in logs. */
109
- name: string
110
- /** How the platform reaches us: a `webhook` it posts to, a `websocket` it holds open, or a `listener` we open outward. */
111
- type: GatewayTransportType
112
- /** Required for 'webhook' and 'websocket'; unused for 'listener'. */
113
- route?: string
114
- /** Which service this speaks to — slack, whatsapp, discord. It selects the adapter's dialect, not the transport. */
115
- platform?: string
116
- /** Translates between the platform's message format and pikku's. A factory is called with services, for an adapter that needs a token or a client. */
117
- adapter: GatewayAdapter | GatewayAdapterFactory
118
- /** The function to run per inbound message. It receives the normalised message, not the platform's raw payload. */
119
- func: PikkuFunctionConfig
120
- /** Wraps every inbound message: signature verification, tracing, rate limiting. */
121
- middleware?: CorePikkuMiddlewareGroup<any, any>
122
- /** Filters this gateway in and out of a build — see the `tags` option on `pikku all`. It has no effect at runtime. */
123
- tags?: string[]
124
- /** Unset lets the handler's own `auth` govern; gateway handlers are sessionless by default. */
125
- auth?: boolean
126
- }
127
-
128
- export type GatewayMeta = CommonWireMeta & {
129
- name: string
130
- type: GatewayTransportType
131
- route?: string
132
- platform?: string
133
- auth?: boolean
134
- gateway: true
135
- }
136
-
137
- export type GatewaysMeta = Record<string, GatewayMeta>
@@ -1,15 +0,0 @@
1
- export {
2
- wireGateway,
3
- createListenerMessageHandler,
4
- resolveGatewayAdapter,
5
- } from './gateway-runner.js'
6
- export type {
7
- GatewayAdapter,
8
- GatewayAdapterFactory,
9
- GatewayInboundMessage,
10
- GatewayOutboundMessage,
11
- GatewaysMeta,
12
- GatewayTransportType,
13
- CoreGateway,
14
- WebhookVerificationResult,
15
- } from './gateway.types.js'