@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 @@
1
+ {"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../../src/entities/price.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Price Schema
3
+ *
4
+ * Prices represent Stripe-backed pricing information for products.
5
+ * They support various pricing models (one-time, recurring, tiered) and
6
+ * integrate with RevealUI's content management for pricing pages.
7
+ *
8
+ * This schema provides:
9
+ * - Stripe price validation (price_xxx format)
10
+ * - JSON price data validation
11
+ * - Business rules (published prices require valid Stripe data)
12
+ * - Type-safe relationship handling
13
+ * - Runtime validation with Zod
14
+ */
15
+ import { z } from 'zod/v4';
16
+ import { createContract } from '../foundation/contract.js';
17
+ import { DualEntitySchema } from '../representation/index.js';
18
+ // =============================================================================
19
+ // Schema Version
20
+ // =============================================================================
21
+ export const PRICE_SCHEMA_VERSION = 1;
22
+ // =============================================================================
23
+ // Stripe Price Format
24
+ // =============================================================================
25
+ /**
26
+ * Stripe Price ID format: price_xxxxx
27
+ * @example "price_1MowQVLkdIwHu7ixraBm864M"
28
+ */
29
+ export const StripePriceIDSchema = z
30
+ .string()
31
+ .regex(/^price_[a-zA-Z0-9]+$/, {
32
+ message: 'Stripe Price ID must match format: price_xxxxx',
33
+ })
34
+ .min(14) // price_ + minimum ID length
35
+ .max(100);
36
+ // =============================================================================
37
+ // Stripe Price Data
38
+ // =============================================================================
39
+ /**
40
+ * Stripe Price object structure (subset of fields from Stripe API)
41
+ * Stored as JSON in priceJSON field
42
+ */
43
+ export const StripePriceDataSchema = z.object({
44
+ id: z.string(),
45
+ object: z.literal('price'),
46
+ active: z.boolean().optional(),
47
+ currency: z.string().length(3).toLowerCase(), // ISO 4217 currency code
48
+ unit_amount: z.number().int().nonnegative().nullable(), // Amount in cents
49
+ unit_amount_decimal: z.string().optional(),
50
+ type: z.enum(['one_time', 'recurring']).optional(),
51
+ recurring: z
52
+ .object({
53
+ interval: z.enum(['day', 'week', 'month', 'year']),
54
+ interval_count: z.number().int().positive(),
55
+ trial_period_days: z.number().int().nonnegative().optional(),
56
+ })
57
+ .optional(),
58
+ product: z.string().optional(), // Stripe product ID
59
+ metadata: z.record(z.string(), z.string()).optional(),
60
+ // Tiers for tiered pricing
61
+ tiers: z
62
+ .array(z.object({
63
+ flat_amount: z.number().int().nonnegative().nullable().optional(),
64
+ flat_amount_decimal: z.string().optional(),
65
+ unit_amount: z.number().int().nonnegative().nullable().optional(),
66
+ unit_amount_decimal: z.string().optional(),
67
+ up_to: z.union([z.number().int().positive(), z.literal('inf')]).optional(),
68
+ }))
69
+ .optional(),
70
+ });
71
+ // =============================================================================
72
+ // Price Status
73
+ // =============================================================================
74
+ export const PriceStatusSchema = z.enum(['draft', 'published']);
75
+ // =============================================================================
76
+ // Content Blocks (simplified for now)
77
+ // =============================================================================
78
+ /**
79
+ * Simplified block schema for price content
80
+ * In production, this would reference the full block schema
81
+ */
82
+ const PriceBlockSchema = z
83
+ .object({
84
+ blockType: z.string(),
85
+ blockName: z.string().optional(),
86
+ // Additional block fields would go here
87
+ })
88
+ .passthrough(); // Allow additional properties
89
+ // =============================================================================
90
+ // Price Base Schema (without circular reference)
91
+ // =============================================================================
92
+ // Base object schema without refinements (for extending)
93
+ const PriceObjectSchema = DualEntitySchema.extend({
94
+ /** Schema version for migrations */
95
+ schemaVersion: z.number().int().default(PRICE_SCHEMA_VERSION),
96
+ /** Numeric ID (from CMS) */
97
+ id: z.number().int().positive(),
98
+ /** Price title for admin display */
99
+ title: z.string().min(1).max(200),
100
+ /** Published date */
101
+ publishedOn: z.string().datetime().nullable().optional(),
102
+ /** Content layout blocks */
103
+ layout: z.array(PriceBlockSchema).nullable().optional(),
104
+ /** Stripe Price ID (validated format) */
105
+ stripePriceID: StripePriceIDSchema.nullable().optional(),
106
+ /** Stripe price data (JSON string) */
107
+ priceJSON: z
108
+ .string()
109
+ .nullable()
110
+ .optional()
111
+ .transform((val) => {
112
+ if (!val)
113
+ return null;
114
+ try {
115
+ return JSON.parse(val);
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ })
121
+ .pipe(StripePriceDataSchema.nullable()),
122
+ /** Enable paywall for this price */
123
+ enablePaywall: z.boolean().nullable().optional(),
124
+ /** Paywall content blocks */
125
+ paywall: z.array(PriceBlockSchema).nullable().optional(),
126
+ /** Categories (populated or IDs) */
127
+ categories: z
128
+ .array(z.union([z.number().int().positive(), z.object({}).passthrough()]))
129
+ .nullable()
130
+ .optional(),
131
+ /** Related prices (populated or IDs) */
132
+ relatedPrices: z
133
+ .array(z.union([z.number().int().positive(), z.object({}).passthrough()]))
134
+ .nullable()
135
+ .optional(),
136
+ /** Skip Stripe sync flag */
137
+ skipSync: z.boolean().nullable().optional(),
138
+ /** Timestamps */
139
+ updatedAt: z.string().datetime(),
140
+ createdAt: z.string().datetime(),
141
+ /** CMS status */
142
+ _status: PriceStatusSchema.nullable().optional(),
143
+ });
144
+ // Full schema with business rule refinements
145
+ const PriceBaseSchema = PriceObjectSchema.refine((data) => {
146
+ // Business rule: published prices must have a valid Stripe price
147
+ if (data._status === 'published') {
148
+ return !!data.stripePriceID;
149
+ }
150
+ return true;
151
+ }, {
152
+ message: 'Published prices must have a valid Stripe Price ID',
153
+ path: ['stripePriceID'],
154
+ }).refine((data) => {
155
+ // Business rule: if priceJSON exists, it should be valid
156
+ if (data.priceJSON && typeof data.priceJSON === 'object') {
157
+ return data.priceJSON.id === data.stripePriceID;
158
+ }
159
+ return true;
160
+ }, {
161
+ message: 'Price JSON must match the configured Stripe Price ID',
162
+ path: ['priceJSON'],
163
+ });
164
+ /** Main schema export (alias for PriceBaseSchema) */
165
+ export const PriceSchema = PriceBaseSchema;
166
+ // =============================================================================
167
+ // Create Price Input
168
+ // =============================================================================
169
+ export const CreatePriceInputSchema = z.object({
170
+ title: z.string().min(1).max(200),
171
+ stripePriceID: StripePriceIDSchema.optional(),
172
+ enablePaywall: z.boolean().optional(),
173
+ categories: z.array(z.number().int().positive()).optional(),
174
+ relatedPrices: z.array(z.number().int().positive()).optional(),
175
+ _status: PriceStatusSchema.optional(),
176
+ });
177
+ // =============================================================================
178
+ // Update Price Input
179
+ // =============================================================================
180
+ export const UpdatePriceInputSchema = CreatePriceInputSchema.partial();
181
+ // =============================================================================
182
+ // Price with Populated Relationships
183
+ // =============================================================================
184
+ /**
185
+ * Price with categories populated
186
+ */
187
+ export const PriceWithCategoriesSchema = PriceObjectSchema.extend({
188
+ categories: z.array(z.object({ id: z.number(), name: z.string() }).passthrough()).nullable(),
189
+ });
190
+ /**
191
+ * Price with all relationships populated
192
+ */
193
+ export const PriceWithRelatedSchema = PriceObjectSchema.extend({
194
+ categories: z.array(z.object({ id: z.number(), name: z.string() }).passthrough()).nullable(),
195
+ relatedPrices: z
196
+ .array(z.object({
197
+ id: z.number(),
198
+ title: z.string(),
199
+ stripePriceID: z.string().nullable(),
200
+ }))
201
+ .nullable(),
202
+ });
203
+ // =============================================================================
204
+ // Type Guards
205
+ // =============================================================================
206
+ /**
207
+ * Check if price has a valid Stripe price configured
208
+ */
209
+ export function hasStripePrice(price) {
210
+ return !!price.stripePriceID && !!price.priceJSON && price.priceJSON !== null;
211
+ }
212
+ /**
213
+ * Check if price is published and active
214
+ */
215
+ export function isPublishedPrice(price) {
216
+ return price._status === 'published' && hasStripePrice(price);
217
+ }
218
+ /**
219
+ * Check if price is recurring (subscription)
220
+ */
221
+ export function isRecurringPrice(price) {
222
+ if (!hasStripePrice(price))
223
+ return false;
224
+ return price.priceJSON.type === 'recurring';
225
+ }
226
+ /**
227
+ * Check if price is one-time payment
228
+ */
229
+ export function isOneTimePrice(price) {
230
+ if (!hasStripePrice(price))
231
+ return false;
232
+ return price.priceJSON.type === 'one_time';
233
+ }
234
+ /**
235
+ * Check if price has tiered pricing
236
+ */
237
+ export function hasTieredPricing(price) {
238
+ if (!hasStripePrice(price))
239
+ return false;
240
+ return !!price.priceJSON.tiers && price.priceJSON.tiers.length > 0;
241
+ }
242
+ // =============================================================================
243
+ // Price Formatting Utilities
244
+ // =============================================================================
245
+ /**
246
+ * Format price amount for display
247
+ * @param amount - Amount in cents
248
+ * @param currency - ISO 4217 currency code
249
+ * @returns Formatted price string (e.g., "$10.00")
250
+ */
251
+ export function formatPriceAmount(amount, currency) {
252
+ const formatter = new Intl.NumberFormat('en-US', {
253
+ style: 'currency',
254
+ currency: currency.toUpperCase(),
255
+ minimumFractionDigits: 2,
256
+ maximumFractionDigits: 2,
257
+ });
258
+ return formatter.format(amount / 100);
259
+ }
260
+ /**
261
+ * Get display amount from price
262
+ */
263
+ export function getDisplayAmount(price) {
264
+ if (!hasStripePrice(price))
265
+ return null;
266
+ const amount = price.priceJSON.unit_amount;
267
+ if (amount === null || amount === undefined)
268
+ return null;
269
+ return formatPriceAmount(amount, price.priceJSON.currency);
270
+ }
271
+ /**
272
+ * Get interval description for recurring prices
273
+ * @example "monthly", "yearly", "every 3 months"
274
+ */
275
+ export function getIntervalDescription(price) {
276
+ if (!(isRecurringPrice(price) && price.priceJSON))
277
+ return null;
278
+ const recurring = price.priceJSON.recurring;
279
+ if (!recurring)
280
+ return null;
281
+ const { interval, interval_count } = recurring;
282
+ if (interval_count === 1) {
283
+ return `${interval}ly`;
284
+ }
285
+ return `every ${interval_count} ${interval}s`;
286
+ }
287
+ // =============================================================================
288
+ // Contracts
289
+ // =============================================================================
290
+ export const PriceContract = createContract({
291
+ name: 'Price',
292
+ version: '1',
293
+ schema: PriceSchema,
294
+ description: 'Stripe-backed price entity with content management',
295
+ });
296
+ export const CreatePriceContract = createContract({
297
+ name: 'CreatePrice',
298
+ version: '1',
299
+ schema: CreatePriceInputSchema,
300
+ description: 'Input contract for creating a new price',
301
+ });
302
+ export const UpdatePriceContract = createContract({
303
+ name: 'UpdatePrice',
304
+ version: '1',
305
+ schema: UpdatePriceInputSchema,
306
+ description: 'Input contract for updating an existing price',
307
+ });
308
+ //# sourceMappingURL=price.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/entities/price.ts"],"names":[],"mappings":"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"}