medusa-plugin-forms 0.1.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 (45) hide show
  1. package/.medusa/server/medusa-config.d.ts +1 -0
  2. package/.medusa/server/medusa-config.js +27 -0
  3. package/.medusa/server/src/admin/index.js +6388 -0
  4. package/.medusa/server/src/admin/index.mjs +6386 -0
  5. package/.medusa/server/src/api/admin/form-submissions/[id]/route.d.ts +5 -0
  6. package/.medusa/server/src/api/admin/form-submissions/[id]/route.js +27 -0
  7. package/.medusa/server/src/api/admin/form-submissions/route.d.ts +4 -0
  8. package/.medusa/server/src/api/admin/form-submissions/route.js +32 -0
  9. package/.medusa/server/src/api/admin/forms/[id]/fields/[fieldId]/options/[optionId]/route.d.ts +4 -0
  10. package/.medusa/server/src/api/admin/forms/[id]/fields/[fieldId]/options/[optionId]/route.js +20 -0
  11. package/.medusa/server/src/api/admin/forms/[id]/fields/[fieldId]/options/route.d.ts +4 -0
  12. package/.medusa/server/src/api/admin/forms/[id]/fields/[fieldId]/options/route.js +21 -0
  13. package/.medusa/server/src/api/admin/forms/[id]/fields/[fieldId]/route.d.ts +4 -0
  14. package/.medusa/server/src/api/admin/forms/[id]/fields/[fieldId]/route.js +41 -0
  15. package/.medusa/server/src/api/admin/forms/[id]/fields/route.d.ts +5 -0
  16. package/.medusa/server/src/api/admin/forms/[id]/fields/route.js +33 -0
  17. package/.medusa/server/src/api/admin/forms/[id]/route.d.ts +5 -0
  18. package/.medusa/server/src/api/admin/forms/[id]/route.js +57 -0
  19. package/.medusa/server/src/api/admin/forms/route.d.ts +5 -0
  20. package/.medusa/server/src/api/admin/forms/route.js +41 -0
  21. package/.medusa/server/src/api/forms/[handle]/route.d.ts +3 -0
  22. package/.medusa/server/src/api/forms/[handle]/route.js +85 -0
  23. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  24. package/.medusa/server/src/api/middlewares.js +142 -0
  25. package/.medusa/server/src/api/validators.d.ts +390 -0
  26. package/.medusa/server/src/api/validators.js +106 -0
  27. package/.medusa/server/src/modules/form/index.d.ts +64 -0
  28. package/.medusa/server/src/modules/form/index.js +23 -0
  29. package/.medusa/server/src/modules/form/migrations/Migration20260409171800.d.ts +5 -0
  30. package/.medusa/server/src/modules/form/migrations/Migration20260409171800.js +38 -0
  31. package/.medusa/server/src/modules/form/models/form-field-option.d.ts +34 -0
  32. package/.medusa/server/src/modules/form/models/form-field-option.js +13 -0
  33. package/.medusa/server/src/modules/form/models/form-field.d.ts +34 -0
  34. package/.medusa/server/src/modules/form/models/form-field.js +21 -0
  35. package/.medusa/server/src/modules/form/models/form-submission.d.ts +39 -0
  36. package/.medusa/server/src/modules/form/models/form-submission.js +20 -0
  37. package/.medusa/server/src/modules/form/models/form.d.ts +34 -0
  38. package/.medusa/server/src/modules/form/models/form.js +23 -0
  39. package/.medusa/server/src/modules/form/service.d.ts +145 -0
  40. package/.medusa/server/src/modules/form/service.js +24 -0
  41. package/.medusa/server/src/modules/form/types.d.ts +4 -0
  42. package/.medusa/server/src/modules/form/types.js +3 -0
  43. package/LICENSE +21 -0
  44. package/README.md +157 -0
  45. package/package.json +88 -0
