@pikku/addon-console 0.12.43 → 0.12.45

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 (175) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/dist/.pikku/addon/agent/index.d.ts +1 -1
  3. package/dist/.pikku/addon/agent/index.js +1 -1
  4. package/dist/.pikku/addon/agent/pikku-agent-map.gen.d.ts +1 -1
  5. package/dist/.pikku/addon/agent/pikku-agent-types.gen.d.ts +1 -1
  6. package/dist/.pikku/addon/agent/pikku-model-aliases.gen.js +1 -1
  7. package/dist/.pikku/addon/agent/pikku-scorer-names.gen.d.ts +1 -1
  8. package/dist/.pikku/addon/auth/auth.types.d.ts +1 -1
  9. package/dist/.pikku/addon/auth/auth.types.js +1 -1
  10. package/dist/.pikku/addon/auth/index.d.ts +1 -1
  11. package/dist/.pikku/addon/auth/index.js +1 -1
  12. package/dist/.pikku/addon/auth/pikku-auth-types.gen.d.ts +9 -2
  13. package/dist/.pikku/addon/auth/pikku-auth-types.gen.d.ts.map +1 -1
  14. package/dist/.pikku/addon/auth/pikku-auth-types.gen.js +1 -1
  15. package/dist/.pikku/addon/auth/pikku-auth-types.gen.js.map +1 -1
  16. package/dist/.pikku/addon/channel/index.d.ts +1 -1
  17. package/dist/.pikku/addon/channel/index.js +1 -1
  18. package/dist/.pikku/addon/channel/pikku-channel-types.gen.d.ts +1 -1
  19. package/dist/.pikku/addon/channel/pikku-channel-types.gen.js +1 -1
  20. package/dist/.pikku/addon/error/index.d.ts +1 -1
  21. package/dist/.pikku/addon/error/index.js +1 -1
  22. package/dist/.pikku/addon/error/pikku-error-types.gen.d.ts +1 -1
  23. package/dist/.pikku/addon/error/pikku-error-types.gen.js +1 -1
  24. package/dist/.pikku/addon/function/index.d.ts +1 -1
  25. package/dist/.pikku/addon/function/index.js +1 -1
  26. package/dist/.pikku/addon/function/pikku-function-types.gen.d.ts +12 -2
  27. package/dist/.pikku/addon/function/pikku-function-types.gen.d.ts.map +1 -1
  28. package/dist/.pikku/addon/function/pikku-function-types.gen.js +1 -1
  29. package/dist/.pikku/addon/function/pikku-function-types.gen.js.map +1 -1
  30. package/dist/.pikku/addon/function/pikku-functions-meta-verbose.gen.json +139 -11
  31. package/dist/.pikku/addon/function/pikku-functions-meta.gen.js +1 -1
  32. package/dist/.pikku/addon/function/pikku-functions-meta.gen.json +104 -3
  33. package/dist/.pikku/addon/function/pikku-functions.gen.js +7 -1
  34. package/dist/.pikku/addon/function/pikku-functions.gen.js.map +1 -1
  35. package/dist/.pikku/addon/http/index.d.ts +1 -1
  36. package/dist/.pikku/addon/http/index.js +1 -1
  37. package/dist/.pikku/addon/http/pikku-http-types.gen.d.ts +1 -1
  38. package/dist/.pikku/addon/http/pikku-http-types.gen.js +1 -1
  39. package/dist/.pikku/addon/mcp/index.d.ts +1 -1
  40. package/dist/.pikku/addon/mcp/index.js +1 -1
  41. package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.d.ts +1 -1
  42. package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.js +1 -1
  43. package/dist/.pikku/addon/middleware/index.d.ts +1 -1
  44. package/dist/.pikku/addon/middleware/index.js +1 -1
  45. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.d.ts +10 -3
  46. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.d.ts.map +1 -1
  47. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.js +1 -1
  48. package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.js.map +1 -1
  49. package/dist/.pikku/addon/permissions/pikku-permissions.gen.d.ts +5 -0
  50. package/dist/.pikku/addon/permissions/pikku-permissions.gen.d.ts.map +1 -0
  51. package/dist/.pikku/addon/permissions/pikku-permissions.gen.js +5 -0
  52. package/dist/.pikku/addon/permissions/pikku-permissions.gen.js.map +1 -0
  53. package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.d.ts +1 -1
  54. package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.js +1 -1
  55. package/dist/.pikku/addon/pikku-bootstrap.gen.d.ts +2 -1
  56. package/dist/.pikku/addon/pikku-bootstrap.gen.d.ts.map +1 -1
  57. package/dist/.pikku/addon/pikku-bootstrap.gen.js +2 -1
  58. package/dist/.pikku/addon/pikku-bootstrap.gen.js.map +1 -1
  59. package/dist/.pikku/addon/pikku-package.gen.js +1 -1
  60. package/dist/.pikku/addon/pikku-services.gen.d.ts +5 -4
  61. package/dist/.pikku/addon/pikku-services.gen.d.ts.map +1 -1
  62. package/dist/.pikku/addon/pikku-services.gen.js +3 -2
  63. package/dist/.pikku/addon/pikku-services.gen.js.map +1 -1
  64. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.gen.d.ts +10 -1
  65. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +10 -1
  66. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.remote.gen.d.ts +7 -1
  67. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  68. package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.json +3 -0
  69. package/dist/.pikku/addon/scenarios/index.d.ts +1 -1
  70. package/dist/.pikku/addon/scenarios/index.js +1 -1
  71. package/dist/.pikku/addon/scenarios/pikku-personas.gen.js +1 -1
  72. package/dist/.pikku/addon/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
  73. package/dist/.pikku/addon/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
  74. package/dist/.pikku/addon/scenarios/pikku-scenario-types.gen.d.ts +1 -1
  75. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
  76. package/dist/.pikku/addon/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
  77. package/dist/.pikku/addon/scenarios/schemas/register.gen.d.ts +1 -1
  78. package/dist/.pikku/addon/scenarios/schemas/register.gen.js +1 -1
  79. package/dist/.pikku/addon/schemas/register.gen.js +13 -1
  80. package/dist/.pikku/addon/schemas/register.gen.js.map +1 -1
  81. package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunStepsInput.schema.json +1 -0
  82. package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunStepsOutput.schema.json +1 -0
  83. package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunsInput.schema.json +1 -0
  84. package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunsOutput.schema.json +1 -0
  85. package/dist/.pikku/addon/schemas/schemas/StartVirtualUserRunInput.schema.json +1 -0
  86. package/dist/.pikku/addon/schemas/schemas/StartVirtualUserRunOutput.schema.json +1 -0
  87. package/dist/.pikku/addon/scopes/index.d.ts +1 -1
  88. package/dist/.pikku/addon/scopes/index.js +1 -1
  89. package/dist/.pikku/addon/scopes/pikku-personas.gen.js +1 -1
  90. package/dist/.pikku/addon/scopes/pikku-roles.gen.d.ts +1 -1
  91. package/dist/.pikku/addon/scopes/pikku-scope-types.gen.d.ts +1 -1
  92. package/dist/.pikku/addon/scopes/pikku-scope-types.gen.js +1 -1
  93. package/dist/.pikku/addon/scopes/pikku-scopes-meta.gen.json +11 -0
  94. package/dist/.pikku/addon/scopes/pikku-scopes.gen.d.ts +2 -2
  95. package/dist/.pikku/addon/scopes/pikku-scopes.gen.d.ts.map +1 -1
  96. package/dist/.pikku/addon/scopes/pikku-scopes.gen.js.map +1 -1
  97. package/dist/.pikku/addon/secrets/index.d.ts +1 -1
  98. package/dist/.pikku/addon/secrets/index.js +1 -1
  99. package/dist/.pikku/addon/secrets/pikku-secret-types.gen.d.ts +1 -1
  100. package/dist/.pikku/addon/secrets/pikku-secret-types.gen.js +1 -1
  101. package/dist/.pikku/addon/secrets/pikku-secrets.gen.d.ts +1 -1
  102. package/dist/.pikku/addon/secrets/pikku-secrets.gen.js +1 -1
  103. package/dist/.pikku/addon/services/pikku-meta-service.gen.d.ts +1 -1
  104. package/dist/.pikku/addon/services/pikku-meta-service.gen.js +1 -1
  105. package/dist/.pikku/addon/setup/index.d.ts +1 -1
  106. package/dist/.pikku/addon/setup/index.js +1 -1
  107. package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.d.ts +1 -1
  108. package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.js +1 -1
  109. package/dist/.pikku/addon/setup/pikku-setup-types.gen.d.ts +1 -1
  110. package/dist/.pikku/addon/setup/pikku-setup-types.gen.js +1 -1
  111. package/dist/.pikku/addon/trigger/index.d.ts +1 -1
  112. package/dist/.pikku/addon/trigger/index.js +1 -1
  113. package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.d.ts +1 -1
  114. package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.js +1 -1
  115. package/dist/.pikku/addon/variables/index.d.ts +1 -1
  116. package/dist/.pikku/addon/variables/index.js +1 -1
  117. package/dist/.pikku/addon/variables/pikku-variable-types.gen.d.ts +1 -1
  118. package/dist/.pikku/addon/variables/pikku-variable-types.gen.js +1 -1
  119. package/dist/.pikku/addon/variables/pikku-variables.gen.d.ts +1 -1
  120. package/dist/.pikku/addon/variables/pikku-variables.gen.js +1 -1
  121. package/dist/.pikku/addon/workflow/index.d.ts +1 -1
  122. package/dist/.pikku/addon/workflow/index.js +1 -1
  123. package/dist/.pikku/addon/workflow/pikku-scenario-step-map.gen.d.ts +1 -1
  124. package/dist/.pikku/addon/workflow/pikku-workflow-map.gen.d.ts +1 -1
  125. package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.d.ts +1 -1
  126. package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.js +1 -1
  127. package/dist/.pikku/addon/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  128. package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  129. package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.js +1 -1
  130. package/dist/src/functions/delete-agent-thread.function.d.ts.map +1 -1
  131. package/dist/src/functions/delete-agent-thread.function.js +3 -1
  132. package/dist/src/functions/delete-agent-thread.function.js.map +1 -1
  133. package/dist/src/functions/delete-agent-thread.function.test.d.ts +2 -0
  134. package/dist/src/functions/delete-agent-thread.function.test.d.ts.map +1 -0
  135. package/dist/src/functions/delete-agent-thread.function.test.js +8 -0
  136. package/dist/src/functions/delete-agent-thread.function.test.js.map +1 -0
  137. package/dist/src/functions/get-agent-thread-messages.function.d.ts.map +1 -1
  138. package/dist/src/functions/get-agent-thread-messages.function.js +3 -1
  139. package/dist/src/functions/get-agent-thread-messages.function.js.map +1 -1
  140. package/dist/src/functions/get-agent-thread-messages.function.test.d.ts +2 -0
  141. package/dist/src/functions/get-agent-thread-messages.function.test.d.ts.map +1 -0
  142. package/dist/src/functions/get-agent-thread-messages.function.test.js +8 -0
  143. package/dist/src/functions/get-agent-thread-messages.function.test.js.map +1 -0
  144. package/dist/src/functions/get-virtual-user-run-steps.function.d.ts +14 -0
  145. package/dist/src/functions/get-virtual-user-run-steps.function.d.ts.map +1 -0
  146. package/dist/src/functions/get-virtual-user-run-steps.function.js +31 -0
  147. package/dist/src/functions/get-virtual-user-run-steps.function.js.map +1 -0
  148. package/dist/src/functions/get-virtual-user-runs.function.d.ts +14 -0
  149. package/dist/src/functions/get-virtual-user-runs.function.d.ts.map +1 -0
  150. package/dist/src/functions/get-virtual-user-runs.function.js +39 -0
  151. package/dist/src/functions/get-virtual-user-runs.function.js.map +1 -0
  152. package/dist/src/functions/is-thread-owner.permission.d.ts +13 -0
  153. package/dist/src/functions/is-thread-owner.permission.d.ts.map +1 -0
  154. package/dist/src/functions/is-thread-owner.permission.js +23 -0
  155. package/dist/src/functions/is-thread-owner.permission.js.map +1 -0
  156. package/dist/src/functions/is-thread-owner.permission.test.d.ts +2 -0
  157. package/dist/src/functions/is-thread-owner.permission.test.d.ts.map +1 -0
  158. package/dist/src/functions/is-thread-owner.permission.test.js +25 -0
  159. package/dist/src/functions/is-thread-owner.permission.test.js.map +1 -0
  160. package/dist/src/functions/render-email-preview.function.d.ts.map +1 -1
  161. package/dist/src/functions/render-email-preview.function.js +6 -17
  162. package/dist/src/functions/render-email-preview.function.js.map +1 -1
  163. package/dist/src/functions/render-email-template.utils.d.ts +8 -3
  164. package/dist/src/functions/render-email-template.utils.d.ts.map +1 -1
  165. package/dist/src/functions/render-email-template.utils.js +71 -17
  166. package/dist/src/functions/render-email-template.utils.js.map +1 -1
  167. package/dist/src/functions/render-email-template.utils.test.js +56 -23
  168. package/dist/src/functions/render-email-template.utils.test.js.map +1 -1
  169. package/dist/src/functions/start-virtual-user-run.function.d.ts +33 -0
  170. package/dist/src/functions/start-virtual-user-run.function.d.ts.map +1 -0
  171. package/dist/src/functions/start-virtual-user-run.function.js +31 -0
  172. package/dist/src/functions/start-virtual-user-run.function.js.map +1 -0
  173. package/dist/src/scopes.js +11 -0
  174. package/dist/src/scopes.js.map +1 -1
  175. package/package.json +4 -4
