@ydtb/tk-scope-capture 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/client/pages/CaptureBuilderPage.d.ts +2 -0
  3. package/dist/src/client/pages/CaptureBuilderPage.d.ts.map +1 -0
  4. package/dist/src/client/pages/CaptureBuilderPage.js +308 -0
  5. package/dist/src/client/pages/CaptureBuilderPage.js.map +1 -0
  6. package/dist/src/client/pages/CaptureSubmissionDetailPage.d.ts +2 -0
  7. package/dist/src/client/pages/CaptureSubmissionDetailPage.d.ts.map +1 -0
  8. package/dist/src/client/pages/CaptureSubmissionDetailPage.js +64 -0
  9. package/dist/src/client/pages/CaptureSubmissionDetailPage.js.map +1 -0
  10. package/dist/src/client/pages/CaptureSubmissionsPage.d.ts +2 -0
  11. package/dist/src/client/pages/CaptureSubmissionsPage.d.ts.map +1 -0
  12. package/dist/src/client/pages/CaptureSubmissionsPage.js +22 -0
  13. package/dist/src/client/pages/CaptureSubmissionsPage.js.map +1 -0
  14. package/dist/src/client/pages/PublicFormPage.d.ts +2 -0
  15. package/dist/src/client/pages/PublicFormPage.d.ts.map +1 -0
  16. package/dist/src/client/pages/PublicFormPage.js +62 -0
  17. package/dist/src/client/pages/PublicFormPage.js.map +1 -0
  18. package/dist/src/client/pages/PublicQuizPage.d.ts +2 -0
  19. package/dist/src/client/pages/PublicQuizPage.d.ts.map +1 -0
  20. package/dist/src/client/pages/PublicQuizPage.js +87 -0
  21. package/dist/src/client/pages/PublicQuizPage.js.map +1 -0
  22. package/dist/src/client/pages/QuizBuilderPage.d.ts +2 -0
  23. package/dist/src/client/pages/QuizBuilderPage.d.ts.map +1 -0
  24. package/dist/src/client/pages/QuizBuilderPage.js +118 -0
  25. package/dist/src/client/pages/QuizBuilderPage.js.map +1 -0
  26. package/dist/src/client.d.ts +617 -0
  27. package/dist/src/client.d.ts.map +1 -0
  28. package/dist/src/client.js +39 -0
  29. package/dist/src/client.js.map +1 -0
  30. package/dist/src/index.d.ts +3 -0
  31. package/dist/src/index.d.ts.map +1 -0
  32. package/dist/src/index.js +2 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/server/api/action-adapters.d.ts +93 -0
  35. package/dist/src/server/api/action-adapters.d.ts.map +1 -0
  36. package/dist/src/server/api/action-adapters.js +147 -0
  37. package/dist/src/server/api/action-adapters.js.map +1 -0
  38. package/dist/src/server/api/router.d.ts +621 -0
  39. package/dist/src/server/api/router.d.ts.map +1 -0
  40. package/dist/src/server/api/router.js +903 -0
  41. package/dist/src/server/api/router.js.map +1 -0
  42. package/dist/src/server.d.ts +3 -0
  43. package/dist/src/server.d.ts.map +1 -0
  44. package/dist/src/server.js +15 -0
  45. package/dist/src/server.js.map +1 -0
  46. package/dist/src/shared/conditions.d.ts +5 -0
  47. package/dist/src/shared/conditions.d.ts.map +1 -0
  48. package/dist/src/shared/conditions.js +39 -0
  49. package/dist/src/shared/conditions.js.map +1 -0
  50. package/dist/src/shared/db/schema.d.ts +983 -0
  51. package/dist/src/shared/db/schema.d.ts.map +1 -0
  52. package/dist/src/shared/db/schema.js +113 -0
  53. package/dist/src/shared/db/schema.js.map +1 -0
  54. package/dist/src/shared/field-types.d.ts +7 -0
  55. package/dist/src/shared/field-types.d.ts.map +1 -0
  56. package/dist/src/shared/field-types.js +116 -0
  57. package/dist/src/shared/field-types.js.map +1 -0
  58. package/dist/src/shared/scoring.d.ts +3 -0
  59. package/dist/src/shared/scoring.d.ts.map +1 -0
  60. package/dist/src/shared/scoring.js +47 -0
  61. package/dist/src/shared/scoring.js.map +1 -0
  62. package/dist/src/shared/templates.d.ts +20 -0
  63. package/dist/src/shared/templates.d.ts.map +1 -0
  64. package/dist/src/shared/templates.js +122 -0
  65. package/dist/src/shared/templates.js.map +1 -0
  66. package/dist/src/shared/tool.d.ts +2 -0
  67. package/dist/src/shared/tool.d.ts.map +1 -0
  68. package/dist/src/shared/tool.js +7 -0
  69. package/dist/src/shared/tool.js.map +1 -0
  70. package/dist/src/shared/types.d.ts +251 -0
  71. package/dist/src/shared/types.d.ts.map +1 -0
  72. package/dist/src/shared/types.js +10 -0
  73. package/dist/src/shared/types.js.map +1 -0
  74. package/package.json +84 -0
