@pikku/core 0.12.107 → 0.12.111

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 (588) hide show
  1. package/CHANGELOG.md +344 -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/errors/errors.d.ts +7 -0
  23. package/dist/errors/errors.js +17 -0
  24. package/dist/function/function-meta.types.d.ts +2 -0
  25. package/dist/function/function-runner.js +29 -0
  26. package/dist/function/functions.types.d.ts +22 -3
  27. package/dist/middleware/auth-apikey.d.ts +1 -1
  28. package/dist/pikku-state.d.ts +1 -1
  29. package/dist/scopes.d.ts +11 -0
  30. package/dist/scopes.js +17 -0
  31. package/dist/services/credential-wire-service.d.ts +1 -1
  32. package/dist/services/feature-flag-service.d.ts +100 -0
  33. package/dist/services/feature-flag-service.js +1 -0
  34. package/dist/services/index.d.ts +1 -0
  35. package/dist/services/meta-service.d.ts +16 -0
  36. package/dist/services/meta-service.js +19 -0
  37. package/dist/services/webhook-service.d.ts +7 -2
  38. package/dist/services/webhook-service.js +11 -6
  39. package/dist/testing/service-tests/agent-run-service-tests.d.ts +2 -2
  40. package/dist/testing/service-tests/agent-storage-service-tests.d.ts +1 -1
  41. package/dist/testing/service-tests/channel-store-tests.d.ts +1 -1
  42. package/dist/testing/service-tests/credential-service-tests.d.ts +1 -1
  43. package/dist/testing/service-tests/deployment-service-tests.d.ts +1 -1
  44. package/dist/testing/service-tests/event-hub-store-tests.d.ts +1 -1
  45. package/dist/testing/service-tests/secret-service-tests.d.ts +1 -1
  46. package/dist/testing/service-tests/session-store-tests.d.ts +1 -1
  47. package/dist/testing/service-tests/workflow-run-service-tests.d.ts +1 -1
  48. package/dist/testing/service-tests/workflow-service-tests.d.ts +1 -1
  49. package/dist/types/core.types.d.ts +23 -0
  50. package/dist/wirings/agent/agent-rpc.d.ts +1 -1
  51. package/dist/wirings/agent/agent-turn.d.ts +1 -1
  52. package/dist/wirings/agent-scorer/agent-scorer-live.d.ts +1 -1
  53. package/dist/wirings/channel/channel-common.d.ts +1 -1
  54. package/dist/wirings/channel/channel-rpc-validators.d.ts +2 -2
  55. package/dist/wirings/channel/channel-runner.d.ts +1 -1
  56. package/dist/wirings/channel/local/local-channel-runner.d.ts +1 -1
  57. package/dist/wirings/channel/serverless/serverless-channel-runner.d.ts +1 -1
  58. package/dist/wirings/cli/channel/cli-approval.d.ts +2 -2
  59. package/dist/wirings/flag/assert-feature-available.d.ts +15 -0
  60. package/dist/wirings/flag/assert-feature-available.js +23 -0
  61. package/dist/wirings/flag/cached-flag-source.d.ts +73 -0
  62. package/dist/wirings/flag/cached-flag-source.js +96 -0
  63. package/dist/wirings/flag/define-feature-flags.d.ts +33 -0
  64. package/dist/wirings/flag/define-feature-flags.js +32 -0
  65. package/dist/wirings/flag/flag.types.d.ts +97 -0
  66. package/dist/wirings/flag/flag.types.js +1 -0
  67. package/dist/wirings/flag/index.d.ts +7 -0
  68. package/dist/wirings/flag/index.js +5 -0
  69. package/dist/wirings/flag/resolve-flag.d.ts +52 -0
  70. package/dist/wirings/flag/resolve-flag.js +90 -0
  71. package/dist/wirings/flag/validate-flag-definitions.d.ts +26 -0
  72. package/dist/wirings/flag/validate-flag-definitions.js +103 -0
  73. package/dist/wirings/virtual-user/virtual-user-scaffold.d.ts +8 -8
  74. package/dist/wirings/virtual-user/virtual-user-schedule.d.ts +1 -1
  75. package/dist/wirings/workflow/workflow-queue-routing.d.ts +1 -1
  76. package/package.json +11 -5
  77. package/run-tests.sh +17 -9
  78. package/src/public-surface.json +26 -0
  79. package/src/agent-naming.test.ts +0 -68
  80. package/src/api-report.test.ts +0 -138
  81. package/src/app-alias-surface.test.ts +0 -179
  82. package/src/app-leaf-surface.test.ts +0 -222
  83. package/src/bootstrap-compat/root.ts +0 -20
  84. package/src/classification/column-form.test.ts +0 -97
  85. package/src/classification/column-form.ts +0 -55
  86. package/src/classification/data-classification.ts +0 -73
  87. package/src/classification/index.ts +0 -40
  88. package/src/classification/key-ids.ts +0 -2
  89. package/src/classification/secret-value.test.ts +0 -204
  90. package/src/classification/secret-value.ts +0 -106
  91. package/src/crypto-utils.test.ts +0 -668
  92. package/src/crypto-utils.ts +0 -460
  93. package/src/dev/hot-reload.test.ts +0 -587
  94. package/src/dev/hot-reload.ts +0 -225
  95. package/src/dev/module-runner.test.ts +0 -235
  96. package/src/dev/module-runner.ts +0 -138
  97. package/src/dev/reload-meta.test.ts +0 -183
  98. package/src/dev/reload-meta.ts +0 -144
  99. package/src/ecosystem-tier-removed.test.ts +0 -72
  100. package/src/env.ts +0 -1
  101. package/src/errors/error-handler.ts +0 -77
  102. package/src/errors/error.test.ts +0 -229
  103. package/src/errors/errors.ts +0 -393
  104. package/src/errors/index.ts +0 -11
  105. package/src/errors/serialized-error.ts +0 -12
  106. package/src/factory-functions.test.ts +0 -111
  107. package/src/function/abort-scope.test.ts +0 -97
  108. package/src/function/abort-scope.ts +0 -80
  109. package/src/function/function-meta.types.ts +0 -151
  110. package/src/function/function-runner.test.ts +0 -1619
  111. package/src/function/function-runner.ts +0 -499
  112. package/src/function/functions.types.ts +0 -319
  113. package/src/function/index.ts +0 -40
  114. package/src/function/list.types.test.ts +0 -100
  115. package/src/function/list.types.ts +0 -69
  116. package/src/function/pikku-request.test.ts +0 -35
  117. package/src/function/pikku-request.ts +0 -17
  118. package/src/gopass-secrets-removed.test.ts +0 -51
  119. package/src/handle-error.test.ts +0 -532
  120. package/src/handle-error.ts +0 -64
  121. package/src/middleware/auth-apikey.test.ts +0 -362
  122. package/src/middleware/auth-apikey.ts +0 -39
  123. package/src/middleware/auth-bearer.test.ts +0 -566
  124. package/src/middleware/auth-bearer.ts +0 -83
  125. package/src/middleware/auth-cookie.test.ts +0 -572
  126. package/src/middleware/auth-cookie.ts +0 -107
  127. package/src/middleware/cors.test.ts +0 -579
  128. package/src/middleware/cors.ts +0 -103
  129. package/src/middleware/index.ts +0 -30
  130. package/src/middleware/middleware-factories.ts +0 -76
  131. package/src/middleware/middleware.types.ts +0 -61
  132. package/src/middleware/remote-auth.test.ts +0 -547
  133. package/src/middleware/remote-auth.ts +0 -95
  134. package/src/middleware/remote-jobs-secret.ts +0 -35
  135. package/src/middleware/require-origin.test.ts +0 -115
  136. package/src/middleware/require-origin.ts +0 -79
  137. package/src/middleware/telemetry.ts +0 -83
  138. package/src/middleware-runner.test.ts +0 -578
  139. package/src/middleware-runner.ts +0 -232
  140. package/src/no-any-casts.test.ts +0 -57
  141. package/src/no-root-barrel.test.ts +0 -122
  142. package/src/permissions.test.ts +0 -256
  143. package/src/permissions.ts +0 -217
  144. package/src/pikku-state.test.ts +0 -198
  145. package/src/pikku-state.ts +0 -206
  146. package/src/production-barrels-stay-lean.test.ts +0 -110
  147. package/src/public-surface.test.ts +0 -133
  148. package/src/remote.test.ts +0 -173
  149. package/src/remote.ts +0 -56
  150. package/src/removed-legacy-exports.test.ts +0 -66
  151. package/src/run-tests-script.test.ts +0 -67
  152. package/src/schema.test.ts +0 -430
  153. package/src/schema.ts +0 -204
  154. package/src/scopes.test.ts +0 -203
  155. package/src/scopes.ts +0 -67
  156. package/src/services/agent-run-state-service.ts +0 -37
  157. package/src/services/agent-runner-service.ts +0 -238
  158. package/src/services/agent-storage-service.ts +0 -39
  159. package/src/services/ai-embedding-service.ts +0 -9
  160. package/src/services/audit-service.test.ts +0 -44
  161. package/src/services/audit-service.ts +0 -280
  162. package/src/services/content-service.ts +0 -65
  163. package/src/services/credential-service.ts +0 -20
  164. package/src/services/credential-wire-service.test.ts +0 -235
  165. package/src/services/credential-wire-service.ts +0 -120
  166. package/src/services/deployment-service.ts +0 -32
  167. package/src/services/email-service.test.ts +0 -100
  168. package/src/services/email-service.ts +0 -60
  169. package/src/services/email-template.test.ts +0 -311
  170. package/src/services/email-template.ts +0 -254
  171. package/src/services/file-scenario-run-store.test.ts +0 -349
  172. package/src/services/file-scenario-run-store.ts +0 -282
  173. package/src/services/gateway-service.ts +0 -5
  174. package/src/services/http-personas-converse.test.ts +0 -274
  175. package/src/services/http-personas.test.ts +0 -379
  176. package/src/services/http-personas.ts +0 -508
  177. package/src/services/in-memory-agent-run-state-service.ts +0 -87
  178. package/src/services/in-memory-queue-service.test.ts +0 -162
  179. package/src/services/in-memory-queue-service.ts +0 -78
  180. package/src/services/in-memory-session-store.test.ts +0 -58
  181. package/src/services/in-memory-session-store.ts +0 -20
  182. package/src/services/in-memory-trigger-service.ts +0 -47
  183. package/src/services/in-memory-workflow-service.test.ts +0 -430
  184. package/src/services/in-memory-workflow-service.ts +0 -595
  185. package/src/services/index.ts +0 -192
  186. package/src/services/istanbul-coverage-service.test.ts +0 -66
  187. package/src/services/istanbul-coverage-service.ts +0 -59
  188. package/src/services/jwt-service.ts +0 -15
  189. package/src/services/local-content-request-handler.test.ts +0 -240
  190. package/src/services/local-content-request-handler.ts +0 -295
  191. package/src/services/local-content.test.ts +0 -186
  192. package/src/services/local-content.ts +0 -242
  193. package/src/services/local-credential-service.ts +0 -63
  194. package/src/services/local-email-service.test.ts +0 -182
  195. package/src/services/local-email-service.ts +0 -43
  196. package/src/services/local-gateway-service.ts +0 -51
  197. package/src/services/local-secrets.test.ts +0 -95
  198. package/src/services/local-secrets.ts +0 -71
  199. package/src/services/local-variables.test.ts +0 -61
  200. package/src/services/local-variables.ts +0 -45
  201. package/src/services/logger-console.test.ts +0 -117
  202. package/src/services/logger-console.ts +0 -174
  203. package/src/services/logger.ts +0 -48
  204. package/src/services/meta-service.test.ts +0 -75
  205. package/src/services/meta-service.ts +0 -767
  206. package/src/services/persona-actor-secret.test.ts +0 -68
  207. package/src/services/persona-actor-secret.ts +0 -70
  208. package/src/services/persona-sign-in.test.ts +0 -219
  209. package/src/services/persona-sign-in.ts +0 -238
  210. package/src/services/personas-service.ts +0 -191
  211. package/src/services/pikku-user-id.test.ts +0 -62
  212. package/src/services/pikku-user-id.ts +0 -13
  213. package/src/services/queue-webhook-service.test.ts +0 -409
  214. package/src/services/queue-webhook-service.ts +0 -150
  215. package/src/services/remote-jobs.test.ts +0 -106
  216. package/src/services/remote-jobs.ts +0 -92
  217. package/src/services/scheduler-service.ts +0 -37
  218. package/src/services/schema-service.ts +0 -10
  219. package/src/services/scope-service.ts +0 -91
  220. package/src/services/scoped-credential-service.test.ts +0 -86
  221. package/src/services/scoped-credential-service.ts +0 -63
  222. package/src/services/scoped-secret-service.test.ts +0 -93
  223. package/src/services/scoped-secret-service.ts +0 -40
  224. package/src/services/secret-host-binding.test.ts +0 -138
  225. package/src/services/secret-host-binding.ts +0 -51
  226. package/src/services/secret-service.ts +0 -25
  227. package/src/services/secretless.test.ts +0 -54
  228. package/src/services/secretless.ts +0 -29
  229. package/src/services/session-store.ts +0 -9
  230. package/src/services/stub-tracker.test.ts +0 -104
  231. package/src/services/stub-tracker.ts +0 -175
  232. package/src/services/system-role-guard.test.ts +0 -96
  233. package/src/services/system-role-guard.ts +0 -71
  234. package/src/services/temporary-file-service.ts +0 -76
  235. package/src/services/trigger-service.ts +0 -5
  236. package/src/services/typed-credential-service.ts +0 -83
  237. package/src/services/typed-secret-service.test.ts +0 -204
  238. package/src/services/typed-secret-service.ts +0 -132
  239. package/src/services/typed-variables-service.test.ts +0 -166
  240. package/src/services/typed-variables-service.ts +0 -166
  241. package/src/services/user-session-service.test.ts +0 -147
  242. package/src/services/user-session-service.ts +0 -85
  243. package/src/services/v8-coverage-service.test.ts +0 -69
  244. package/src/services/v8-coverage-service.ts +0 -163
  245. package/src/services/variables-service.ts +0 -13
  246. package/src/services/webhook-service.ts +0 -147
  247. package/src/services/workflow-service.ts +0 -120
  248. package/src/side-effects-are-declared.test.ts +0 -84
  249. package/src/source-files-stay-composable.test.ts +0 -41
  250. package/src/template-alias-surface.test.ts +0 -240
  251. package/src/test-utils.ts +0 -38
  252. package/src/testing/index.ts +0 -3
  253. package/src/testing/service-tests/agent-run-service-tests.ts +0 -98
  254. package/src/testing/service-tests/agent-storage-service-tests.ts +0 -379
  255. package/src/testing/service-tests/channel-store-tests.ts +0 -98
  256. package/src/testing/service-tests/credential-service-tests.ts +0 -143
  257. package/src/testing/service-tests/deployment-service-tests.ts +0 -33
  258. package/src/testing/service-tests/event-hub-store-tests.ts +0 -48
  259. package/src/testing/service-tests/secret-service-tests.ts +0 -105
  260. package/src/testing/service-tests/session-store-tests.ts +0 -62
  261. package/src/testing/service-tests/workflow-run-service-tests.ts +0 -59
  262. package/src/testing/service-tests/workflow-service-tests.ts +0 -308
  263. package/src/testing/service-tests.ts +0 -95
  264. package/src/time-utils.test.ts +0 -56
  265. package/src/time-utils.ts +0 -89
  266. package/src/types/core.types.ts +0 -446
  267. package/src/types/index.ts +0 -25
  268. package/src/types/state.types.ts +0 -226
  269. package/src/types/typed-credentials.test.ts +0 -72
  270. package/src/utils/hash.test.ts +0 -68
  271. package/src/utils/hash.ts +0 -26
  272. package/src/utils/hmac.ts +0 -21
  273. package/src/utils/node-host-resolver.ts +0 -20
  274. package/src/utils/safe-fetch.test.ts +0 -515
  275. package/src/utils/safe-fetch.ts +0 -347
  276. package/src/utils.test.ts +0 -359
  277. package/src/utils.ts +0 -165
  278. package/src/version.test.ts +0 -80
  279. package/src/version.ts +0 -25
  280. package/src/wirings/actor-flow/actor-flow.types.ts +0 -40
  281. package/src/wirings/actor-flow/index.ts +0 -10
  282. package/src/wirings/actor-flow/run-conversation.test.ts +0 -187
  283. package/src/wirings/actor-flow/run-conversation.ts +0 -280
  284. package/src/wirings/addon/addon-auth-tags.test.ts +0 -219
  285. package/src/wirings/addon/addon-runner.ts +0 -236
  286. package/src/wirings/addon/addon-scopes.test.ts +0 -225
  287. package/src/wirings/addon/addon-secrets.test.ts +0 -391
  288. package/src/wirings/addon/index.ts +0 -12
  289. package/src/wirings/addon/remote-addon-auth.ts +0 -65
  290. package/src/wirings/addon/wire-addon.test.ts +0 -102
  291. package/src/wirings/addon/wire-addon.ts +0 -202
  292. package/src/wirings/addon/wire-remote-addon.ts +0 -41
  293. package/src/wirings/agent/agent-agui.test.ts +0 -1213
  294. package/src/wirings/agent/agent-agui.ts +0 -405
  295. package/src/wirings/agent/agent-authorization.test.ts +0 -208
  296. package/src/wirings/agent/agent-finalize.test.ts +0 -187
  297. package/src/wirings/agent/agent-finalize.ts +0 -197
  298. package/src/wirings/agent/agent-helpers.test.ts +0 -215
  299. package/src/wirings/agent/agent-helpers.ts +0 -96
  300. package/src/wirings/agent/agent-interrupt.test.ts +0 -833
  301. package/src/wirings/agent/agent-interrupt.ts +0 -400
  302. package/src/wirings/agent/agent-memory.test.ts +0 -397
  303. package/src/wirings/agent/agent-memory.ts +0 -496
  304. package/src/wirings/agent/agent-middleware.types.test.ts +0 -41
  305. package/src/wirings/agent/agent-model-config.test.ts +0 -103
  306. package/src/wirings/agent/agent-model-config.ts +0 -59
  307. package/src/wirings/agent/agent-prepare.test.ts +0 -977
  308. package/src/wirings/agent/agent-prepare.ts +0 -1083
  309. package/src/wirings/agent/agent-registry.test.ts +0 -455
  310. package/src/wirings/agent/agent-registry.ts +0 -99
  311. package/src/wirings/agent/agent-resume-authorization.test.ts +0 -206
  312. package/src/wirings/agent/agent-rpc.ts +0 -116
  313. package/src/wirings/agent/agent-runner.test.ts +0 -1229
  314. package/src/wirings/agent/agent-runner.ts +0 -858
  315. package/src/wirings/agent/agent-stream-delegate.test.ts +0 -381
  316. package/src/wirings/agent/agent-stream-output-hooks.test.ts +0 -353
  317. package/src/wirings/agent/agent-stream.test.ts +0 -1800
  318. package/src/wirings/agent/agent-stream.ts +0 -1639
  319. package/src/wirings/agent/agent-thread-ownership.test.ts +0 -297
  320. package/src/wirings/agent/agent-turn.test.ts +0 -65
  321. package/src/wirings/agent/agent-turn.ts +0 -122
  322. package/src/wirings/agent/agent-utils.ts +0 -20
  323. package/src/wirings/agent/agent.types.ts +0 -676
  324. package/src/wirings/agent/index.ts +0 -58
  325. package/src/wirings/agent/voice-input.test.ts +0 -220
  326. package/src/wirings/agent/voice-input.ts +0 -180
  327. package/src/wirings/agent/voice-output.test.ts +0 -510
  328. package/src/wirings/agent/voice-output.ts +0 -311
  329. package/src/wirings/agent-scorer/agent-scorer-grade.test.ts +0 -106
  330. package/src/wirings/agent-scorer/agent-scorer-grade.ts +0 -55
  331. package/src/wirings/agent-scorer/agent-scorer-judge.test.ts +0 -285
  332. package/src/wirings/agent-scorer/agent-scorer-judge.ts +0 -180
  333. package/src/wirings/agent-scorer/agent-scorer-live.test.ts +0 -174
  334. package/src/wirings/agent-scorer/agent-scorer-live.ts +0 -56
  335. package/src/wirings/agent-scorer/agent-scorer-registry.ts +0 -66
  336. package/src/wirings/agent-scorer/agent-scorer-sampling.test.ts +0 -34
  337. package/src/wirings/agent-scorer/agent-scorer-sampling.ts +0 -36
  338. package/src/wirings/agent-scorer/agent-scorer-snapshots.test.ts +0 -49
  339. package/src/wirings/agent-scorer/agent-scorer-snapshots.ts +0 -46
  340. package/src/wirings/agent-scorer/agent-scorer-worker.test.ts +0 -122
  341. package/src/wirings/agent-scorer/agent-scorer-worker.ts +0 -71
  342. package/src/wirings/agent-scorer/agent-scorer.ts +0 -102
  343. package/src/wirings/agent-scorer/agent-scorer.types.ts +0 -128
  344. package/src/wirings/agent-scorer/index.ts +0 -23
  345. package/src/wirings/channel/channel-common.ts +0 -102
  346. package/src/wirings/channel/channel-handler-shapes.test.ts +0 -72
  347. package/src/wirings/channel/channel-handler.test.ts +0 -322
  348. package/src/wirings/channel/channel-handler.ts +0 -259
  349. package/src/wirings/channel/channel-host-rpc.test.ts +0 -150
  350. package/src/wirings/channel/channel-host-rpc.ts +0 -69
  351. package/src/wirings/channel/channel-middleware-runner.test.ts +0 -188
  352. package/src/wirings/channel/channel-middleware-runner.ts +0 -126
  353. package/src/wirings/channel/channel-rpc-registry.ts +0 -116
  354. package/src/wirings/channel/channel-rpc-responder.ts +0 -117
  355. package/src/wirings/channel/channel-rpc-service.ts +0 -132
  356. package/src/wirings/channel/channel-rpc-validators.ts +0 -65
  357. package/src/wirings/channel/channel-rpc.test.ts +0 -841
  358. package/src/wirings/channel/channel-rpc.ts +0 -5
  359. package/src/wirings/channel/channel-rpc.types.ts +0 -160
  360. package/src/wirings/channel/channel-runner.ts +0 -164
  361. package/src/wirings/channel/channel-store.ts +0 -35
  362. package/src/wirings/channel/channel.types.ts +0 -193
  363. package/src/wirings/channel/define-channel-routes.ts +0 -5
  364. package/src/wirings/channel/eventhub-service.ts +0 -16
  365. package/src/wirings/channel/eventhub-store.ts +0 -13
  366. package/src/wirings/channel/index.ts +0 -40
  367. package/src/wirings/channel/local/index.ts +0 -3
  368. package/src/wirings/channel/local/local-channel-handler.ts +0 -98
  369. package/src/wirings/channel/local/local-channel-runner.test.ts +0 -339
  370. package/src/wirings/channel/local/local-channel-runner.ts +0 -271
  371. package/src/wirings/channel/local/local-eventhub-service.test.ts +0 -77
  372. package/src/wirings/channel/local/local-eventhub-service.ts +0 -69
  373. package/src/wirings/channel/log-channels.ts +0 -16
  374. package/src/wirings/channel/pikku-abstract-channel-handler.test.ts +0 -135
  375. package/src/wirings/channel/pikku-abstract-channel-handler.ts +0 -60
  376. package/src/wirings/channel/serverless/index.ts +0 -6
  377. package/src/wirings/channel/serverless/serverless-channel-runner.ts +0 -328
  378. package/src/wirings/cli/channel/cli-approval.test.ts +0 -177
  379. package/src/wirings/cli/channel/cli-approval.ts +0 -135
  380. package/src/wirings/cli/channel/cli-channel-runner.ts +0 -118
  381. package/src/wirings/cli/channel/cli-raw-channel-runner.test.ts +0 -192
  382. package/src/wirings/cli/channel/cli-raw-channel-runner.ts +0 -148
  383. package/src/wirings/cli/channel/cli-raw-client-runner.test.ts +0 -480
  384. package/src/wirings/cli/channel/cli-raw-client-runner.ts +0 -188
  385. package/src/wirings/cli/channel/index.ts +0 -6
  386. package/src/wirings/cli/cli-runner.test.ts +0 -969
  387. package/src/wirings/cli/cli-runner.ts +0 -538
  388. package/src/wirings/cli/cli.types.ts +0 -388
  389. package/src/wirings/cli/command-parser.test.ts +0 -1120
  390. package/src/wirings/cli/command-parser.ts +0 -713
  391. package/src/wirings/cli/define-cli-commands.ts +0 -13
  392. package/src/wirings/cli/format-cli-error.test.ts +0 -91
  393. package/src/wirings/cli/format-cli-error.ts +0 -96
  394. package/src/wirings/cli/index.ts +0 -19
  395. package/src/wirings/credential/credential.types.ts +0 -37
  396. package/src/wirings/credential/define-credential.ts +0 -49
  397. package/src/wirings/credential/index.ts +0 -7
  398. package/src/wirings/credential/validate-credential-definitions.ts +0 -63
  399. package/src/wirings/gateway/gateway-authorization.test.ts +0 -575
  400. package/src/wirings/gateway/gateway-channel-meta.test.ts +0 -44
  401. package/src/wirings/gateway/gateway-runner.test.ts +0 -581
  402. package/src/wirings/gateway/gateway-runner.ts +0 -411
  403. package/src/wirings/gateway/gateway.types.ts +0 -137
  404. package/src/wirings/gateway/index.ts +0 -15
  405. package/src/wirings/http/http-routes.test.ts +0 -318
  406. package/src/wirings/http/http-routes.ts +0 -111
  407. package/src/wirings/http/http-runner-addon-ref.test.ts +0 -238
  408. package/src/wirings/http/http-runner.test.ts +0 -503
  409. package/src/wirings/http/http-runner.ts +0 -462
  410. package/src/wirings/http/http.types.ts +0 -307
  411. package/src/wirings/http/index.ts +0 -27
  412. package/src/wirings/http/log-http-routes.ts +0 -18
  413. package/src/wirings/http/pikku-fetch-http-request.test.ts +0 -318
  414. package/src/wirings/http/pikku-fetch-http-request.ts +0 -260
  415. package/src/wirings/http/pikku-fetch-http-response.test.ts +0 -123
  416. package/src/wirings/http/pikku-fetch-http-response.ts +0 -149
  417. package/src/wirings/http/routers/http-router.ts +0 -13
  418. package/src/wirings/http/routers/path-to-regex.test.ts +0 -306
  419. package/src/wirings/http/routers/path-to-regex.ts +0 -115
  420. package/src/wirings/http/web-request.test.ts +0 -382
  421. package/src/wirings/http/web-request.ts +0 -162
  422. package/src/wirings/mcp/index.ts +0 -26
  423. package/src/wirings/mcp/mcp-endpoint-registry.test.ts +0 -388
  424. package/src/wirings/mcp/mcp-endpoint-registry.ts +0 -159
  425. package/src/wirings/mcp/mcp-runner.test.ts +0 -588
  426. package/src/wirings/mcp/mcp-runner.ts +0 -330
  427. package/src/wirings/mcp/mcp.types.ts +0 -199
  428. package/src/wirings/node/index.ts +0 -2
  429. package/src/wirings/node/node.types.ts +0 -23
  430. package/src/wirings/oauth2/index.ts +0 -1
  431. package/src/wirings/oauth2/oauth2.types.ts +0 -12
  432. package/src/wirings/persona/define-personas.ts +0 -33
  433. package/src/wirings/persona/index.ts +0 -75
  434. package/src/wirings/persona/persona-app-scopes.test.ts +0 -47
  435. package/src/wirings/persona/persona-app-scopes.ts +0 -74
  436. package/src/wirings/persona/persona-email.ts +0 -87
  437. package/src/wirings/persona/persona-environments.test.ts +0 -194
  438. package/src/wirings/persona/persona-environments.ts +0 -138
  439. package/src/wirings/persona/persona-mailbox.ts +0 -156
  440. package/src/wirings/persona/persona.test.ts +0 -230
  441. package/src/wirings/persona/persona.types.ts +0 -156
  442. package/src/wirings/persona/validate-personas.ts +0 -137
  443. package/src/wirings/queue/index.ts +0 -29
  444. package/src/wirings/queue/queue-identity.test.ts +0 -454
  445. package/src/wirings/queue/queue-identity.ts +0 -176
  446. package/src/wirings/queue/queue-runner.test.ts +0 -705
  447. package/src/wirings/queue/queue-runner.ts +0 -181
  448. package/src/wirings/queue/queue.types.ts +0 -161
  449. package/src/wirings/queue/register-queue-helper.ts +0 -46
  450. package/src/wirings/queue/signed-queue-service.ts +0 -60
  451. package/src/wirings/queue/validate-worker-config.test.ts +0 -108
  452. package/src/wirings/queue/validate-worker-config.ts +0 -90
  453. package/src/wirings/role/define-system-role.ts +0 -33
  454. package/src/wirings/role/index.ts +0 -13
  455. package/src/wirings/role/role.test.ts +0 -104
  456. package/src/wirings/role/role.types.ts +0 -47
  457. package/src/wirings/role/validate-role-definitions.ts +0 -93
  458. package/src/wirings/rpc/index.ts +0 -8
  459. package/src/wirings/rpc/rpc-runner.test.ts +0 -1130
  460. package/src/wirings/rpc/rpc-runner.ts +0 -569
  461. package/src/wirings/rpc/rpc-types.ts +0 -87
  462. package/src/wirings/scheduler/index.ts +0 -11
  463. package/src/wirings/scheduler/log-schedulers.ts +0 -16
  464. package/src/wirings/scheduler/scheduler-runner.test.ts +0 -835
  465. package/src/wirings/scheduler/scheduler-runner.ts +0 -138
  466. package/src/wirings/scheduler/scheduler.types.ts +0 -42
  467. package/src/wirings/scope/define-scope.ts +0 -33
  468. package/src/wirings/scope/index.ts +0 -15
  469. package/src/wirings/scope/scope.test.ts +0 -159
  470. package/src/wirings/scope/scope.types.ts +0 -42
  471. package/src/wirings/scope/validate-scope-definitions.ts +0 -107
  472. package/src/wirings/secret/index.ts +0 -9
  473. package/src/wirings/secret/secret.types.ts +0 -70
  474. package/src/wirings/secret/validate-secret-definitions.test.ts +0 -232
  475. package/src/wirings/secret/validate-secret-definitions.ts +0 -88
  476. package/src/wirings/trigger/index.ts +0 -9
  477. package/src/wirings/trigger/pikku-trigger-service.ts +0 -107
  478. package/src/wirings/trigger/trigger-runner.test.ts +0 -78
  479. package/src/wirings/trigger/trigger-runner.ts +0 -113
  480. package/src/wirings/trigger/trigger.types.ts +0 -100
  481. package/src/wirings/variable/index.ts +0 -8
  482. package/src/wirings/variable/validate-variable-definitions.test.ts +0 -115
  483. package/src/wirings/variable/validate-variable-definitions.ts +0 -71
  484. package/src/wirings/variable/variable.types.ts +0 -40
  485. package/src/wirings/virtual-user/index.ts +0 -107
  486. package/src/wirings/virtual-user/prepare-virtual-user-run.test.ts +0 -115
  487. package/src/wirings/virtual-user/prepare-virtual-user-run.ts +0 -95
  488. package/src/wirings/virtual-user/run-virtual-user.test.ts +0 -774
  489. package/src/wirings/virtual-user/run-virtual-user.ts +0 -684
  490. package/src/wirings/virtual-user/virtual-user-agents.test.ts +0 -72
  491. package/src/wirings/virtual-user/virtual-user-agents.ts +0 -62
  492. package/src/wirings/virtual-user/virtual-user-catalogue.test.ts +0 -215
  493. package/src/wirings/virtual-user/virtual-user-catalogue.ts +0 -184
  494. package/src/wirings/virtual-user/virtual-user-derive.test.ts +0 -426
  495. package/src/wirings/virtual-user/virtual-user-derive.ts +0 -161
  496. package/src/wirings/virtual-user/virtual-user-dispositions.test.ts +0 -68
  497. package/src/wirings/virtual-user/virtual-user-dispositions.ts +0 -210
  498. package/src/wirings/virtual-user/virtual-user-intents.test.ts +0 -218
  499. package/src/wirings/virtual-user/virtual-user-intents.ts +0 -185
  500. package/src/wirings/virtual-user/virtual-user-rng.test.ts +0 -72
  501. package/src/wirings/virtual-user/virtual-user-rng.ts +0 -50
  502. package/src/wirings/virtual-user/virtual-user-run-store.ts +0 -131
  503. package/src/wirings/virtual-user/virtual-user-scaffold.test.ts +0 -854
  504. package/src/wirings/virtual-user/virtual-user-scaffold.ts +0 -664
  505. package/src/wirings/virtual-user/virtual-user-schedule-store.ts +0 -93
  506. package/src/wirings/virtual-user/virtual-user-schedule.test.ts +0 -280
  507. package/src/wirings/virtual-user/virtual-user-schedule.ts +0 -156
  508. package/src/wirings/virtual-user/virtual-user-target.ts +0 -47
  509. package/src/wirings/virtual-user/virtual-user.types.ts +0 -215
  510. package/src/wirings/workflow/dsl/workflow-dsl.types.ts +0 -709
  511. package/src/wirings/workflow/dsl/workflow-runner.ts +0 -25
  512. package/src/wirings/workflow/feature.test.ts +0 -131
  513. package/src/wirings/workflow/feature.ts +0 -59
  514. package/src/wirings/workflow/graph/graph-foreach-queued.test.ts +0 -569
  515. package/src/wirings/workflow/graph/graph-foreach.test.ts +0 -626
  516. package/src/wirings/workflow/graph/graph-node.ts +0 -115
  517. package/src/wirings/workflow/graph/graph-runner.test.ts +0 -1049
  518. package/src/wirings/workflow/graph/graph-runner.ts +0 -1376
  519. package/src/wirings/workflow/graph/graph-validation.test.ts +0 -27
  520. package/src/wirings/workflow/graph/graph-validation.ts +0 -41
  521. package/src/wirings/workflow/graph/template.test.ts +0 -49
  522. package/src/wirings/workflow/graph/template.ts +0 -42
  523. package/src/wirings/workflow/graph/wire-workflow-graph.ts +0 -39
  524. package/src/wirings/workflow/graph/workflow-graph.types.ts +0 -75
  525. package/src/wirings/workflow/index.ts +0 -107
  526. package/src/wirings/workflow/pikku-scenario-service.ts +0 -1013
  527. package/src/wirings/workflow/pikku-workflow-service.test.ts +0 -963
  528. package/src/wirings/workflow/pikku-workflow-service.ts +0 -1993
  529. package/src/wirings/workflow/run-timeline.test.ts +0 -199
  530. package/src/wirings/workflow/run-timeline.ts +0 -185
  531. package/src/wirings/workflow/scenario-cookie-jar.test.ts +0 -107
  532. package/src/wirings/workflow/scenario-cookie-jar.ts +0 -57
  533. package/src/wirings/workflow/scenario-expectations.test.ts +0 -238
  534. package/src/wirings/workflow/scenario-hooks.test.ts +0 -259
  535. package/src/wirings/workflow/scenario-poll.test.ts +0 -64
  536. package/src/wirings/workflow/scenario-poll.ts +0 -27
  537. package/src/wirings/workflow/scenario-prose.test.ts +0 -275
  538. package/src/wirings/workflow/scenario-prose.ts +0 -86
  539. package/src/wirings/workflow/scenario-run.types.ts +0 -193
  540. package/src/wirings/workflow/scenario-service.test.ts +0 -147
  541. package/src/wirings/workflow/scenario-step-guards.ts +0 -23
  542. package/src/wirings/workflow/scenario-step.test.ts +0 -800
  543. package/src/wirings/workflow/scenario-step.types.ts +0 -262
  544. package/src/wirings/workflow/scenario-surface.test.ts +0 -146
  545. package/src/wirings/workflow/scenario-surface.ts +0 -71
  546. package/src/wirings/workflow/scenario.types.ts +0 -63
  547. package/src/wirings/workflow/workflow-approval-audit.ts +0 -47
  548. package/src/wirings/workflow/workflow-approval-policy.test.ts +0 -594
  549. package/src/wirings/workflow/workflow-approval-policy.ts +0 -68
  550. package/src/wirings/workflow/workflow-approval.ts +0 -290
  551. package/src/wirings/workflow/workflow-child-run-session.test.ts +0 -168
  552. package/src/wirings/workflow/workflow-constants.ts +0 -66
  553. package/src/wirings/workflow/workflow-dispatch-durability.test.ts +0 -116
  554. package/src/wirings/workflow/workflow-dispatch-payload.test.ts +0 -55
  555. package/src/wirings/workflow/workflow-dispatch-relay.test.ts +0 -128
  556. package/src/wirings/workflow/workflow-errors.ts +0 -132
  557. package/src/wirings/workflow/workflow-inline-authority.test.ts +0 -175
  558. package/src/wirings/workflow/workflow-invocation-id.test.ts +0 -51
  559. package/src/wirings/workflow/workflow-invocation-id.ts +0 -28
  560. package/src/wirings/workflow/workflow-meta-resolver.ts +0 -45
  561. package/src/wirings/workflow/workflow-mirror.test.ts +0 -171
  562. package/src/wirings/workflow/workflow-missing-meta.test.ts +0 -92
  563. package/src/wirings/workflow/workflow-on-error.test.ts +0 -145
  564. package/src/wirings/workflow/workflow-queue-routing.ts +0 -129
  565. package/src/wirings/workflow/workflow-queue-wiring.ts +0 -149
  566. package/src/wirings/workflow/workflow-queue-workers.test.ts +0 -131
  567. package/src/wirings/workflow/workflow-queue-workers.ts +0 -66
  568. package/src/wirings/workflow/workflow-recovery.ts +0 -192
  569. package/src/wirings/workflow/workflow-replay-snapshot.test.ts +0 -140
  570. package/src/wirings/workflow/workflow-retry-policy.test.ts +0 -113
  571. package/src/wirings/workflow/workflow-run-authority.test.ts +0 -212
  572. package/src/wirings/workflow/workflow-run-context.test.ts +0 -172
  573. package/src/wirings/workflow/workflow-run-engine.types.ts +0 -92
  574. package/src/wirings/workflow/workflow-run-ownership.ts +0 -37
  575. package/src/wirings/workflow/workflow-run-polling.test.ts +0 -127
  576. package/src/wirings/workflow/workflow-stalled-recovery.test.ts +0 -152
  577. package/src/wirings/workflow/workflow-status-stream.test.ts +0 -354
  578. package/src/wirings/workflow/workflow-status-stream.ts +0 -144
  579. package/src/wirings/workflow/workflow-step-claim.ts +0 -46
  580. package/src/wirings/workflow/workflow-step-ordinal.test.ts +0 -94
  581. package/src/wirings/workflow/workflow-step-session.test.ts +0 -87
  582. package/src/wirings/workflow/workflow-suspend.ts +0 -61
  583. package/src/wirings/workflow/workflow-terminal-run-guard.test.ts +0 -105
  584. package/src/wirings/workflow/workflow.types.ts +0 -268
  585. package/src/wirings-stay-decoupled.test.ts +0 -130
  586. package/tsconfig.json +0 -14
  587. package/tsconfig.tsbuildinfo +0 -1
  588. package/tsconfig.type-tests.json +0 -15
