@revealui/contracts 1.0.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 (191) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +160 -0
  3. package/dist/a2a/index.d.ts +383 -0
  4. package/dist/a2a/index.d.ts.map +1 -0
  5. package/dist/a2a/index.js +276 -0
  6. package/dist/a2a/index.js.map +1 -0
  7. package/dist/actions/action-validator.d.ts +48 -0
  8. package/dist/actions/action-validator.d.ts.map +1 -0
  9. package/dist/actions/action-validator.js +288 -0
  10. package/dist/actions/action-validator.js.map +1 -0
  11. package/dist/actions/index.d.ts +7 -0
  12. package/dist/actions/index.d.ts.map +1 -0
  13. package/dist/actions/index.js +7 -0
  14. package/dist/actions/index.js.map +1 -0
  15. package/dist/agents/index.d.ts +628 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/index.js +511 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/types.d.ts +22 -0
  20. package/dist/agents/types.d.ts.map +1 -0
  21. package/dist/agents/types.js +2 -0
  22. package/dist/agents/types.js.map +1 -0
  23. package/dist/api/auth.d.ts +60 -0
  24. package/dist/api/auth.d.ts.map +1 -0
  25. package/dist/api/auth.js +84 -0
  26. package/dist/api/auth.js.map +1 -0
  27. package/dist/api/chat.d.ts +45 -0
  28. package/dist/api/chat.d.ts.map +1 -0
  29. package/dist/api/chat.js +55 -0
  30. package/dist/api/chat.js.map +1 -0
  31. package/dist/api/gdpr.d.ts +39 -0
  32. package/dist/api/gdpr.d.ts.map +1 -0
  33. package/dist/api/gdpr.js +53 -0
  34. package/dist/api/gdpr.js.map +1 -0
  35. package/dist/cms/collection.d.ts +108 -0
  36. package/dist/cms/collection.d.ts.map +1 -0
  37. package/dist/cms/collection.js +144 -0
  38. package/dist/cms/collection.js.map +1 -0
  39. package/dist/cms/compat.d.ts +128 -0
  40. package/dist/cms/compat.d.ts.map +1 -0
  41. package/dist/cms/compat.js +141 -0
  42. package/dist/cms/compat.js.map +1 -0
  43. package/dist/cms/config-contract.d.ts +278 -0
  44. package/dist/cms/config-contract.d.ts.map +1 -0
  45. package/dist/cms/config-contract.js +220 -0
  46. package/dist/cms/config-contract.js.map +1 -0
  47. package/dist/cms/config.d.ts +351 -0
  48. package/dist/cms/config.d.ts.map +1 -0
  49. package/dist/cms/config.js +50 -0
  50. package/dist/cms/config.js.map +1 -0
  51. package/dist/cms/errors.d.ts +122 -0
  52. package/dist/cms/errors.d.ts.map +1 -0
  53. package/dist/cms/errors.js +163 -0
  54. package/dist/cms/errors.js.map +1 -0
  55. package/dist/cms/extensibility.d.ts +211 -0
  56. package/dist/cms/extensibility.d.ts.map +1 -0
  57. package/dist/cms/extensibility.js +313 -0
  58. package/dist/cms/extensibility.js.map +1 -0
  59. package/dist/cms/field.d.ts +69 -0
  60. package/dist/cms/field.d.ts.map +1 -0
  61. package/dist/cms/field.js +94 -0
  62. package/dist/cms/field.js.map +1 -0
  63. package/dist/cms/functions.d.ts +466 -0
  64. package/dist/cms/functions.d.ts.map +1 -0
  65. package/dist/cms/functions.js +19 -0
  66. package/dist/cms/functions.js.map +1 -0
  67. package/dist/cms/global.d.ts +45 -0
  68. package/dist/cms/global.d.ts.map +1 -0
  69. package/dist/cms/global.js +62 -0
  70. package/dist/cms/global.js.map +1 -0
  71. package/dist/cms/index.d.ts +23 -0
  72. package/dist/cms/index.d.ts.map +1 -0
  73. package/dist/cms/index.js +42 -0
  74. package/dist/cms/index.js.map +1 -0
  75. package/dist/cms/structure.d.ts +1601 -0
  76. package/dist/cms/structure.d.ts.map +1 -0
  77. package/dist/cms/structure.js +757 -0
  78. package/dist/cms/structure.js.map +1 -0
  79. package/dist/content/index.d.ts +1542 -0
  80. package/dist/content/index.d.ts.map +1 -0
  81. package/dist/content/index.js +522 -0
  82. package/dist/content/index.js.map +1 -0
  83. package/dist/database/bridge.d.ts +177 -0
  84. package/dist/database/bridge.d.ts.map +1 -0
  85. package/dist/database/bridge.js +139 -0
  86. package/dist/database/bridge.js.map +1 -0
  87. package/dist/database/index.d.ts +8 -0
  88. package/dist/database/index.d.ts.map +1 -0
  89. package/dist/database/index.js +9 -0
  90. package/dist/database/index.js.map +1 -0
  91. package/dist/database/type-bridge.d.ts +178 -0
  92. package/dist/database/type-bridge.d.ts.map +1 -0
  93. package/dist/database/type-bridge.js +154 -0
  94. package/dist/database/type-bridge.js.map +1 -0
  95. package/dist/entities/agent-context.d.ts +280 -0
  96. package/dist/entities/agent-context.d.ts.map +1 -0
  97. package/dist/entities/agent-context.js +390 -0
  98. package/dist/entities/agent-context.js.map +1 -0
  99. package/dist/entities/agent-memory.d.ts +661 -0
  100. package/dist/entities/agent-memory.d.ts.map +1 -0
  101. package/dist/entities/agent-memory.js +544 -0
  102. package/dist/entities/agent-memory.js.map +1 -0
  103. package/dist/entities/board.d.ts +95 -0
  104. package/dist/entities/board.d.ts.map +1 -0
  105. package/dist/entities/board.js +99 -0
  106. package/dist/entities/board.js.map +1 -0
  107. package/dist/entities/code-provenance.d.ts +270 -0
  108. package/dist/entities/code-provenance.d.ts.map +1 -0
  109. package/dist/entities/code-provenance.js +339 -0
  110. package/dist/entities/code-provenance.js.map +1 -0
  111. package/dist/entities/index.d.ts +22 -0
  112. package/dist/entities/index.d.ts.map +1 -0
  113. package/dist/entities/index.js +22 -0
  114. package/dist/entities/index.js.map +1 -0
  115. package/dist/entities/media.d.ts +485 -0
  116. package/dist/entities/media.d.ts.map +1 -0
  117. package/dist/entities/media.js +606 -0
  118. package/dist/entities/media.js.map +1 -0
  119. package/dist/entities/page-revision.d.ts +390 -0
  120. package/dist/entities/page-revision.d.ts.map +1 -0
  121. package/dist/entities/page-revision.js +406 -0
  122. package/dist/entities/page-revision.js.map +1 -0
  123. package/dist/entities/page.d.ts +2349 -0
  124. package/dist/entities/page.d.ts.map +1 -0
  125. package/dist/entities/page.js +377 -0
  126. package/dist/entities/page.js.map +1 -0
  127. package/dist/entities/post.d.ts +619 -0
  128. package/dist/entities/post.d.ts.map +1 -0
  129. package/dist/entities/post.js +555 -0
  130. package/dist/entities/post.js.map +1 -0
  131. package/dist/entities/price.d.ts +772 -0
  132. package/dist/entities/price.d.ts.map +1 -0
  133. package/dist/entities/price.js +308 -0
  134. package/dist/entities/price.js.map +1 -0
  135. package/dist/entities/product.d.ts +753 -0
  136. package/dist/entities/product.d.ts.map +1 -0
  137. package/dist/entities/product.js +307 -0
  138. package/dist/entities/product.js.map +1 -0
  139. package/dist/entities/session.d.ts +222 -0
  140. package/dist/entities/session.d.ts.map +1 -0
  141. package/dist/entities/session.js +253 -0
  142. package/dist/entities/session.js.map +1 -0
  143. package/dist/entities/site.d.ts +387 -0
  144. package/dist/entities/site.d.ts.map +1 -0
  145. package/dist/entities/site.js +348 -0
  146. package/dist/entities/site.js.map +1 -0
  147. package/dist/entities/ticket-comment.d.ts +49 -0
  148. package/dist/entities/ticket-comment.d.ts.map +1 -0
  149. package/dist/entities/ticket-comment.js +58 -0
  150. package/dist/entities/ticket-comment.js.map +1 -0
  151. package/dist/entities/ticket-label.d.ts +64 -0
  152. package/dist/entities/ticket-label.d.ts.map +1 -0
  153. package/dist/entities/ticket-label.js +77 -0
  154. package/dist/entities/ticket-label.js.map +1 -0
  155. package/dist/entities/ticket.d.ts +204 -0
  156. package/dist/entities/ticket.d.ts.map +1 -0
  157. package/dist/entities/ticket.js +205 -0
  158. package/dist/entities/ticket.js.map +1 -0
  159. package/dist/entities/user.d.ts +336 -0
  160. package/dist/entities/user.d.ts.map +1 -0
  161. package/dist/entities/user.js +255 -0
  162. package/dist/entities/user.js.map +1 -0
  163. package/dist/foundation/contract.d.ts +221 -0
  164. package/dist/foundation/contract.d.ts.map +1 -0
  165. package/dist/foundation/contract.js +133 -0
  166. package/dist/foundation/contract.js.map +1 -0
  167. package/dist/foundation/index.d.ts +7 -0
  168. package/dist/foundation/index.d.ts.map +1 -0
  169. package/dist/foundation/index.js +7 -0
  170. package/dist/foundation/index.js.map +1 -0
  171. package/dist/generated/contracts.d.ts +1514 -0
  172. package/dist/generated/contracts.d.ts.map +1 -0
  173. package/dist/generated/contracts.js +959 -0
  174. package/dist/generated/contracts.js.map +1 -0
  175. package/dist/generated/database.d.ts +48 -0
  176. package/dist/generated/database.d.ts.map +1 -0
  177. package/dist/generated/database.js +17 -0
  178. package/dist/generated/database.js.map +1 -0
  179. package/dist/generated/zod-schemas.d.ts +14793 -0
  180. package/dist/generated/zod-schemas.d.ts.map +1 -0
  181. package/dist/generated/zod-schemas.js +547 -0
  182. package/dist/generated/zod-schemas.js.map +1 -0
  183. package/dist/index.d.ts +50 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +81 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/representation/index.d.ts +304 -0
  188. package/dist/representation/index.d.ts.map +1 -0
  189. package/dist/representation/index.js +280 -0
  190. package/dist/representation/index.js.map +1 -0
  191. package/package.json +117 -0
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Authentication API Contracts
3
+ *
4
+ * Validation contracts for authentication endpoints
5
+ */
6
+ import { z } from 'zod/v4';
7
+ import { createContract } from '../foundation/contract.js';
8
+ /**
9
+ * Sign-up request validation
10
+ *
11
+ * Validates user registration data with:
12
+ * - Email format validation and sanitization
13
+ * - Password strength requirements (min 8 chars)
14
+ * - Name validation and sanitization
15
+ */
16
+ export const SignUpRequestSchema = z.object({
17
+ email: z
18
+ .string()
19
+ .min(1, 'Email is required')
20
+ .email('Invalid email format')
21
+ .transform((email) => email.toLowerCase().trim()),
22
+ password: z.string().min(8, 'Password must be at least 8 characters long'),
23
+ name: z
24
+ .string()
25
+ .min(1, 'Name is required')
26
+ .max(100, 'Name must be less than 100 characters')
27
+ .transform((name) => name
28
+ .replace(/<[^>]*>/g, '')
29
+ .trim()
30
+ .replace(/\s+/g, ' ')),
31
+ });
32
+ export const SignUpRequestContract = createContract({
33
+ name: 'SignUpRequest',
34
+ version: '1',
35
+ description: 'Validates user sign-up request data',
36
+ schema: SignUpRequestSchema,
37
+ });
38
+ /**
39
+ * Sign-in request validation
40
+ */
41
+ export const SignInRequestSchema = z.object({
42
+ email: z
43
+ .string()
44
+ .min(1, 'Email is required')
45
+ .email('Invalid email format')
46
+ .transform((email) => email.toLowerCase().trim()),
47
+ password: z.string().min(1, 'Password is required'),
48
+ });
49
+ export const SignInRequestContract = createContract({
50
+ name: 'SignInRequest',
51
+ version: '1',
52
+ description: 'Validates user sign-in request data',
53
+ schema: SignInRequestSchema,
54
+ });
55
+ /**
56
+ * Password reset request validation
57
+ */
58
+ export const PasswordResetRequestSchema = z.object({
59
+ email: z
60
+ .string()
61
+ .min(1, 'Email is required')
62
+ .email('Invalid email format')
63
+ .transform((email) => email.toLowerCase().trim()),
64
+ });
65
+ export const PasswordResetRequestContract = createContract({
66
+ name: 'PasswordResetRequest',
67
+ version: '1',
68
+ description: 'Validates password reset request data',
69
+ schema: PasswordResetRequestSchema,
70
+ });
71
+ /**
72
+ * Password reset with token validation
73
+ */
74
+ export const PasswordResetTokenSchema = z.object({
75
+ token: z.string().min(1, 'Token is required'),
76
+ password: z.string().min(8, 'Password must be at least 8 characters long'),
77
+ });
78
+ export const PasswordResetTokenContract = createContract({
79
+ name: 'PasswordResetToken',
80
+ version: '1',
81
+ description: 'Validates password reset with token data',
82
+ schema: PasswordResetTokenSchema,
83
+ });
84
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/api/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Chat API Contracts
3
+ *
4
+ * Validation contracts for chat/AI endpoints
5
+ */
6
+ import { z } from 'zod/v4';
7
+ /**
8
+ * Chat message schema
9
+ */
10
+ export declare const ChatMessageSchema: z.ZodObject<{
11
+ role: z.ZodEnum<{
12
+ system: "system";
13
+ user: "user";
14
+ assistant: "assistant";
15
+ }>;
16
+ content: z.ZodString;
17
+ }, z.core.$strip>;
18
+ export type ChatMessage = z.infer<typeof ChatMessageSchema>;
19
+ /**
20
+ * Chat request validation
21
+ *
22
+ * Validates chat request with:
23
+ * - Non-empty array of messages
24
+ * - Each message has role and content
25
+ * - Last message must be from user
26
+ * - Last message content max 4000 characters
27
+ */
28
+ export declare const ChatRequestSchema: z.ZodObject<{
29
+ messages: z.ZodArray<z.ZodObject<{
30
+ role: z.ZodEnum<{
31
+ system: "system";
32
+ user: "user";
33
+ assistant: "assistant";
34
+ }>;
35
+ content: z.ZodString;
36
+ }, z.core.$strip>>;
37
+ }, z.core.$strip>;
38
+ export type ChatRequest = z.infer<typeof ChatRequestSchema>;
39
+ export declare const ChatRequestContract: import("../index.js").Contract<{
40
+ messages: {
41
+ role: "system" | "user" | "assistant";
42
+ content: string;
43
+ }[];
44
+ }>;
45
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/api/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAG1B;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;iBAG5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;iBAiC3B,CAAA;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Chat API Contracts
3
+ *
4
+ * Validation contracts for chat/AI endpoints
5
+ */
6
+ import { z } from 'zod/v4';
7
+ import { createContract } from '../foundation/contract.js';
8
+ /**
9
+ * Chat message schema
10
+ */
11
+ export const ChatMessageSchema = z.object({
12
+ role: z.enum(['user', 'assistant', 'system']),
13
+ content: z.string().min(1, 'Message content cannot be empty'),
14
+ });
15
+ /**
16
+ * Chat request validation
17
+ *
18
+ * Validates chat request with:
19
+ * - Non-empty array of messages
20
+ * - Each message has role and content
21
+ * - Last message must be from user
22
+ * - Last message content max 4000 characters
23
+ */
24
+ export const ChatRequestSchema = z
25
+ .object({
26
+ messages: z.array(ChatMessageSchema).min(1, 'Messages must be a non-empty array'),
27
+ })
28
+ .refine((data) => {
29
+ const lastMessage = data.messages[data.messages.length - 1];
30
+ return lastMessage?.role === 'user';
31
+ }, {
32
+ message: 'Last message must be from user',
33
+ path: ['messages'],
34
+ })
35
+ .refine((data) => {
36
+ const lastMessage = data.messages[data.messages.length - 1];
37
+ return lastMessage && lastMessage.content.trim().length > 0;
38
+ }, {
39
+ message: 'Message content must be a non-empty string',
40
+ path: ['messages'],
41
+ })
42
+ .refine((data) => {
43
+ const lastMessage = data.messages[data.messages.length - 1];
44
+ return lastMessage && lastMessage.content.length <= 4000;
45
+ }, {
46
+ message: 'Message too long (max 4000 characters)',
47
+ path: ['messages'],
48
+ });
49
+ export const ChatRequestContract = createContract({
50
+ name: 'ChatRequest',
51
+ version: '1',
52
+ description: 'Validates chat request with messages',
53
+ schema: ChatRequestSchema,
54
+ });
55
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/api/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iCAAiC,CAAC;CAC9D,CAAC,CAAA;AAIF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;CAClF,CAAC;KACD,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3D,OAAO,WAAW,EAAE,IAAI,KAAK,MAAM,CAAA;AACrC,CAAC,EACD;IACE,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,CAAC,UAAU,CAAC;CACnB,CACF;KACA,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3D,OAAO,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;AAC7D,CAAC,EACD;IACE,OAAO,EAAE,4CAA4C;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC;CACnB,CACF;KACA,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3D,OAAO,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAA;AAC1D,CAAC,EACD;IACE,OAAO,EAAE,wCAAwC;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC;CACnB,CACF,CAAA;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;IAChD,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,sCAAsC;IACnD,MAAM,EAAE,iBAAiB;CAC1B,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * GDPR API Contracts
3
+ *
4
+ * Validation contracts for GDPR/privacy endpoints (data export, deletion)
5
+ */
6
+ import { z } from 'zod/v4';
7
+ /**
8
+ * GDPR Data Export Request validation
9
+ *
10
+ * Validates data export request with userId OR email (at least one required)
11
+ */
12
+ export declare const GDPRExportRequestSchema: z.ZodObject<{
13
+ userId: z.ZodOptional<z.ZodString>;
14
+ email: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strip>;
16
+ export type GDPRExportRequest = z.infer<typeof GDPRExportRequestSchema>;
17
+ export declare const GDPRExportRequestContract: import("../index.js").Contract<{
18
+ userId?: string | undefined;
19
+ email?: string | undefined;
20
+ }>;
21
+ /**
22
+ * GDPR Data Deletion Request validation
23
+ *
24
+ * Validates data deletion request with:
25
+ * - userId OR email (at least one required)
26
+ * - confirmation must equal "DELETE" (security measure)
27
+ */
28
+ export declare const GDPRDeleteRequestSchema: z.ZodObject<{
29
+ userId: z.ZodOptional<z.ZodString>;
30
+ email: z.ZodOptional<z.ZodString>;
31
+ confirmation: z.ZodLiteral<"DELETE">;
32
+ }, z.core.$strip>;
33
+ export type GDPRDeleteRequest = z.infer<typeof GDPRDeleteRequestSchema>;
34
+ export declare const GDPRDeleteRequestContract: import("../index.js").Contract<{
35
+ confirmation: "DELETE";
36
+ userId?: string | undefined;
37
+ email?: string | undefined;
38
+ }>;
39
+ //# sourceMappingURL=gdpr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gdpr.d.ts","sourceRoot":"","sources":["../../src/api/gdpr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAG1B;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;iBAQhC,CAAA;AAEJ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE,eAAO,MAAM,yBAAyB;;;EAKpC,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB;;;;iBAWhC,CAAA;AAEJ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE,eAAO,MAAM,yBAAyB;;;;EAKpC,CAAA"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * GDPR API Contracts
3
+ *
4
+ * Validation contracts for GDPR/privacy endpoints (data export, deletion)
5
+ */
6
+ import { z } from 'zod/v4';
7
+ import { createContract } from '../foundation/contract.js';
8
+ /**
9
+ * GDPR Data Export Request validation
10
+ *
11
+ * Validates data export request with userId OR email (at least one required)
12
+ */
13
+ export const GDPRExportRequestSchema = z
14
+ .object({
15
+ userId: z.string().optional(),
16
+ email: z.string().email('Invalid email format').optional(),
17
+ })
18
+ .refine((data) => data.userId || data.email, {
19
+ message: 'Either userId or email must be provided',
20
+ path: ['body'],
21
+ });
22
+ export const GDPRExportRequestContract = createContract({
23
+ name: 'GDPRExportRequest',
24
+ version: '1',
25
+ description: 'Validates GDPR data export request',
26
+ schema: GDPRExportRequestSchema,
27
+ });
28
+ /**
29
+ * GDPR Data Deletion Request validation
30
+ *
31
+ * Validates data deletion request with:
32
+ * - userId OR email (at least one required)
33
+ * - confirmation must equal "DELETE" (security measure)
34
+ */
35
+ export const GDPRDeleteRequestSchema = z
36
+ .object({
37
+ userId: z.string().optional(),
38
+ email: z.string().email('Invalid email format').optional(),
39
+ confirmation: z.literal('DELETE', {
40
+ message: "Please confirm deletion by sending 'DELETE' in the confirmation field",
41
+ }),
42
+ })
43
+ .refine((data) => data.userId || data.email, {
44
+ message: 'Either userId or email must be provided',
45
+ path: ['body'],
46
+ });
47
+ export const GDPRDeleteRequestContract = createContract({
48
+ name: 'GDPRDeleteRequest',
49
+ version: '1',
50
+ description: 'Validates GDPR data deletion request with confirmation',
51
+ schema: GDPRDeleteRequestSchema,
52
+ });
53
+ //# sourceMappingURL=gdpr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gdpr.js","sourceRoot":"","sources":["../../src/api/gdpr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;CAC3D,CAAC;KACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IAC3C,OAAO,EAAE,yCAAyC;IAClD,IAAI,EAAE,CAAC,MAAM,CAAC;CACf,CAAC,CAAA;AAIJ,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;IACtD,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,oCAAoC;IACjD,MAAM,EAAE,uBAAuB;CAChC,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAC1D,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,uEAAuE;KACjF,CAAC;CACH,CAAC;KACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IAC3C,OAAO,EAAE,yCAAyC;IAClD,IAAI,EAAE,CAAC,MAAM,CAAC;CACf,CAAC,CAAA;AAIJ,MAAM,CAAC,MAAM,yBAAyB,GAAG,cAAc,CAAC;IACtD,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,wDAAwD;IACrE,MAAM,EAAE,uBAAuB;CAChC,CAAC,CAAA"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Collection Contract
3
+ *
4
+ * Unified contract for Collection configurations that combines:
5
+ * - TypeScript types (compile-time)
6
+ * - Zod schemas (runtime validation)
7
+ * - Validation functions
8
+ * - Type guards
9
+ *
10
+ * This is the single source of truth for Collection definitions.
11
+ *
12
+ * @module @revealui/contracts/core/contracts/collection
13
+ */
14
+ import { type Contract, type ContractType } from '../foundation/contract.js';
15
+ import type { CollectionConfig, Field } from './config.js';
16
+ import { type AuthConfig, type CollectionStructure, type UploadConfig } from './structure.js';
17
+ /**
18
+ * Collection Contract
19
+ *
20
+ * This contract validates Collection configurations at runtime
21
+ * and provides TypeScript types at compile time.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const PostsContract = CollectionContract
26
+ *
27
+ * // Validate a collection config
28
+ * const result = PostsContract.validate(userInput)
29
+ * if (result.success) {
30
+ * // result.data is fully typed as CollectionConfig
31
+ * console.log(result.data.slug)
32
+ * }
33
+ *
34
+ * // Type guard
35
+ * if (PostsContract.isType(unknownData)) {
36
+ * // unknownData is now typed as CollectionConfig
37
+ * console.log(unknownData.slug)
38
+ * }
39
+ * ```
40
+ */
41
+ export declare const CollectionContract: Contract<CollectionStructure>;
42
+ /**
43
+ * Type for Collection configuration
44
+ * Extracted from the CollectionContract
45
+ */
46
+ export type CollectionContractType = ContractType<typeof CollectionContract>;
47
+ /**
48
+ * Validate a collection configuration
49
+ *
50
+ * @param data - Unknown data to validate
51
+ * @returns Validation result with typed CollectionConfig on success
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const result = validateCollection(userInput)
56
+ * if (result.success) {
57
+ * const collection = result.data
58
+ * // collection is fully typed
59
+ * }
60
+ * ```
61
+ */
62
+ export declare function validateCollection(data: unknown): ReturnType<typeof CollectionContract.validate>;
63
+ /**
64
+ * Type guard for collection configurations
65
+ *
66
+ * @param data - Unknown data to check
67
+ * @returns True if data is a valid collection config
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * if (isCollectionConfig(unknownData)) {
72
+ * // unknownData is now typed as CollectionConfig
73
+ * console.log(unknownData.slug)
74
+ * }
75
+ * ```
76
+ */
77
+ export declare function isCollectionConfig(data: unknown): data is CollectionContractType;
78
+ /**
79
+ * Parse collection configuration (throws on validation failure)
80
+ *
81
+ * @param data - Unknown data to parse
82
+ * @returns Validated CollectionConfig
83
+ * @throws ZodError if validation fails
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * try {
88
+ * const collection = parseCollection(userInput)
89
+ * // collection is fully typed
90
+ * } catch (error) {
91
+ * // Handle validation error
92
+ * }
93
+ * ```
94
+ */
95
+ export declare function parseCollection(data: unknown): CollectionContractType;
96
+ /**
97
+ * Creates a basic collection config with defaults
98
+ */
99
+ export declare function createCollectionConfig(slug: string, fields: Field[], options?: Partial<Omit<CollectionConfig, 'slug' | 'fields'>>): CollectionConfig;
100
+ /**
101
+ * Creates an auth-enabled collection config
102
+ */
103
+ export declare function createAuthCollectionConfig(slug: string, fields: Field[], authOptions?: AuthConfig, options?: Partial<Omit<CollectionConfig, 'slug' | 'fields' | 'auth'>>): CollectionConfig;
104
+ /**
105
+ * Creates an upload-enabled collection config
106
+ */
107
+ export declare function createUploadCollectionConfig(slug: string, fields: Field[], uploadOptions?: UploadConfig, options?: Partial<Omit<CollectionConfig, 'slug' | 'fields' | 'upload'>>): CollectionConfig;
108
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/cms/collection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAkB,MAAM,2BAA2B,CAAA;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EACL,KAAK,UAAU,EAEf,KAAK,mBAAmB,EAExB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,mBAAmB,CAO3D,CAAA;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE5E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAEhG;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,sBAAsB,CAEhF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CAErE;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,GAC3D,gBAAgB,CAQlB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,EAAE,EACf,WAAW,CAAC,EAAE,UAAU,EACxB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,GACpE,gBAAgB,CASlB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,CAAC,EAAE,YAAY,EAC5B,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,GACtE,gBAAgB,CASlB"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Collection Contract
3
+ *
4
+ * Unified contract for Collection configurations that combines:
5
+ * - TypeScript types (compile-time)
6
+ * - Zod schemas (runtime validation)
7
+ * - Validation functions
8
+ * - Type guards
9
+ *
10
+ * This is the single source of truth for Collection definitions.
11
+ *
12
+ * @module @revealui/contracts/core/contracts/collection
13
+ */
14
+ import { createContract } from '../foundation/contract.js';
15
+ import { COLLECTION_SCHEMA_VERSION, CollectionStructureSchema, } from './structure.js';
16
+ /**
17
+ * Collection Contract
18
+ *
19
+ * This contract validates Collection configurations at runtime
20
+ * and provides TypeScript types at compile time.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const PostsContract = CollectionContract
25
+ *
26
+ * // Validate a collection config
27
+ * const result = PostsContract.validate(userInput)
28
+ * if (result.success) {
29
+ * // result.data is fully typed as CollectionConfig
30
+ * console.log(result.data.slug)
31
+ * }
32
+ *
33
+ * // Type guard
34
+ * if (PostsContract.isType(unknownData)) {
35
+ * // unknownData is now typed as CollectionConfig
36
+ * console.log(unknownData.slug)
37
+ * }
38
+ * ```
39
+ */
40
+ export const CollectionContract = createContract({
41
+ name: 'Collection',
42
+ version: '1.0.0',
43
+ schema: CollectionStructureSchema,
44
+ description: 'Collection configuration contract',
45
+ docsUrl: 'https://revealui.dev/docs/api-reference/collections',
46
+ tags: ['collection', 'config', 'cms'],
47
+ });
48
+ /**
49
+ * Validate a collection configuration
50
+ *
51
+ * @param data - Unknown data to validate
52
+ * @returns Validation result with typed CollectionConfig on success
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const result = validateCollection(userInput)
57
+ * if (result.success) {
58
+ * const collection = result.data
59
+ * // collection is fully typed
60
+ * }
61
+ * ```
62
+ */
63
+ export function validateCollection(data) {
64
+ return CollectionContract.validate(data);
65
+ }
66
+ /**
67
+ * Type guard for collection configurations
68
+ *
69
+ * @param data - Unknown data to check
70
+ * @returns True if data is a valid collection config
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * if (isCollectionConfig(unknownData)) {
75
+ * // unknownData is now typed as CollectionConfig
76
+ * console.log(unknownData.slug)
77
+ * }
78
+ * ```
79
+ */
80
+ export function isCollectionConfig(data) {
81
+ return CollectionContract.isType(data);
82
+ }
83
+ /**
84
+ * Parse collection configuration (throws on validation failure)
85
+ *
86
+ * @param data - Unknown data to parse
87
+ * @returns Validated CollectionConfig
88
+ * @throws ZodError if validation fails
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * try {
93
+ * const collection = parseCollection(userInput)
94
+ * // collection is fully typed
95
+ * } catch (error) {
96
+ * // Handle validation error
97
+ * }
98
+ * ```
99
+ */
100
+ export function parseCollection(data) {
101
+ return CollectionContract.parse(data);
102
+ }
103
+ // =============================================================================
104
+ // Factory Functions
105
+ // =============================================================================
106
+ /**
107
+ * Creates a basic collection config with defaults
108
+ */
109
+ export function createCollectionConfig(slug, fields, options) {
110
+ return {
111
+ schemaVersion: COLLECTION_SCHEMA_VERSION,
112
+ slug,
113
+ fields,
114
+ timestamps: true,
115
+ ...options,
116
+ };
117
+ }
118
+ /**
119
+ * Creates an auth-enabled collection config
120
+ */
121
+ export function createAuthCollectionConfig(slug, fields, authOptions, options) {
122
+ return {
123
+ schemaVersion: COLLECTION_SCHEMA_VERSION,
124
+ slug,
125
+ fields: [{ name: 'email', type: 'email', required: true, unique: true }, ...fields],
126
+ auth: authOptions ?? {},
127
+ timestamps: true,
128
+ ...options,
129
+ };
130
+ }
131
+ /**
132
+ * Creates an upload-enabled collection config
133
+ */
134
+ export function createUploadCollectionConfig(slug, fields, uploadOptions, options) {
135
+ return {
136
+ schemaVersion: COLLECTION_SCHEMA_VERSION,
137
+ slug,
138
+ fields,
139
+ upload: uploadOptions ?? {},
140
+ timestamps: true,
141
+ ...options,
142
+ };
143
+ }
144
+ //# sourceMappingURL=collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/cms/collection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAoC,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE5F,OAAO,EAEL,yBAAyB,EAEzB,yBAAyB,GAE1B,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAkC,cAAc,CAAC;IAC9E,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,yBAAyB;IACjC,WAAW,EAAE,mCAAmC;IAChD,OAAO,EAAE,qDAAqD;IAC9D,IAAI,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC;CACtC,CAAC,CAAA;AAQF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC;AAED,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,MAAe,EACf,OAA4D;IAE5D,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,IAAI;QACJ,MAAM;QACN,UAAU,EAAE,IAAI;QAChB,GAAG,OAAO;KACX,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,IAAY,EACZ,MAAe,EACf,WAAwB,EACxB,OAAqE;IAErE,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,IAAI;QACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC;QACnF,IAAI,EAAE,WAAW,IAAI,EAAE;QACvB,UAAU,EAAE,IAAI;QAChB,GAAG,OAAO;KACX,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAY,EACZ,MAAe,EACf,aAA4B,EAC5B,OAAuE;IAEvE,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,aAAa,IAAI,EAAE;QAC3B,UAAU,EAAE,IAAI;QAChB,GAAG,OAAO;KACX,CAAA;AACH,CAAC"}