@@ -0,0 +1,34 @@
1
+ export declare const FormFieldOption: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
2
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
3
+ label: import("@medusajs/framework/utils").TextProperty;
4
+ value: import("@medusajs/framework/utils").TextProperty;
5
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
6
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
7
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
8
+ name: import("@medusajs/framework/utils").TextProperty;
9
+ label: import("@medusajs/framework/utils").TextProperty;
10
+ field_type: import("@medusajs/framework/utils").TextProperty;
11
+ required: import("@medusajs/framework/utils").BooleanProperty;
12
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
13
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
14
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
15
+ name: import("@medusajs/framework/utils").TextProperty;
16
+ handle: import("@medusajs/framework/utils").TextProperty;
17
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
18
+ active: import("@medusajs/framework/utils").BooleanProperty;
19
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
20
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
21
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
22
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">>;
23
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
24
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
25
+ data: import("@medusajs/framework/utils").JSONProperty;
26
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
27
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
28
+ status: import("@medusajs/framework/utils").EnumProperty<typeof import("./form-submission").SubmissionStatus>;
29
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
30
+ }>, "form_submission">>;
31
+ }>, "form">, undefined>;
32
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field_option">>;
33
+ }>, "form_field">, undefined>;
34
+ }>, "form_field_option">;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormFieldOption = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const form_field_1 = require("./form-field");
6
+ exports.FormFieldOption = utils_1.model.define('form_field_option', {
7
+ id: utils_1.model.id().primaryKey(),
8
+ label: utils_1.model.text(),
9
+ value: utils_1.model.text(),
10
+ sort_order: utils_1.model.number().default(0),
11
+ form_field: utils_1.model.belongsTo(() => form_field_1.FormField, { mappedBy: 'field_options' })
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1vcHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9mb3JtL21vZGVscy9mb3JtLWZpZWxkLW9wdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBaUQ7QUFDakQsNkNBQXdDO0FBRTNCLFFBQUEsZUFBZSxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUU7SUFDaEUsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsS0FBSyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbkIsS0FBSyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbkIsVUFBVSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLFVBQVUsRUFBRSxhQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUM7Q0FDM0UsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,34 @@
1
+ export declare const FormField: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
2
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
3
+ name: import("@medusajs/framework/utils").TextProperty;
4
+ label: import("@medusajs/framework/utils").TextProperty;
5
+ field_type: import("@medusajs/framework/utils").TextProperty;
6
+ required: import("@medusajs/framework/utils").BooleanProperty;
7
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
8
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
9
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
10
+ name: import("@medusajs/framework/utils").TextProperty;
11
+ handle: import("@medusajs/framework/utils").TextProperty;
12
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
13
+ active: import("@medusajs/framework/utils").BooleanProperty;
14
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
15
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
16
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
17
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">>;
18
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
19
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
20
+ data: import("@medusajs/framework/utils").JSONProperty;
21
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
22
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
23
+ status: import("@medusajs/framework/utils").EnumProperty<typeof import("./form-submission").SubmissionStatus>;
24
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
25
+ }>, "form_submission">>;
26
+ }>, "form">, undefined>;
27
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
28
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
29
+ label: import("@medusajs/framework/utils").TextProperty;
30
+ value: import("@medusajs/framework/utils").TextProperty;
31
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
32
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">, undefined>;
33
+ }>, "form_field_option">>;
34
+ }>, "form_field">;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormField = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const form_1 = require("./form");
6
+ const form_field_option_1 = require("./form-field-option");
7
+ exports.FormField = utils_1.model
8
+ .define('form_field', {
9
+ id: utils_1.model.id().primaryKey(),
10
+ name: utils_1.model.text(),
11
+ label: utils_1.model.text(),
12
+ field_type: utils_1.model.text(),
13
+ required: utils_1.model.boolean().default(false),
14
+ sort_order: utils_1.model.number().default(0),
15
+ form: utils_1.model.belongsTo(() => form_1.Form, { mappedBy: 'form_fields' }),
16
+ field_options: utils_1.model.hasMany(() => form_field_option_1.FormFieldOption, { mappedBy: 'form_field' })
17
+ })
18
+ .cascades({
19
+ delete: ['field_options']
20
+ });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2Zvcm0vbW9kZWxzL2Zvcm0tZmllbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBQ2pELGlDQUE2QjtBQUM3QiwyREFBcUQ7QUFFeEMsUUFBQSxTQUFTLEdBQUcsYUFBSztLQUM1QixNQUFNLENBQUMsWUFBWSxFQUFFO0lBQ3JCLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ2xCLEtBQUssRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ25CLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFFBQVEsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN4QyxVQUFVLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckMsSUFBSSxFQUFFLGFBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQzlELGFBQWEsRUFBRSxhQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLG1DQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUM7Q0FDL0UsQ0FBQztLQUNELFFBQVEsQ0FBQztJQUNULE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztDQUN6QixDQUFDLENBQUEifQ==
@@ -0,0 +1,39 @@
1
+ export declare enum SubmissionStatus {
2
+ NEW = "new",
3
+ READ = "read",
4
+ ARCHIVED = "archived"
5
+ }
6
+ export declare const FormSubmission: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
7
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
8
+ data: import("@medusajs/framework/utils").JSONProperty;
9
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
10
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
11
+ status: import("@medusajs/framework/utils").EnumProperty<typeof SubmissionStatus>;
12
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
13
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
14
+ name: import("@medusajs/framework/utils").TextProperty;
15
+ handle: import("@medusajs/framework/utils").TextProperty;
16
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
17
+ active: import("@medusajs/framework/utils").BooleanProperty;
18
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
19
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
20
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
21
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
22
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
23
+ name: import("@medusajs/framework/utils").TextProperty;
24
+ label: import("@medusajs/framework/utils").TextProperty;
25
+ field_type: import("@medusajs/framework/utils").TextProperty;
26
+ required: import("@medusajs/framework/utils").BooleanProperty;
27
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
28
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
29
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
30
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
31
+ label: import("@medusajs/framework/utils").TextProperty;
32
+ value: import("@medusajs/framework/utils").TextProperty;
33
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
34
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">, undefined>;
35
+ }>, "form_field_option">>;
36
+ }>, "form_field">>;
37
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_submission">>;
38
+ }>, "form">, undefined>;
39
+ }>, "form_submission">;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormSubmission = exports.SubmissionStatus = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const form_1 = require("./form");
6
+ var SubmissionStatus;
7
+ (function (SubmissionStatus) {
8
+ SubmissionStatus["NEW"] = "new";
9
+ SubmissionStatus["READ"] = "read";
10
+ SubmissionStatus["ARCHIVED"] = "archived";
11
+ })(SubmissionStatus || (exports.SubmissionStatus = SubmissionStatus = {}));
12
+ exports.FormSubmission = utils_1.model.define('form_submission', {
13
+ id: utils_1.model.id().primaryKey(),
14
+ data: utils_1.model.json(),
15
+ ip_address: utils_1.model.text().nullable(),
16
+ user_agent: utils_1.model.text().nullable(),
17
+ status: utils_1.model.enum(SubmissionStatus).default(SubmissionStatus.NEW),
18
+ form: utils_1.model.belongsTo(() => form_1.Form, { mappedBy: 'submissions' })
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdWJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZm9ybS9tb2RlbHMvZm9ybS1zdWJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFpRDtBQUNqRCxpQ0FBNkI7QUFFN0IsSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzNCLCtCQUFXLENBQUE7SUFDWCxpQ0FBYSxDQUFBO0lBQ2IseUNBQXFCLENBQUE7QUFDdEIsQ0FBQyxFQUpXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBSTNCO0FBRVksUUFBQSxjQUFjLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtJQUM3RCxFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUMzQixJQUFJLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUNsQixVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7SUFDbEUsSUFBSSxFQUFFLGFBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDO0NBQzlELENBQUMsQ0FBQSJ9
@@ -0,0 +1,34 @@
1
+ export declare const Form: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
2
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
3
+ name: import("@medusajs/framework/utils").TextProperty;
4
+ handle: import("@medusajs/framework/utils").TextProperty;
5
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
6
+ active: import("@medusajs/framework/utils").BooleanProperty;
7
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
8
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
9
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
10
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
11
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
12
+ name: import("@medusajs/framework/utils").TextProperty;
13
+ label: import("@medusajs/framework/utils").TextProperty;
14
+ field_type: import("@medusajs/framework/utils").TextProperty;
15
+ required: import("@medusajs/framework/utils").BooleanProperty;
16
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
17
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
18
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
19
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
20
+ label: import("@medusajs/framework/utils").TextProperty;
21
+ value: import("@medusajs/framework/utils").TextProperty;
22
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
23
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">, undefined>;
24
+ }>, "form_field_option">>;
25
+ }>, "form_field">>;
26
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
27
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
28
+ data: import("@medusajs/framework/utils").JSONProperty;
29
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
30
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
31
+ status: import("@medusajs/framework/utils").EnumProperty<typeof import("./form-submission").SubmissionStatus>;
32
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
33
+ }>, "form_submission">>;
34
+ }>, "form">;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Form = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const form_field_1 = require("./form-field");
6
+ const form_submission_1 = require("./form-submission");
7
+ exports.Form = utils_1.model
8
+ .define('form', {
9
+ id: utils_1.model.id().primaryKey(),
10
+ name: utils_1.model.text(),
11
+ handle: utils_1.model.text().unique(),
12
+ description: utils_1.model.text().nullable(),
13
+ active: utils_1.model.boolean().default(true),
14
+ turnstile_enabled: utils_1.model.boolean().default(true),
15
+ notification_emails: utils_1.model.json().nullable(),
16
+ metadata: utils_1.model.json().nullable(),
17
+ form_fields: utils_1.model.hasMany(() => form_field_1.FormField, { mappedBy: 'form' }),
18
+ submissions: utils_1.model.hasMany(() => form_submission_1.FormSubmission, { mappedBy: 'form' })
19
+ })
20
+ .cascades({
21
+ delete: ['form_fields', 'submissions']
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2Zvcm0vbW9kZWxzL2Zvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBQ2pELDZDQUF3QztBQUN4Qyx1REFBa0Q7QUFFckMsUUFBQSxJQUFJLEdBQUcsYUFBSztLQUN2QixNQUFNLENBQUMsTUFBTSxFQUFFO0lBQ2YsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsSUFBSSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEIsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7SUFDN0IsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsTUFBTSxFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3JDLGlCQUFpQixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2hELG1CQUFtQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUMsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsV0FBVyxFQUFFLGFBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsc0JBQVMsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNqRSxXQUFXLEVBQUUsYUFBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0NBQ3RFLENBQUM7S0FDRCxRQUFRLENBQUM7SUFDVCxNQUFNLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDO0NBQ3RDLENBQUMsQ0FBQSJ9
@@ -0,0 +1,145 @@
1
+ import { FormModuleOptions } from './types';
2
+ declare const FormService_base: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
3
+ readonly Form: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
4
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
5
+ name: import("@medusajs/framework/utils").TextProperty;
6
+ handle: import("@medusajs/framework/utils").TextProperty;
7
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
8
+ active: import("@medusajs/framework/utils").BooleanProperty;
9
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
10
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
11
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
12
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
13
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
14
+ name: import("@medusajs/framework/utils").TextProperty;
15
+ label: import("@medusajs/framework/utils").TextProperty;
16
+ field_type: import("@medusajs/framework/utils").TextProperty;
17
+ required: import("@medusajs/framework/utils").BooleanProperty;
18
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
19
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
20
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
21
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
22
+ label: import("@medusajs/framework/utils").TextProperty;
23
+ value: import("@medusajs/framework/utils").TextProperty;
24
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
25
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">, undefined>;
26
+ }>, "form_field_option">>;
27
+ }>, "form_field">>;
28
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
29
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
30
+ data: import("@medusajs/framework/utils").JSONProperty;
31
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
32
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
33
+ status: import("@medusajs/framework/utils").EnumProperty<typeof import("./models/form-submission").SubmissionStatus>;
34
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
35
+ }>, "form_submission">>;
36
+ }>, "form">;
37
+ readonly FormField: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
38
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
39
+ name: import("@medusajs/framework/utils").TextProperty;
40
+ label: import("@medusajs/framework/utils").TextProperty;
41
+ field_type: import("@medusajs/framework/utils").TextProperty;
42
+ required: import("@medusajs/framework/utils").BooleanProperty;
43
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
44
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
45
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
46
+ name: import("@medusajs/framework/utils").TextProperty;
47
+ handle: import("@medusajs/framework/utils").TextProperty;
48
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
49
+ active: import("@medusajs/framework/utils").BooleanProperty;
50
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
51
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
52
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
53
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">>;
54
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
55
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
56
+ data: import("@medusajs/framework/utils").JSONProperty;
57
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
58
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
59
+ status: import("@medusajs/framework/utils").EnumProperty<typeof import("./models/form-submission").SubmissionStatus>;
60
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
61
+ }>, "form_submission">>;
62
+ }>, "form">, undefined>;
63
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
64
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
65
+ label: import("@medusajs/framework/utils").TextProperty;
66
+ value: import("@medusajs/framework/utils").TextProperty;
67
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
68
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">, undefined>;
69
+ }>, "form_field_option">>;
70
+ }>, "form_field">;
71
+ readonly FormFieldOption: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
72
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
73
+ label: import("@medusajs/framework/utils").TextProperty;
74
+ value: import("@medusajs/framework/utils").TextProperty;
75
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
76
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
77
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
78
+ name: import("@medusajs/framework/utils").TextProperty;
79
+ label: import("@medusajs/framework/utils").TextProperty;
80
+ field_type: import("@medusajs/framework/utils").TextProperty;
81
+ required: import("@medusajs/framework/utils").BooleanProperty;
82
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
83
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
84
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
85
+ name: import("@medusajs/framework/utils").TextProperty;
86
+ handle: import("@medusajs/framework/utils").TextProperty;
87
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
88
+ active: import("@medusajs/framework/utils").BooleanProperty;
89
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
90
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
91
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
92
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">>;
93
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
94
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
95
+ data: import("@medusajs/framework/utils").JSONProperty;
96
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
97
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
98
+ status: import("@medusajs/framework/utils").EnumProperty<typeof import("./models/form-submission").SubmissionStatus>;
99
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
100
+ }>, "form_submission">>;
101
+ }>, "form">, undefined>;
102
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field_option">>;
103
+ }>, "form_field">, undefined>;
104
+ }>, "form_field_option">;
105
+ readonly FormSubmission: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
106
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
107
+ data: import("@medusajs/framework/utils").JSONProperty;
108
+ ip_address: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
109
+ user_agent: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
110
+ status: import("@medusajs/framework/utils").EnumProperty<typeof import("./models/form-submission").SubmissionStatus>;
111
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
112
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
113
+ name: import("@medusajs/framework/utils").TextProperty;
114
+ handle: import("@medusajs/framework/utils").TextProperty;
115
+ description: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
116
+ active: import("@medusajs/framework/utils").BooleanProperty;
117
+ turnstile_enabled: import("@medusajs/framework/utils").BooleanProperty;
118
+ notification_emails: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
119
+ metadata: import("@medusajs/framework/utils").NullableModifier<Record<string, unknown>, import("@medusajs/framework/utils").JSONProperty>;
120
+ form_fields: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
121
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
122
+ name: import("@medusajs/framework/utils").TextProperty;
123
+ label: import("@medusajs/framework/utils").TextProperty;
124
+ field_type: import("@medusajs/framework/utils").TextProperty;
125
+ required: import("@medusajs/framework/utils").BooleanProperty;
126
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
127
+ form: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form">, undefined>;
128
+ field_options: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
129
+ id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
130
+ label: import("@medusajs/framework/utils").TextProperty;
131
+ value: import("@medusajs/framework/utils").TextProperty;
132
+ sort_order: import("@medusajs/framework/utils").NumberProperty;
133
+ form_field: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_field">, undefined>;
134
+ }>, "form_field_option">>;
135
+ }>, "form_field">>;
136
+ submissions: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder</*elided*/ any>, "form_submission">>;
137
+ }>, "form">, undefined>;
138
+ }>, "form_submission">;
139
+ }>>;
140
+ export declare class FormService extends FormService_base {
141
+ protected readonly options_: FormModuleOptions;
142
+ constructor(_container: object, options?: FormModuleOptions);
143
+ getOptions(): FormModuleOptions;
144
+ }
145
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormService = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const form_1 = require("./models/form");
6
+ const form_field_1 = require("./models/form-field");
7
+ const form_field_option_1 = require("./models/form-field-option");
8
+ const form_submission_1 = require("./models/form-submission");
9
+ class FormService extends (0, utils_1.MedusaService)({
10
+ Form: form_1.Form,
11
+ FormField: form_field_1.FormField,
12
+ FormFieldOption: form_field_option_1.FormFieldOption,
13
+ FormSubmission: form_submission_1.FormSubmission
14
+ }) {
15
+ constructor(_container, options = {}) {
16
+ super(...arguments);
17
+ this.options_ = options;
18
+ }
19
+ getOptions() {
20
+ return this.options_;
21
+ }
22
+ }
23
+ exports.FormService = FormService;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2Zvcm0vc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBeUQ7QUFDekQsd0NBQW9DO0FBQ3BDLG9EQUErQztBQUMvQyxrRUFBNEQ7QUFDNUQsOERBQXlEO0FBR3pELE1BQWEsV0FBWSxTQUFRLElBQUEscUJBQWEsRUFBQztJQUM5QyxJQUFJLEVBQUosV0FBSTtJQUNKLFNBQVMsRUFBVCxzQkFBUztJQUNULGVBQWUsRUFBZixtQ0FBZTtJQUNmLGNBQWMsRUFBZCxnQ0FBYztDQUNkLENBQUM7SUFHRCxZQUFZLFVBQWtCLEVBQUUsVUFBNkIsRUFBRTtRQUM5RCxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQTtRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtJQUN4QixDQUFDO0lBRUQsVUFBVTtRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUNyQixDQUFDO0NBQ0Q7QUFoQkQsa0NBZ0JDIn0=
@@ -0,0 +1,4 @@
1
+ export type FormModuleOptions = {
2
+ turnstileSiteKey?: string;
3
+ turnstileSecretKey?: string;
4
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9mb3JtL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Lacey Pevey
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,157 @@
1
+ # medusa-plugin-forms
2
+
3
+ Form builder and submission management plugin for Medusa v2. Create dynamic forms with configurable fields and collect submissions via your Medusa backend with optional Cloudflare Turnstile protection.
4
+
5
+ [Documentation](https://pevey.com/medusa-plugin-forms)
6
+
7
+ If you are not familiar with Medusa, you can learn more on [the project web site](https://www.medusajs.com/).
8
+
9
+ ## Features
10
+
11
+ - Create forms with dynamic fields (text, email, tel, number, textarea, select, multiselect, checkbox, date)
12
+ - Select/multiselect fields support configurable options
13
+ - Public API for form submissions at /forms with optional Cloudflare Turnstile integration for spam protection
14
+ - 'form.submitted' event emitter to enable sending notifications on form submission
15
+
16
+ ## Installation
17
+
18
+ Inside your medusa backend root folder:
19
+
20
+ ```bash
21
+ yarn add medusa-plugin-forms
22
+ ```
23
+
24
+ Replace "yarn add" with the correct command for your package manager if you are using (for example) npm, pnpm, or bun.
25
+
26
+ ## Configuration
27
+
28
+ Enable in your `medusa-config.ts` file. Example:
29
+
30
+ ```ts
31
+ module.exports = defineConfig({
32
+ //... other config
33
+ plugins: [
34
+ {
35
+ resolve: 'medusa-plugin-forms',
36
+ options: {
37
+ turnstileSiteKey: process.env.TURNSTILE_SITE_KEY || '',
38
+ turnstileSecretKey: process.env.TURNSTILE_SECRET_KEY || ''
39
+ }
40
+ }
41
+ // ... other plugins
42
+ ]
43
+ })
44
+ ```
45
+
46
+ The Turnstile keys are optional but highly recommended. If Turnstile validation is enabled for a form and Turnsile keys are not provided, the form submissions will not be accepted.
47
+
48
+ Example event subscriber for sending emails:
49
+
50
+ ```ts
51
+ export const config: SubscriberConfig = {
52
+ event: ['form.submitted']
53
+ }
54
+
55
+ export default async function emailDispatchHandler({
56
+ event: { data, name },
57
+ container
58
+ }: SubscriberArgs<EventPayload>) {
59
+ await sendFormSubmissionNotificationWorkflow(container).run({
60
+ input: (data as EventPayloadWithId).id
61
+ })
62
+ }
63
+ ```
64
+
65
+ Example workflow for sending the notification using a react email template:
66
+
67
+ ```ts
68
+ import {
69
+ createWorkflow,
70
+ WorkflowResponse,
71
+ createStep,
72
+ StepResponse
73
+ } from '@medusajs/framework/workflows-sdk'
74
+ import { ContainerRegistrationKeys } from '@medusajs/framework/utils'
75
+ import { CreateNotificationDTO } from '@medusajs/framework/types'
76
+ import { sendNotificationsStep } from '@medusajs/medusa/core-flows'
77
+ import { render, pretty } from '@react-email/render'
78
+ import getFormSubmissionTemplate from '../../templates/form-submission'
79
+
80
+ const prepareFormSubmissionNotificationStep = createStep(
81
+ 'prepare-form-submission-notification',
82
+ async (id: string, { container }) => {
83
+ const query = container.resolve(ContainerRegistrationKeys.QUERY)
84
+
85
+ const {
86
+ data: [submission]
87
+ } = await query.graph({
88
+ entity: 'form_submission',
89
+ fields: [
90
+ 'id',
91
+ 'data',
92
+ 'created_at',
93
+ 'form.name',
94
+ 'form.notification_emails',
95
+ 'form.form_fields.name',
96
+ 'form.form_fields.label',
97
+ 'form.form_fields.sort_order'
98
+ ],
99
+ filters: { id }
100
+ })
101
+
102
+ type AnyRecord = Record<string, any>
103
+ const sub = submission as AnyRecord
104
+
105
+ const emails: string[] = sub.form?.notification_emails ?? []
106
+ if (emails.length === 0) {
107
+ return new StepResponse([] as CreateNotificationDTO[])
108
+ }
109
+
110
+ const formFields: AnyRecord[] = [...(sub.form?.form_fields ?? [])].sort(
111
+ (a, b) => (a.sort_order ?? 0) - (b.sort_order ?? 0)
112
+ )
113
+ const submissionData = (sub.data ?? {}) as Record<string, unknown>
114
+
115
+ const fields = formFields.map(f => ({
116
+ label: f.label ?? f.name,
117
+ value: String(submissionData[f.name] ?? '')
118
+ }))
119
+
120
+ const html = await pretty(
121
+ await render(
122
+ getFormSubmissionTemplate({
123
+ formName: sub.form?.name ?? 'Form',
124
+ submittedAt: new Date(sub.created_at).toLocaleString(),
125
+ fields
126
+ })
127
+ )
128
+ )
129
+
130
+ const notifications: CreateNotificationDTO[] = emails.map(email => ({
131
+ channel: 'email',
132
+ to: email,
133
+ content: {
134
+ html,
135
+ subject: `New submission: ${sub.form?.name ?? 'Form'}`
136
+ }
137
+ }))
138
+
139
+ return new StepResponse(notifications)
140
+ }
141
+ )
142
+
143
+ export const sendFormSubmissionNotificationWorkflow = createWorkflow(
144
+ 'send-form-submission-notification',
145
+ function (id: string) {
146
+ const notifications = prepareFormSubmissionNotificationStep(id)
147
+ sendNotificationsStep(notifications)
148
+ return new WorkflowResponse(void 0)
149
+ }
150
+ )
151
+ ```
152
+
153
+ ## Usage
154
+
155
+ - Create and manage forms in Settings > Forms in the Medusa admin.
156
+ - Add fields and configure options for select/multiselect fields.
157
+ - Submit forms via the public store API: `POST /forms/:handle`.