@@ -1,230 +0,0 @@
1
- import { describe, test } from 'node:test'
2
- import assert from 'node:assert/strict'
3
-
4
- import { personaEmail, personaEmails } from './persona-email.js'
5
- import {
6
- isRunnablePersona,
7
- roleMismatchMessage,
8
- verifyPersonaRoles,
9
- } from './validate-personas.js'
10
- import {
11
- allowedLinks,
12
- applyMailboxAllowlist,
13
- isAllowedSender,
14
- } from './persona-mailbox.js'
15
- import type { ReceivedEmail } from './persona-mailbox.js'
16
-
17
- describe('computed addresses', () => {
18
- test('a run gets its own sub-address', () => {
19
- assert.equal(
20
- personaEmail('susan', 'mail.example.com', 'r7'),
21
- 'susan+r7@mail.example.com'
22
- )
23
- })
24
-
25
- test('without a run id the address is the stable, seedable form', () => {
26
- assert.equal(
27
- personaEmail('susan', 'mail.example.com'),
28
- 'susan@mail.example.com'
29
- )
30
- })
31
-
32
- test('an id that is not address-shaped is reduced to one', () => {
33
- assert.equal(
34
- personaEmail('Susan.Buyer_2', 'example.com'),
35
- 'susan-buyer-2@example.com'
36
- )
37
- })
38
-
39
- test('an id with nothing usable in it is refused rather than guessed at', () => {
40
- assert.throws(
41
- () => personaEmail('...', 'example.com'),
42
- /no usable email label/
43
- )
44
- })
45
-
46
- // A synthetic domain was rejected precisely because it makes every
47
- // email-driven flow untestable; something that is not a domain at all should
48
- // not slip through as one.
49
- test('a domain that is not a domain is refused', () => {
50
- assert.throws(() => personaEmail('susan', 'personas'), /is not a domain/)
51
- assert.throws(() => personaEmail('susan', 'a@b.com'), /is not a domain/)
52
- })
53
-
54
- test('a leading @ on the domain is tolerated', () => {
55
- assert.equal(personaEmail('susan', '@example.com'), 'susan@example.com')
56
- })
57
- })
58
-
59
- describe('addresses across a run', () => {
60
- test('every persona gets one', () => {
61
- const emails = personaEmails(['susan', 'yasser'], 'example.com', 'r1')
62
- assert.deepEqual(emails, {
63
- susan: 'susan+r1@example.com',
64
- yasser: 'yasser+r1@example.com',
65
- })
66
- })
67
-
68
- // Two personas sharing an address share a user row and read each other's
69
- // magic links — the run passes and means nothing.
70
- test('two ids that reduce to the same label are refused', () => {
71
- assert.throws(
72
- () => personaEmails(['susan-buyer', 'Susan.Buyer'], 'example.com'),
73
- /both compute the address/
74
- )
75
- })
76
- })
77
-
78
- describe('who can run', () => {
79
- test('an email login runs', () => {
80
- assert.equal(isRunnablePersona({ account: {} }), true)
81
- })
82
-
83
- test('a persona with no account block at all still runs', () => {
84
- assert.equal(isRunnablePersona({}), true)
85
- })
86
-
87
- // Driving a consent screen needs a human, so this is a property of the
88
- // account rather than a decision anyone should have to remember to record.
89
- test('a provider login does not', () => {
90
- assert.equal(isRunnablePersona({ account: { provider: 'google' } }), false)
91
- })
92
-
93
- test('an explicit refusal wins over an otherwise runnable account', () => {
94
- assert.equal(isRunnablePersona({ account: {}, runnable: false }), false)
95
- })
96
- })
97
-
98
- describe('verifying roles at sign-in', () => {
99
- test('a match runs', () => {
100
- const v = verifyPersonaRoles('susan', ['buyer'], ['buyer'])
101
- assert.equal(v.ok, true)
102
- assert.equal(roleMismatchMessage(v), null)
103
- })
104
-
105
- test('order and duplication are not drift', () => {
106
- const v = verifyPersonaRoles(
107
- 'yasser',
108
- ['admin', 'buyer'],
109
- ['buyer', 'admin', 'buyer']
110
- )
111
- assert.equal(v.ok, true)
112
- })
113
-
114
- // Under-granted: the 403s look like authorization findings but are seed drift.
115
- test('a missing role stops the run and says which', () => {
116
- const v = verifyPersonaRoles('susan', ['buyer'], [])
117
- assert.equal(v.ok, false)
118
- assert.deepEqual(v.missing, ['buyer'])
119
- assert.match(roleMismatchMessage(v)!, /missing buyer/)
120
- })
121
-
122
- // Over-granted: nothing fails, the persona just stops testing its boundary.
123
- test('an extra role stops the run too', () => {
124
- const v = verifyPersonaRoles('susan', ['buyer'], ['buyer', 'admin'])
125
- assert.equal(v.ok, false)
126
- assert.deepEqual(v.extra, ['admin'])
127
- assert.match(roleMismatchMessage(v)!, /unexpectedly holds admin/)
128
- })
129
-
130
- test('both directions are reported together', () => {
131
- const message = roleMismatchMessage(
132
- verifyPersonaRoles('susan', ['buyer'], ['admin'])
133
- )!
134
- assert.match(message, /missing buyer and unexpectedly holds admin/)
135
- })
136
- })
137
-
138
- const email = (over: Partial<ReceivedEmail> = {}): ReceivedEmail => ({
139
- to: 'susan+r1@example.com',
140
- from: 'noreply@example.com',
141
- subject: 'Verify',
142
- receivedAt: new Date(),
143
- links: [],
144
- codes: [],
145
- ...over,
146
- })
147
-
148
- describe('the sender allowlist', () => {
149
- const allowlist = { senders: ['noreply@example.com', 'mail.example.com'] }
150
-
151
- test('an exact sender is allowed', () => {
152
- assert.equal(isAllowedSender('noreply@example.com', allowlist), true)
153
- })
154
-
155
- test('a bare domain entry allows any sender at it', () => {
156
- assert.equal(isAllowedSender('bounces@mail.example.com', allowlist), true)
157
- })
158
-
159
- test('case does not decide it', () => {
160
- assert.equal(isAllowedSender('NoReply@Example.COM', allowlist), true)
161
- })
162
-
163
- // The whole point: an address that is real and deliverable is an address
164
- // anyone can send instructions to.
165
- test('a stranger is dropped', () => {
166
- assert.equal(isAllowedSender('attacker@evil.test', allowlist), false)
167
- })
168
-
169
- // 'example.com' must not admit 'example.com.attacker.net'.
170
- test('a domain entry is not a substring match', () => {
171
- assert.equal(
172
- isAllowedSender('x@mail.example.com.attacker.net', allowlist),
173
- false
174
- )
175
- })
176
-
177
- test('filtering drops the stranger and keeps the rest', () => {
178
- const kept = applyMailboxAllowlist(
179
- [email(), email({ from: 'attacker@evil.test' })],
180
- allowlist
181
- )
182
- assert.equal(kept.length, 1)
183
- assert.equal(kept[0]!.from, 'noreply@example.com')
184
- })
185
- })
186
-
187
- describe('link origins', () => {
188
- const allowlist = {
189
- senders: ['example.com'],
190
- linkOrigins: ['https://staging.example.com'],
191
- }
192
-
193
- test('an on-origin link survives', () => {
194
- assert.deepEqual(
195
- allowedLinks(['https://staging.example.com/verify?t=1'], allowlist),
196
- ['https://staging.example.com/verify?t=1']
197
- )
198
- })
199
-
200
- test('an off-origin link is dropped', () => {
201
- assert.deepEqual(allowedLinks(['https://evil.test/steal'], allowlist), [])
202
- })
203
-
204
- test('garbage is dropped rather than thrown on', () => {
205
- assert.deepEqual(allowedLinks(['not a url'], allowlist), [])
206
- })
207
-
208
- // Dropping the link rather than the email: a legitimate stage email may
209
- // carry an unsubscribe link elsewhere, and refusing it would break the flow
210
- // this exists to test.
211
- test('a mixed email keeps its good link and loses the bad one', () => {
212
- const [kept] = applyMailboxAllowlist(
213
- [
214
- email({
215
- from: 'noreply@example.com',
216
- links: ['https://staging.example.com/verify', 'https://evil.test/x'],
217
- }),
218
- ],
219
- allowlist
220
- )
221
- assert.deepEqual(kept!.links, ['https://staging.example.com/verify'])
222
- })
223
-
224
- test('no configured origins means no narrowing', () => {
225
- assert.deepEqual(
226
- allowedLinks(['https://anywhere.test/x'], { senders: [] }),
227
- ['https://anywhere.test/x']
228
- )
229
- })
230
- })
@@ -1,156 +0,0 @@
1
- import type { VirtualUserDisposition } from '../virtual-user/virtual-user.types.js'
2
- import type { VirtualUserTuning } from '../virtual-user/virtual-user-dispositions.js'
3
-
4
- /**
5
- * One login belonging to a persona.
6
- *
7
- * Deliberately near-empty in the common case: the address is computed from the
8
- * persona's name and the run id, and the password derives from
9
- * `SCENARIO_ACTOR_SECRET`, so there is nothing left to write down. It fills up
10
- * only for a provider login.
11
- *
12
- * Shaped after better-auth's `account` table, which is what most pikku apps are
13
- * actually running: `providerId` plus the provider's own id, and no email
14
- * column — the address belongs to the person, not the login.
15
- */
16
- export type CorePersonaAccount = {
17
- /**
18
- * The identity provider, e.g. `'google'`. Omit for email and password.
19
- *
20
- * A provider account is declarable but not runnable: driving its consent
21
- * screen needs a human, so `pikku persona run` refuses rather than failing
22
- * somewhere inside a browser.
23
- */
24
- provider?: string
25
- }
26
-
27
- /**
28
- * A person who uses your product: a name, a job, a temperament, and what they
29
- * are trying to get done.
30
- *
31
- * This is Cooper's persona — "a fictional character created to represent a user
32
- * type" — with the two things a synthetic user additionally needs: the roles
33
- * that say what they may do, and the account they log in with. A persona while
34
- * running is a virtual user; there is no second declaration for that.
35
- */
36
- export type CorePersona = {
37
- /** The person's name, as a person would give it. */
38
- name: string
39
- jobTitle?: string
40
- description?: string
41
- /**
42
- * A picture of this person, as any URL a browser can load: a file your app
43
- * serves, an asset on a CDN, a Gravatar link.
44
- *
45
- * Optional because it is decoration. Omitted, the console draws a colour and
46
- * an icon derived from the persona's id, which is stable, needs no network and
47
- * is more legible than the identicon a synthetic address would resolve to —
48
- * which is also why nothing is derived here.
49
- */
50
- avatarUrl?: string
51
- /**
52
- * The roles this person holds. Only system roles may be named — a custom
53
- * role can be deleted from the console, so a persona pinned to one silently
54
- * stops testing what it claims to.
55
- *
56
- * These are granted, not merely recorded: the generated seed applies them,
57
- * and a run verifies them at sign-in.
58
- */
59
- roles?: string[]
60
- /**
61
- * How they behave and talk, in prose. Temperament, not permissions — "reads
62
- * other people's ids out of urls" belongs here; "can see reports and nothing
63
- * else" is a role wearing a personality.
64
- */
65
- personality?: string
66
- /**
67
- * What they durably want. A run may append situational goals; it never
68
- * replaces these, because a run that replaces Susan's goals is not Susan.
69
- */
70
- goals?: string[]
71
- tags?: string[]
72
- /** Default mechanical behaviour. A run may override it. */
73
- disposition?: VirtualUserDisposition
74
- /** Overrides for that disposition's dials. */
75
- tuning?: VirtualUserTuning
76
- /** Fixture paths this person may upload, relative to the project root. */
77
- fixtures?: string[]
78
- /** Their login. `{}` — email and password — is the normal case. */
79
- account?: CorePersonaAccount
80
- /**
81
- * Further logins belonging to the same human, keyed by name.
82
- *
83
- * Rare, and shaped that way on purpose. All of them share the persona's one
84
- * computed address: better-auth's `allowDifferentEmails` defaults to false,
85
- * so distinct addresses would be refused linking by the library under test.
86
- */
87
- linkedAccounts?: Record<string, CorePersonaAccount>
88
- /**
89
- * The environments this person may run against, by config key.
90
- *
91
- * Omitted means every environment **except** the ones flagged
92
- * `production: true`. Production is opt-in for everybody, so nothing reaches
93
- * it by being forgotten — and naming one requires
94
- * `disposition: 'accountable'`, which the inspector enforces and sign-in
95
- * re-checks.
96
- */
97
- environments?: string[]
98
- /**
99
- * False for a person who is only ever acted *upon* — the account an admin
100
- * bans, the colleague a document is shared with. Declared and seeded, never
101
- * run. Defaults to true.
102
- *
103
- * An assertion, not something inferred from the absence of a disposition:
104
- * `target` *must not* run, because a run signing in as her would race the
105
- * scenario banning her. "Nobody has given this persona a disposition yet" is
106
- * a different state, and collapsing the two turns a deliberate constraint
107
- * into a flaky suite.
108
- */
109
- runnable?: boolean
110
- /**
111
- * The app this person signs into, when the product is more than one frontend.
112
- *
113
- * A person uses one of them — staff their app, customers theirs — and that is
114
- * what decides where a browser step navigates: `/dashboard` is a different
115
- * page in each, so the actor settles which one without the scenario saying.
116
- * The runner takes the base url per app (`--app-url <app>=<url>`, or
117
- * `appUrls` on the environment) and each actor browses against its own.
118
- *
119
- * Omitted is the normal case: one app, one url, nothing to say.
120
- */
121
- app?: string
122
- }
123
-
124
- /** Personas to declare, keyed by id. */
125
- export type CorePersonas = Record<string, CorePersona>
126
-
127
- export type PersonaAccountMeta = {
128
- provider?: string
129
- }
130
-
131
- export type PersonaMeta = {
132
- /** The key it was declared under. */
133
- id: string
134
- name: string
135
- jobTitle?: string
136
- description?: string
137
- avatarUrl?: string
138
- roles: string[]
139
- personality?: string
140
- goals: string[]
141
- tags: string[]
142
- disposition?: VirtualUserDisposition
143
- tuning?: VirtualUserTuning
144
- fixtures?: string[]
145
- account?: PersonaAccountMeta
146
- linkedAccounts?: Record<string, PersonaAccountMeta>
147
- /** Absent means "everywhere but production", which is resolved, not stored. */
148
- environments?: string[]
149
- runnable: boolean
150
- /** The app this person signs into; picks their base url on a browser run. */
151
- app?: string
152
- sourceFile?: string
153
- }
154
-
155
- export type PersonaDefinitions = PersonaMeta[]
156
- export type PersonasMeta = Record<string, PersonaMeta>
@@ -1,137 +0,0 @@
1
- import type {
2
- PersonaDefinitions,
3
- PersonaMeta,
4
- PersonasMeta,
5
- } from './persona.types.js'
6
-
7
- /**
8
- * Whether a persona can actually be driven by a virtual user.
9
- *
10
- * A provider login cannot: driving Google's or GitHub's consent screen needs a
11
- * human, so the persona is seedable and assertable but not runnable. Derived
12
- * rather than asked for, because it is a consequence of the account rather than
13
- * a separate decision — and a flag someone must remember to set is a flag that
14
- * ships wrong.
15
- *
16
- * An explicit `runnable: false` still wins: it marks the person who is only
17
- * ever acted *upon*, which no account shape reveals.
18
- */
19
- export const isRunnablePersona = (persona: {
20
- runnable?: boolean
21
- account?: { provider?: string }
22
- }): boolean => {
23
- if (persona.runnable === false) {
24
- return false
25
- }
26
- return persona.account?.provider === undefined
27
- }
28
-
29
- /**
30
- * Validates declared personas and keys them by id.
31
- *
32
- * Definitions sharing an id must be identical; a conflicting redeclaration is a
33
- * hard error naming both source files, on the same terms as scopes and roles.
34
- */
35
- export function validateAndBuildPersonasMeta(
36
- definitions: PersonaDefinitions
37
- ): PersonasMeta {
38
- const meta: PersonasMeta = {}
39
-
40
- for (const persona of definitions) {
41
- if (!persona.id) {
42
- throw new Error('A persona is declared with an empty id.')
43
- }
44
- if (!persona.name) {
45
- throw new Error(
46
- `Persona '${persona.id}' has no name. A persona is a person; give them one.`
47
- )
48
- }
49
-
50
- const existing = meta[persona.id]
51
- if (existing) {
52
- const same =
53
- JSON.stringify({ ...existing, sourceFile: undefined }) ===
54
- JSON.stringify({ ...persona, sourceFile: undefined })
55
- if (!same) {
56
- throw new Error(
57
- `Persona '${persona.id}' is declared twice with different content.\n` +
58
- ` First declaration: ${existing.sourceFile ?? 'unknown'}\n` +
59
- ` Second declaration: ${persona.sourceFile ?? 'unknown'}`
60
- )
61
- }
62
- continue
63
- }
64
-
65
- meta[persona.id] = persona
66
- }
67
-
68
- return meta
69
- }
70
-
71
- /** What a run compares against the store before its first step. */
72
- export interface RoleVerification {
73
- persona: string
74
- expected: string[]
75
- actual: string[]
76
- missing: string[]
77
- extra: string[]
78
- ok: boolean
79
- }
80
-
81
- /**
82
- * Compares a persona's declared roles against what the stage actually granted.
83
- *
84
- * Run at sign-in, before the first step. The declaration is authoritative —
85
- * the generated seed applies it — but pikku cannot guarantee the seed ran on a
86
- * stage it did not deploy, and virtual users are meant to run against staging
87
- * and production, so that case is the normal one.
88
- *
89
- * Both directions matter, for opposite reasons. An under-granted persona
90
- * reports authorization bugs that are really seed drift. An over-granted one
91
- * silently stops testing the boundary it was written to test — nothing fails,
92
- * the findings just quietly stop being about anything.
93
- */
94
- export const verifyPersonaRoles = (
95
- persona: string,
96
- expected: readonly string[],
97
- actual: readonly string[]
98
- ): RoleVerification => {
99
- const expectedSet = new Set(expected)
100
- const actualSet = new Set(actual)
101
- const missing = [...expectedSet].filter((r) => !actualSet.has(r)).sort()
102
- const extra = [...actualSet].filter((r) => !expectedSet.has(r)).sort()
103
- return {
104
- persona,
105
- expected: [...expectedSet].sort(),
106
- actual: [...actualSet].sort(),
107
- missing,
108
- extra,
109
- ok: missing.length === 0 && extra.length === 0,
110
- }
111
- }
112
-
113
- /** The message a run stops with, or `null` when the roles line up. */
114
- export const roleMismatchMessage = (
115
- verification: RoleVerification
116
- ): string | null => {
117
- if (verification.ok) {
118
- return null
119
- }
120
- const parts: string[] = []
121
- if (verification.missing.length) {
122
- parts.push(`missing ${verification.missing.join(', ')}`)
123
- }
124
- if (verification.extra.length) {
125
- parts.push(`unexpectedly holds ${verification.extra.join(', ')}`)
126
- }
127
- return (
128
- `Persona '${verification.persona}' ${parts.join(' and ')}. ` +
129
- `Declared: ${verification.expected.join(', ') || 'none'}. ` +
130
- `On the stage: ${verification.actual.join(', ') || 'none'}. ` +
131
- `Refusing to run — findings from a persona whose roles have drifted are about the seed, not the product.`
132
- )
133
- }
134
-
135
- /** Convenience: the meta a run needs, with `runnable` already resolved. */
136
- export const runnablePersonas = (meta: PersonasMeta): PersonaMeta[] =>
137
- Object.values(meta).filter((persona) => persona.runnable)
@@ -1,29 +0,0 @@
1
- export type {
2
- ConfigValidationResult,
3
- CoreQueueWorker,
4
- GroupConcurrencyConfig,
5
- JobGroup,
6
- JobOptions,
7
- PikkuJobConfig,
8
- PikkuWorkerConfig,
9
- PikkuQueue,
10
- QueueJob,
11
- QueueJobStatus,
12
- QueueService,
13
- QueueWorkers,
14
- QueueWorkersMeta,
15
- } from './queue.types.js'
16
-
17
- export {
18
- wireQueueWorker,
19
- runQueueJob,
20
- QueueJobDiscardedError,
21
- QueueJobFailedError,
22
- } from './queue-runner.js'
23
- export type { QueueIdentityBinding } from './queue-identity.js'
24
-
25
- export { SignedQueueService } from './signed-queue-service.js'
26
- export type { QueueConfigMapping } from './validate-worker-config.js'
27
-
28
- export { registerQueueWorkers } from './register-queue-helper.js'
29
- export type { QueueRegistrationCallback } from './register-queue-helper.js'