@@ -0,0 +1,3 @@
1
+ export { capture } from "./shared/tool.ts";
2
+ export type { CaptureBuilderItem, CapturePaletteItem, CaptureSurfaceKind } from "./shared/types.ts";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { capture } from "./shared/tool.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,93 @@
1
+ import "@ydtb/core-layer-resend";
2
+ import { z } from "zod";
3
+ import type { CaptureActionAdapter, CaptureActionRunResult, CaptureAnswerValue, CaptureEmailActionConfig, CaptureFieldDefinition, CaptureQuizOutcomeResult, CaptureWorkflowActionConfig } from "../../shared/types.ts";
4
+ export declare const emailActionConfigSchema: z.ZodObject<{
5
+ enabled: z.ZodDefault<z.ZodBoolean>;
6
+ from: z.ZodOptional<z.ZodString>;
7
+ internalRecipientEmail: z.ZodOptional<z.ZodString>;
8
+ respondentEmailFieldKey: z.ZodOptional<z.ZodString>;
9
+ subjectTemplate: z.ZodDefault<z.ZodString>;
10
+ bodyTemplate: z.ZodDefault<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ export declare const workflowActionConfigSchema: z.ZodObject<{
13
+ enabled: z.ZodDefault<z.ZodBoolean>;
14
+ workflowDefinitionId: z.ZodOptional<z.ZodString>;
15
+ triggerNodeId: z.ZodOptional<z.ZodString>;
16
+ execute: z.ZodDefault<z.ZodBoolean>;
17
+ }, z.core.$strip>;
18
+ export interface CaptureActionExecutionContext {
19
+ scope: string;
20
+ scopeId: string;
21
+ definitionId: string;
22
+ definitionName: string;
23
+ submissionId: string;
24
+ fields: CaptureFieldDefinition[];
25
+ answers: Record<string, CaptureAnswerValue>;
26
+ outcome?: CaptureQuizOutcomeResult;
27
+ }
28
+ export interface EmailMessagePayload {
29
+ from?: string;
30
+ to: string | string[];
31
+ subject: string;
32
+ body: string;
33
+ }
34
+ export type SendCaptureEmail = (message: EmailMessagePayload) => Promise<{
35
+ id: string;
36
+ }>;
37
+ export interface WorkflowRunStartPayload {
38
+ scope: string;
39
+ scopeId: string;
40
+ definitionId: string;
41
+ input: unknown;
42
+ idempotencyKey?: string;
43
+ origin?: {
44
+ kind: "api";
45
+ triggerNodeId: string;
46
+ callerId?: string;
47
+ };
48
+ runTags?: Record<string, string | number | boolean | string[]>;
49
+ runMetadata?: Record<string, unknown>;
50
+ execute?: boolean;
51
+ }
52
+ export type StartWorkflowRun = (input: WorkflowRunStartPayload) => Promise<{
53
+ runId: string;
54
+ duplicate: boolean;
55
+ }>;
56
+ export declare function renderEmailTemplate(template: string, context: CaptureActionExecutionContext): string;
57
+ export declare function buildEmailMessages(args: {
58
+ config: CaptureEmailActionConfig;
59
+ context: CaptureActionExecutionContext;
60
+ }): EmailMessagePayload[];
61
+ export declare function executeEmailAction(args: {
62
+ config: CaptureEmailActionConfig;
63
+ context: CaptureActionExecutionContext;
64
+ sendEmail?: SendCaptureEmail;
65
+ }): Promise<CaptureActionRunResult>;
66
+ export declare function buildWorkflowSubmissionPayload(context: CaptureActionExecutionContext): {
67
+ event: "capture.submission.completed";
68
+ submission: {
69
+ outcome?: CaptureQuizOutcomeResult | undefined;
70
+ id: string;
71
+ definitionId: string;
72
+ definitionName: string;
73
+ scope: string;
74
+ scopeId: string;
75
+ answers: Record<string, CaptureAnswerValue>;
76
+ };
77
+ fields: {
78
+ id: string;
79
+ key: string;
80
+ label: string;
81
+ type: import("../../shared/types.ts").CaptureFieldType;
82
+ required: boolean;
83
+ }[];
84
+ };
85
+ export declare function executeWorkflowAction(args: {
86
+ config: CaptureWorkflowActionConfig;
87
+ context: CaptureActionExecutionContext;
88
+ startWorkflowRun?: StartWorkflowRun;
89
+ idempotencyKeyOverride?: string;
90
+ }): Promise<CaptureActionRunResult>;
91
+ export declare const emailActionAdapter: CaptureActionAdapter<CaptureEmailActionConfig>;
92
+ export declare const workflowActionAdapter: CaptureActionAdapter<CaptureWorkflowActionConfig>;
93
+ //# sourceMappingURL=action-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-adapters.d.ts","sourceRoot":"","sources":["../../../../src/server/api/action-adapters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import { getHooks, getLayer } from "@ydtb/core-server";
2
+ import "@ydtb/core-layer-resend";
3
+ import { z } from "zod";
4
+ export const emailActionConfigSchema = z.object({
5
+ enabled: z.boolean().default(false),
6
+ from: z.string().min(1).optional(),
7
+ internalRecipientEmail: z.string().email().optional(),
8
+ respondentEmailFieldKey: z.string().min(1).optional(),
9
+ subjectTemplate: z.string().min(1).max(200).default("New Capture submission"),
10
+ bodyTemplate: z.string().min(1).max(4000).default("A new Capture submission was received.\n\n{{answers}}"),
11
+ });
12
+ export const workflowActionConfigSchema = z.object({
13
+ enabled: z.boolean().default(false),
14
+ workflowDefinitionId: z.string().min(1).optional(),
15
+ triggerNodeId: z.string().min(1).optional(),
16
+ execute: z.boolean().default(true),
17
+ });
18
+ function answerToString(value) {
19
+ if (value === undefined || value === null)
20
+ return "";
21
+ if (Array.isArray(value))
22
+ return value.join(", ");
23
+ return String(value);
24
+ }
25
+ export function renderEmailTemplate(template, context) {
26
+ const answerLines = context.fields
27
+ .map((field) => `${field.label}: ${answerToString(context.answers[field.key]) || "—"}`)
28
+ .join("\n");
29
+ return template.replace(/{{\s*([a-zA-Z0-9_.-]+|answers|formName|submissionId|outcome|outcomeLabel|outcomeBucket|outcomeScore)\s*}}/g, (_match, token) => {
30
+ if (token === "answers")
31
+ return answerLines;
32
+ if (token === "formName")
33
+ return context.definitionName;
34
+ if (token === "submissionId")
35
+ return context.submissionId;
36
+ if (token === "outcome" || token === "outcomeLabel")
37
+ return context.outcome?.label ?? "";
38
+ if (token === "outcomeBucket")
39
+ return context.outcome?.bucket ?? "";
40
+ if (token === "outcomeScore")
41
+ return context.outcome ? String(context.outcome.scoreSummary.score) : "";
42
+ return answerToString(context.answers[token]);
43
+ });
44
+ }
45
+ export function buildEmailMessages(args) {
46
+ const recipients = new Set();
47
+ if (args.config.internalRecipientEmail)
48
+ recipients.add(args.config.internalRecipientEmail);
49
+ if (args.config.respondentEmailFieldKey) {
50
+ const respondentEmail = answerToString(args.context.answers[args.config.respondentEmailFieldKey]).trim();
51
+ if (respondentEmail)
52
+ recipients.add(respondentEmail);
53
+ }
54
+ const subject = renderEmailTemplate(args.config.subjectTemplate ?? "New Capture submission", args.context);
55
+ const body = renderEmailTemplate(args.config.bodyTemplate ?? "A new Capture submission was received.\n\n{{answers}}", args.context);
56
+ return [...recipients].map((to) => ({
57
+ ...(args.config.from ? { from: args.config.from } : {}),
58
+ to,
59
+ subject,
60
+ body,
61
+ }));
62
+ }
63
+ export async function executeEmailAction(args) {
64
+ const messages = buildEmailMessages(args);
65
+ if (messages.length === 0) {
66
+ return { message: "No email recipients configured", recipients: [], messageIds: [] };
67
+ }
68
+ const sendEmail = args.sendEmail ?? getLayer("email").send;
69
+ const results = [];
70
+ for (const message of messages) {
71
+ results.push(await sendEmail(message));
72
+ }
73
+ return {
74
+ message: `Sent ${results.length} email${results.length === 1 ? "" : "s"}`,
75
+ recipients: messages.map((message) => message.to).flat(),
76
+ messageIds: results.map((result) => result.id),
77
+ subject: messages[0]?.subject,
78
+ };
79
+ }
80
+ export function buildWorkflowSubmissionPayload(context) {
81
+ return {
82
+ event: "capture.submission.completed",
83
+ submission: {
84
+ id: context.submissionId,
85
+ definitionId: context.definitionId,
86
+ definitionName: context.definitionName,
87
+ scope: context.scope,
88
+ scopeId: context.scopeId,
89
+ answers: context.answers,
90
+ ...(context.outcome ? { outcome: context.outcome } : {}),
91
+ },
92
+ fields: context.fields.map((field) => ({
93
+ id: field.id,
94
+ key: field.key,
95
+ label: field.label,
96
+ type: field.type,
97
+ required: field.required,
98
+ })),
99
+ };
100
+ }
101
+ export async function executeWorkflowAction(args) {
102
+ if (!args.config.workflowDefinitionId) {
103
+ return { message: "No workflow definition selected" };
104
+ }
105
+ if (!args.config.triggerNodeId) {
106
+ throw new Error("Select an API trigger-compatible workflow before enabling this action");
107
+ }
108
+ const input = {
109
+ scope: args.context.scope,
110
+ scopeId: args.context.scopeId,
111
+ definitionId: args.config.workflowDefinitionId,
112
+ input: buildWorkflowSubmissionPayload(args.context),
113
+ idempotencyKey: args.idempotencyKeyOverride ?? `capture:${args.context.submissionId}:workflow:${args.config.workflowDefinitionId}`,
114
+ origin: { kind: "api", triggerNodeId: args.config.triggerNodeId, callerId: "capture" },
115
+ runTags: {
116
+ event: "capture.submission.completed",
117
+ captureDefinitionId: args.context.definitionId,
118
+ captureSubmissionId: args.context.submissionId,
119
+ },
120
+ runMetadata: {
121
+ captureDefinitionName: args.context.definitionName,
122
+ triggerNodeId: args.config.triggerNodeId,
123
+ },
124
+ execute: args.config.execute ?? true,
125
+ };
126
+ const startWorkflowRun = args.startWorkflowRun ?? ((payload) => getHooks().doAction("workflows:run.start", payload));
127
+ const result = await startWorkflowRun(input);
128
+ return {
129
+ message: result.duplicate ? "Workflow run already exists" : "Workflow run started",
130
+ workflowDefinitionId: args.config.workflowDefinitionId,
131
+ runId: result.runId,
132
+ duplicate: result.duplicate,
133
+ };
134
+ }
135
+ export const emailActionAdapter = {
136
+ type: "email.send",
137
+ configSchema: emailActionConfigSchema,
138
+ isEnabled: (config) => Boolean(config.enabled),
139
+ execute: executeEmailAction,
140
+ };
141
+ export const workflowActionAdapter = {
142
+ type: "workflows.run.start",
143
+ configSchema: workflowActionConfigSchema,
144
+ isEnabled: (config) => Boolean(config.enabled),
145
+ execute: executeWorkflowAction,
146
+ };
147
+ //# sourceMappingURL=action-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-adapters.js","sourceRoot":"","sources":["../../../../src/server/api/action-adapters.ts"],"names":[],"mappings":"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"}