@@ -1,3 +1,26 @@
1
+ const HTML_ESCAPES = {
2
+ '&': '&',
3
+ '<': '&lt;',
4
+ '>': '&gt;',
5
+ '"': '&quot;',
6
+ "'": '&#39;',
7
+ };
8
+ /**
9
+ * Matches the raw `{{{ value }}}` form before the escaped `{{ value }}` form, so
10
+ * the opt-in escape hatch is never mistaken for a normal substitution.
11
+ */
12
+ const TEMPLATE_TOKEN = /\{\{\{\s*([^{}]+?)\s*\}\}\}|\{\{\s*([^}]+?)\s*\}\}/g;
13
+ const PARTIAL_TOKEN = /\{\{\s*>\s*([a-zA-Z0-9-_/.]+)\s*\}\}/g;
14
+ const MAX_TEMPLATE_DEPTH = 5;
15
+ /**
16
+ * theme.json and the locale files ship with the templates, so they are treated
17
+ * as template-author input: expanded before caller data and allowed to contain
18
+ * their own placeholders. Everything else is caller-supplied.
19
+ */
20
+ const TRUSTED_ROOTS = ['theme', 't'];
21
+ export function escapeHtml(value) {
22
+ return value.replace(/[&<>"']/g, (char) => HTML_ESCAPES[char] ?? char);
23
+ }
1
24
  export function getNestedValue(source, path) {
2
25
  const segments = path.split('.');
3
26
  let current = source;
@@ -11,30 +34,61 @@ export function getNestedValue(source, path) {
11
34
  ? String(current)
12
35
  : '';
13
36
  }
14
- export function applyTemplate(source, context) {
15
- return source.replace(/\{\{\s*([^}]+?)\s*\}\}/g, (_match, rawKey) => {
16
- const key = String(rawKey).trim();
17
- if (key === 'content') {
18
- return typeof context.content === 'string' ? context.content : '';
19
- }
20
- if (key.startsWith('>')) {
21
- return '';
22
- }
23
- return getNestedValue(context, key);
37
+ function isTrustedKey(key) {
38
+ return TRUSTED_ROOTS.includes(String(key.split('.')[0]));
39
+ }
40
+ function readToken(rawTriple, rawDouble) {
41
+ const raw = typeof rawTriple === 'string';
42
+ return { raw, key: String(raw ? rawTriple : rawDouble).trim() };
43
+ }
44
+ export function expandPartials(source, partials, depth = 0) {
45
+ if (depth >= MAX_TEMPLATE_DEPTH)
46
+ return source;
47
+ let found = false;
48
+ const expanded = source.replace(PARTIAL_TOKEN, (_match, partialName) => {
49
+ found = true;
50
+ const partial = partials[String(partialName).trim()];
51
+ return typeof partial === 'string' ? partial : '';
24
52
  });
53
+ return found ? expandPartials(expanded, partials, depth + 1) : expanded;
25
54
  }
26
- export function renderTemplate(source, context) {
55
+ function expandTrusted(source, context, escape) {
27
56
  let rendered = source;
28
- for (let i = 0; i < 5; i += 1) {
29
- const next = applyTemplate(rendered, context);
30
- if (next === rendered)
57
+ for (let i = 0; i < MAX_TEMPLATE_DEPTH; i += 1) {
58
+ let found = false;
59
+ const next = rendered.replace(TEMPLATE_TOKEN, (match, rawTriple, rawDouble) => {
60
+ const { raw, key } = readToken(rawTriple, rawDouble);
61
+ if (!isTrustedKey(key))
62
+ return match;
63
+ found = true;
64
+ const value = getNestedValue(context, key);
65
+ return raw || !escape ? value : escapeHtml(value);
66
+ });
67
+ if (!found || next === rendered)
31
68
  break;
32
69
  rendered = next;
33
70
  }
34
71
  return rendered;
35
72
  }
36
- export function renderPartial(name, partials, context) {
37
- const partial = partials[name];
38
- return partial ? renderTemplate(partial, context) : '';
73
+ /**
74
+ * A single substitution pass — the replacement text is never rescanned, so a
75
+ * caller-supplied value can never be reinterpreted as a template.
76
+ */
77
+ export function substitute(source, context, escape) {
78
+ return source.replace(TEMPLATE_TOKEN, (_match, rawTriple, rawDouble) => {
79
+ const { raw, key } = readToken(rawTriple, rawDouble);
80
+ if (key === 'content') {
81
+ return typeof context.content === 'string' ? context.content : '';
82
+ }
83
+ if (key.startsWith('>')) {
84
+ return '';
85
+ }
86
+ const value = getNestedValue(context, key);
87
+ return raw || !escape ? value : escapeHtml(value);
88
+ });
89
+ }
90
+ export function renderTemplate(source, context, partials, escape) {
91
+ const composed = expandTrusted(expandPartials(source, partials), context, escape);
92
+ return substitute(composed, context, escape);
39
93
  }
40
94
  //# sourceMappingURL=render-email-template.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-email-template.utils.js","sourceRoot":"","sources":["../../../src/functions/render-email-template.utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC5B,MAA+B,EAC/B,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,OAAO,GAAY,MAAM,CAAA;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;YACrE,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC/D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjB,CAAC,CAAC,EAAE,CAAA;AACR,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,OAAgC;IAEhC,OAAO,MAAM,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,OAAgC;IAEhC,IAAI,QAAQ,GAAG,MAAM,CAAA;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC7C,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAK;QAC5B,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,QAAgC,EAChC,OAAgC;IAEhC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACxD,CAAC"}
1
+ {"version":3,"file":"render-email-template.utils.js","sourceRoot":"","sources":["../../../src/functions/render-email-template.utils.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAA2B;IAC3C,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;CACb,CAAA;AAED;;;GAGG;AACH,MAAM,cAAc,GAAG,qDAAqD,CAAA;AAE5E,MAAM,aAAa,GAAG,uCAAuC,CAAA;AAE7D,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAE5B;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAEpC,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAA+B,EAC/B,IAAY;IAEZ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,OAAO,GAAY,MAAM,CAAA;IAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;YACrE,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;QAC/D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjB,CAAC,CAAC,EAAE,CAAA;AACR,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,SAAS,CAAC,SAAkB,EAAE,SAAkB;IACvD,MAAM,GAAG,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAA;IACzC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,QAAgC,EAChC,KAAK,GAAG,CAAC;IAET,IAAI,KAAK,IAAI,kBAAkB;QAAE,OAAO,MAAM,CAAA;IAC9C,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QACrE,KAAK,GAAG,IAAI,CAAA;QACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QACpD,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;IACnD,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AACzE,CAAC;AAED,SAAS,aAAa,CACpB,MAAc,EACd,OAAgC,EAChC,MAAe;IAEf,IAAI,QAAQ,GAAG,MAAM,CAAA;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,GAAG,KAAK,CAAA;QACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAC3B,cAAc,EACd,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YACpD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAA;YACpC,KAAK,GAAG,IAAI,CAAA;YACZ,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YAC1C,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACnD,CAAC,CACF,CAAA;QACD,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,QAAQ;YAAE,MAAK;QACtC,QAAQ,GAAG,IAAI,CAAA;IACjB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,OAAgC,EAChC,MAAe;IAEf,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE;QACrE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACpD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QAC1C,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,OAAgC,EAChC,QAAgC,EAChC,MAAe;IAEf,MAAM,QAAQ,GAAG,aAAa,CAC5B,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,EAChC,OAAO,EACP,MAAM,CACP,CAAA;IACD,OAAO,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { describe, test } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
- import { getNestedValue, applyTemplate, renderTemplate, renderPartial, } from './render-email-template.utils.js';
3
+ import { escapeHtml, expandPartials, getNestedValue, renderTemplate, substitute, } from './render-email-template.utils.js';
4
4
  describe('getNestedValue', () => {
5
5
  test('returns top-level string value', () => {
6
6
  assert.equal(getNestedValue({ name: 'Alice' }, 'name'), 'Alice');
@@ -21,45 +21,78 @@ describe('getNestedValue', () => {
21
21
  assert.equal(getNestedValue({ count: 42 }, 'count'), '42');
22
22
  });
23
23
  });
24
- describe('applyTemplate', () => {
24
+ describe('escapeHtml', () => {
25
+ test('escapes the five html-significant characters', () => {
26
+ assert.equal(escapeHtml(`<a href="x" title='y'>&</a>`), '&lt;a href=&quot;x&quot; title=&#39;y&#39;&gt;&amp;&lt;/a&gt;');
27
+ });
28
+ });
29
+ describe('substitute', () => {
25
30
  test('replaces simple placeholder', () => {
26
- assert.equal(applyTemplate('Hello {{ name }}!', { name: 'Bob' }), 'Hello Bob!');
31
+ assert.equal(substitute('Hello {{ name }}!', { name: 'Bob' }, false), 'Hello Bob!');
32
+ });
33
+ test('escapes the value when rendering html', () => {
34
+ assert.equal(substitute('<p>{{ name }}</p>', { name: '<b>Bob</b>' }, true), '<p>&lt;b&gt;Bob&lt;/b&gt;</p>');
35
+ });
36
+ test('leaves the value raw when rendering plain text', () => {
37
+ assert.equal(substitute('{{ name }}', { name: 'Ada & Bob' }, false), 'Ada & Bob');
27
38
  });
28
- test('replaces {{content}} with context.content string', () => {
29
- assert.equal(applyTemplate('Body: {{ content }}', { content: '<p>Hi</p>' }), 'Body: <p>Hi</p>');
39
+ test('renders the triple-brace form raw even in html', () => {
40
+ assert.equal(substitute('<p>{{{ name }}}</p>', { name: '<b>Bob</b>' }, true), '<p><b>Bob</b></p>');
41
+ });
42
+ test('replaces {{content}} with context.content string, unescaped', () => {
43
+ assert.equal(substitute('Body: {{ content }}', { content: '<p>Hi</p>' }, true), 'Body: <p>Hi</p>');
30
44
  });
31
45
  test('replaces {{content}} with empty string when not a string', () => {
32
- assert.equal(applyTemplate('{{ content }}', { content: 123 }), '');
46
+ assert.equal(substitute('{{ content }}', { content: 123 }, true), '');
33
47
  });
34
48
  test('strips partial tags (> prefix)', () => {
35
- assert.equal(applyTemplate('{{ > header }}', {}), '');
49
+ assert.equal(substitute('{{ > header }}', {}, true), '');
36
50
  });
37
51
  test('returns empty string for missing placeholder', () => {
38
- assert.equal(applyTemplate('{{ missing }}', {}), '');
52
+ assert.equal(substitute('{{ missing }}', {}, true), '');
39
53
  });
40
54
  test('resolves dot-path placeholders', () => {
41
- assert.equal(applyTemplate('{{ user.name }}', { user: { name: 'Carol' } }), 'Carol');
55
+ assert.equal(substitute('{{ user.name }}', { user: { name: 'Carol' } }, true), 'Carol');
56
+ });
57
+ test('does not rescan the substituted value', () => {
58
+ assert.equal(substitute('{{ a }}', { a: '{{ b }}', b: 'leaked' }, false), '{{ b }}');
42
59
  });
43
60
  });
44
- describe('renderTemplate', () => {
45
- test('resolves single pass', () => {
46
- assert.equal(renderTemplate('Hi {{ name }}', { name: 'Dave' }), 'Hi Dave');
61
+ describe('expandPartials', () => {
62
+ test('inlines a known partial', () => {
63
+ assert.equal(expandPartials('{{> header }}', { header: '<h1>{{ title }}</h1>' }), '<h1>{{ title }}</h1>');
47
64
  });
48
- test('resolves transitive placeholders up to 5 passes', () => {
49
- const ctx = { greeting: 'Hi {{ name }}', name: 'Eve' };
50
- assert.equal(renderTemplate('{{ greeting }}', ctx), 'Hi Eve');
65
+ test('inlines nested partials', () => {
66
+ assert.equal(expandPartials('{{> a }}', { a: 'A{{> b }}', b: 'B' }), 'AB');
51
67
  });
52
- test('stops early when no more changes', () => {
53
- assert.equal(renderTemplate('static', {}), 'static');
68
+ test('drops an unknown partial', () => {
69
+ assert.equal(expandPartials('x{{> missing }}y', {}), 'xy');
54
70
  });
55
71
  });
56
- describe('renderPartial', () => {
57
- test('renders a known partial with context', () => {
58
- const partials = { header: '<h1>{{ title }}</h1>' };
59
- assert.equal(renderPartial('header', partials, { title: 'Welcome' }), '<h1>Welcome</h1>');
72
+ describe('renderTemplate', () => {
73
+ test('resolves a caller variable in one pass', () => {
74
+ assert.equal(renderTemplate('Hi {{ name }}', { name: 'Dave' }, {}, false), 'Hi Dave');
75
+ });
76
+ test('expands a locale string that itself references a caller variable', () => {
77
+ const ctx = { t: { greeting: 'Hi {{ name }}' }, name: 'Eve' };
78
+ assert.equal(renderTemplate('{{ t.greeting }}', ctx, {}, false), 'Hi Eve');
79
+ });
80
+ test('never expands a caller value as a template', () => {
81
+ const ctx = { t: { note: 'secret' }, name: '{{ t.note }}' };
82
+ assert.equal(renderTemplate('{{ name }}', ctx, {}, false), '{{ t.note }}');
83
+ });
84
+ test('escapes a theme value landing in an attribute', () => {
85
+ const ctx = { theme: { fonts: { body: '"Segoe UI", sans-serif' } } };
86
+ assert.equal(renderTemplate('<p style="font-family:{{theme.fonts.body}};">', ctx, {}, true), '<p style="font-family:&quot;Segoe UI&quot;, sans-serif;">');
60
87
  });
61
- test('returns empty string for unknown partial', () => {
62
- assert.equal(renderPartial('missing', {}, {}), '');
88
+ test('renders partials before substitution', () => {
89
+ assert.equal(renderTemplate('{{> header }}', { title: 'Welcome' }, { header: '<h1>{{ title }}</h1>' }, true), '<h1>Welcome</h1>');
90
+ });
91
+ test('a caller value cannot forge a partial include', () => {
92
+ assert.equal(renderTemplate('{{ name }}', { name: '{{> header }}' }, { header: 'LEAKED' }, false), '{{> header }}');
93
+ });
94
+ test('stops early when no more changes', () => {
95
+ assert.equal(renderTemplate('static', {}, {}, true), 'static');
63
96
  });
64
97
  });
65
98
  //# sourceMappingURL=render-email-template.utils.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-email-template.utils.test.js","sourceRoot":"","sources":["../../../src/functions/render-email-template.utils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-email-template.utils.test.js","sourceRoot":"","sources":["../../../src/functions/render-email-template.utils.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Turns a persona loose now, rather than waiting for its schedule.
3
+ *
4
+ * Dispatches the project's own scaffolded `runVirtualUser` rather than starting
5
+ * a run itself: the persona lookup, the acted-upon check and the production
6
+ * guard live there, and a second copy of them in the console would eventually
7
+ * disagree with the first. The cost is that this needs `scaffold.virtualUser`
8
+ * on, while reading runs does not — so the absence is reported as the missing
9
+ * scaffold it is, not as a broken button.
10
+ *
11
+ * SECURITY: its own scope, separate from reading. A run acts as a real user
12
+ * against the real API, and an adversarial one is trying to break things.
13
+ */
14
+ export declare const startVirtualUserRun: import("#pikku/addon/function").PikkuFunctionConfig<{
15
+ persona: string;
16
+ disposition?: string;
17
+ goals?: string[];
18
+ }, {
19
+ runId: string;
20
+ }, "rpc" | "session", import("#pikku/addon/function").PikkuFunction<{
21
+ persona: string;
22
+ disposition?: string;
23
+ goals?: string[];
24
+ }, {
25
+ runId: string;
26
+ }, "rpc" | "session", import("#pikku/addon/function").WiredServices> | import("#pikku/addon/function").PikkuFunctionSessionless<{
27
+ persona: string;
28
+ disposition?: string;
29
+ goals?: string[];
30
+ }, {
31
+ runId: string;
32
+ }, "rpc" | "session", import("#pikku/addon/function").WiredServices, unknown>, undefined, undefined>;
33
+ //# sourceMappingURL=start-virtual-user-run.function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-virtual-user-run.function.d.ts","sourceRoot":"","sources":["../../../src/functions/start-virtual-user-run.function.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB;aACnB,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;WAChD,MAAM;;aADJ,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;WAChD,MAAM;;aADJ,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;WAChD,MAAM;oGAmBf,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { pikkuFunc } from '#pikku/addon/function';
2
+ /**
3
+ * Turns a persona loose now, rather than waiting for its schedule.
4
+ *
5
+ * Dispatches the project's own scaffolded `runVirtualUser` rather than starting
6
+ * a run itself: the persona lookup, the acted-upon check and the production
7
+ * guard live there, and a second copy of them in the console would eventually
8
+ * disagree with the first. The cost is that this needs `scaffold.virtualUser`
9
+ * on, while reading runs does not — so the absence is reported as the missing
10
+ * scaffold it is, not as a broken button.
11
+ *
12
+ * SECURITY: its own scope, separate from reading. A run acts as a real user
13
+ * against the real API, and an adversarial one is trying to break things.
14
+ */
15
+ export const startVirtualUserRun = pikkuFunc({
16
+ title: 'Start a Virtual User Run',
17
+ description: 'Runs a declared persona against this application now. Returns a run id; the result arrives in the run list.',
18
+ expose: true,
19
+ scopes: ['pikku:console:virtualUsers:run'],
20
+ func: async ({ metaService }, input, { rpc }) => {
21
+ const rpcs = await metaService?.getRpcMeta();
22
+ if (!rpcs?.runVirtualUser) {
23
+ throw new Error('This application has no runVirtualUser function — turn on `scaffold.virtualUser` in pikku.config.json and run `pikku all` to generate it.');
24
+ }
25
+ // `exposed` rather than `invoke`: the name belongs to the host application,
26
+ // not to this addon, so there is no typed map for it here — and going in
27
+ // through the exposed door is what the console is doing anyway.
28
+ return (await rpc.exposed('runVirtualUser', input));
29
+ },
30
+ });
31
+ //# sourceMappingURL=start-virtual-user-run.function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-virtual-user-run.function.js","sourceRoot":"","sources":["../../../src/functions/start-virtual-user-run.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAG1C;IACA,KAAK,EAAE,0BAA0B;IACjC,WAAW,EACT,6GAA6G;IAC/G,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,gCAAgC,CAAC;IAC1C,IAAI,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,UAAU,EAAE,CAAA;QAC5C,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,2IAA2I,CAC5I,CAAA;QACH,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,gEAAgE;QAChE,OAAO,CAAC,MAAM,GAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAsB,CAAA;IAC3E,CAAC;CACF,CAAC,CAAA"}
@@ -96,6 +96,17 @@ defineScope({
96
96
  },
97
97
  },
98
98
  },
99
+ virtualUsers: {
100
+ description: 'Virtual user runs and their transcripts',
101
+ scopes: {
102
+ read: {
103
+ description: 'Read what the virtual users found and every turn they took',
104
+ },
105
+ run: {
106
+ description: 'Turn a persona loose on this application',
107
+ },
108
+ },
109
+ },
99
110
  db: {
100
111
  description: 'The database schema',
101
112
  scopes: {
@@ -1 +1 @@
1
- {"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/scopes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/scopes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/addon-console",
3
- "version": "0.12.43",
3
+ "version": "0.12.45",
4
4
  "description": "Console addon for Pikku — functions powering the Pikku Console UI",
5
5
  "type": "module",
6
6
  "imports": {
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@pikku/better-auth": "^0.12.26",
40
- "@pikku/core": "^0.12.85"
40
+ "@pikku/core": "^0.12.90"
41
41
  },
42
42
  "peerDependenciesMeta": {
43
43
  "@pikku/better-auth": {
@@ -46,8 +46,8 @@
46
46
  },
47
47
  "devDependencies": {
48
48
  "@pikku/better-auth": "^0.12.26",
49
- "@pikku/cli": "^0.12.106",
50
- "@pikku/core": "^0.12.85",
49
+ "@pikku/cli": "^0.12.112",
50
+ "@pikku/core": "^0.12.90",
51
51
  "oauth2-mock-server": "^9.1.0",
52
52
  "typescript": "^6.0.3"
53
53
  },