@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.
- package/LICENSE +22 -0
- package/README.md +160 -0
- package/dist/a2a/index.d.ts +383 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +276 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/actions/action-validator.d.ts +48 -0
- package/dist/actions/action-validator.d.ts.map +1 -0
- package/dist/actions/action-validator.js +288 -0
- package/dist/actions/action-validator.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +7 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/agents/index.d.ts +628 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +511 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/types.d.ts +22 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/api/auth.d.ts +60 -0
- package/dist/api/auth.d.ts.map +1 -0
- package/dist/api/auth.js +84 -0
- package/dist/api/auth.js.map +1 -0
- package/dist/api/chat.d.ts +45 -0
- package/dist/api/chat.d.ts.map +1 -0
- package/dist/api/chat.js +55 -0
- package/dist/api/chat.js.map +1 -0
- package/dist/api/gdpr.d.ts +39 -0
- package/dist/api/gdpr.d.ts.map +1 -0
- package/dist/api/gdpr.js +53 -0
- package/dist/api/gdpr.js.map +1 -0
- package/dist/cms/collection.d.ts +108 -0
- package/dist/cms/collection.d.ts.map +1 -0
- package/dist/cms/collection.js +144 -0
- package/dist/cms/collection.js.map +1 -0
- package/dist/cms/compat.d.ts +128 -0
- package/dist/cms/compat.d.ts.map +1 -0
- package/dist/cms/compat.js +141 -0
- package/dist/cms/compat.js.map +1 -0
- package/dist/cms/config-contract.d.ts +278 -0
- package/dist/cms/config-contract.d.ts.map +1 -0
- package/dist/cms/config-contract.js +220 -0
- package/dist/cms/config-contract.js.map +1 -0
- package/dist/cms/config.d.ts +351 -0
- package/dist/cms/config.d.ts.map +1 -0
- package/dist/cms/config.js +50 -0
- package/dist/cms/config.js.map +1 -0
- package/dist/cms/errors.d.ts +122 -0
- package/dist/cms/errors.d.ts.map +1 -0
- package/dist/cms/errors.js +163 -0
- package/dist/cms/errors.js.map +1 -0
- package/dist/cms/extensibility.d.ts +211 -0
- package/dist/cms/extensibility.d.ts.map +1 -0
- package/dist/cms/extensibility.js +313 -0
- package/dist/cms/extensibility.js.map +1 -0
- package/dist/cms/field.d.ts +69 -0
- package/dist/cms/field.d.ts.map +1 -0
- package/dist/cms/field.js +94 -0
- package/dist/cms/field.js.map +1 -0
- package/dist/cms/functions.d.ts +466 -0
- package/dist/cms/functions.d.ts.map +1 -0
- package/dist/cms/functions.js +19 -0
- package/dist/cms/functions.js.map +1 -0
- package/dist/cms/global.d.ts +45 -0
- package/dist/cms/global.d.ts.map +1 -0
- package/dist/cms/global.js +62 -0
- package/dist/cms/global.js.map +1 -0
- package/dist/cms/index.d.ts +23 -0
- package/dist/cms/index.d.ts.map +1 -0
- package/dist/cms/index.js +42 -0
- package/dist/cms/index.js.map +1 -0
- package/dist/cms/structure.d.ts +1601 -0
- package/dist/cms/structure.d.ts.map +1 -0
- package/dist/cms/structure.js +757 -0
- package/dist/cms/structure.js.map +1 -0
- package/dist/content/index.d.ts +1542 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +522 -0
- package/dist/content/index.js.map +1 -0
- package/dist/database/bridge.d.ts +177 -0
- package/dist/database/bridge.d.ts.map +1 -0
- package/dist/database/bridge.js +139 -0
- package/dist/database/bridge.js.map +1 -0
- package/dist/database/index.d.ts +8 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +9 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/type-bridge.d.ts +178 -0
- package/dist/database/type-bridge.d.ts.map +1 -0
- package/dist/database/type-bridge.js +154 -0
- package/dist/database/type-bridge.js.map +1 -0
- package/dist/entities/agent-context.d.ts +280 -0
- package/dist/entities/agent-context.d.ts.map +1 -0
- package/dist/entities/agent-context.js +390 -0
- package/dist/entities/agent-context.js.map +1 -0
- package/dist/entities/agent-memory.d.ts +661 -0
- package/dist/entities/agent-memory.d.ts.map +1 -0
- package/dist/entities/agent-memory.js +544 -0
- package/dist/entities/agent-memory.js.map +1 -0
- package/dist/entities/board.d.ts +95 -0
- package/dist/entities/board.d.ts.map +1 -0
- package/dist/entities/board.js +99 -0
- package/dist/entities/board.js.map +1 -0
- package/dist/entities/code-provenance.d.ts +270 -0
- package/dist/entities/code-provenance.d.ts.map +1 -0
- package/dist/entities/code-provenance.js +339 -0
- package/dist/entities/code-provenance.js.map +1 -0
- package/dist/entities/index.d.ts +22 -0
- package/dist/entities/index.d.ts.map +1 -0
- package/dist/entities/index.js +22 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/entities/media.d.ts +485 -0
- package/dist/entities/media.d.ts.map +1 -0
- package/dist/entities/media.js +606 -0
- package/dist/entities/media.js.map +1 -0
- package/dist/entities/page-revision.d.ts +390 -0
- package/dist/entities/page-revision.d.ts.map +1 -0
- package/dist/entities/page-revision.js +406 -0
- package/dist/entities/page-revision.js.map +1 -0
- package/dist/entities/page.d.ts +2349 -0
- package/dist/entities/page.d.ts.map +1 -0
- package/dist/entities/page.js +377 -0
- package/dist/entities/page.js.map +1 -0
- package/dist/entities/post.d.ts +619 -0
- package/dist/entities/post.d.ts.map +1 -0
- package/dist/entities/post.js +555 -0
- package/dist/entities/post.js.map +1 -0
- package/dist/entities/price.d.ts +772 -0
- package/dist/entities/price.d.ts.map +1 -0
- package/dist/entities/price.js +308 -0
- package/dist/entities/price.js.map +1 -0
- package/dist/entities/product.d.ts +753 -0
- package/dist/entities/product.d.ts.map +1 -0
- package/dist/entities/product.js +307 -0
- package/dist/entities/product.js.map +1 -0
- package/dist/entities/session.d.ts +222 -0
- package/dist/entities/session.d.ts.map +1 -0
- package/dist/entities/session.js +253 -0
- package/dist/entities/session.js.map +1 -0
- package/dist/entities/site.d.ts +387 -0
- package/dist/entities/site.d.ts.map +1 -0
- package/dist/entities/site.js +348 -0
- package/dist/entities/site.js.map +1 -0
- package/dist/entities/ticket-comment.d.ts +49 -0
- package/dist/entities/ticket-comment.d.ts.map +1 -0
- package/dist/entities/ticket-comment.js +58 -0
- package/dist/entities/ticket-comment.js.map +1 -0
- package/dist/entities/ticket-label.d.ts +64 -0
- package/dist/entities/ticket-label.d.ts.map +1 -0
- package/dist/entities/ticket-label.js +77 -0
- package/dist/entities/ticket-label.js.map +1 -0
- package/dist/entities/ticket.d.ts +204 -0
- package/dist/entities/ticket.d.ts.map +1 -0
- package/dist/entities/ticket.js +205 -0
- package/dist/entities/ticket.js.map +1 -0
- package/dist/entities/user.d.ts +336 -0
- package/dist/entities/user.d.ts.map +1 -0
- package/dist/entities/user.js +255 -0
- package/dist/entities/user.js.map +1 -0
- package/dist/foundation/contract.d.ts +221 -0
- package/dist/foundation/contract.d.ts.map +1 -0
- package/dist/foundation/contract.js +133 -0
- package/dist/foundation/contract.js.map +1 -0
- package/dist/foundation/index.d.ts +7 -0
- package/dist/foundation/index.d.ts.map +1 -0
- package/dist/foundation/index.js +7 -0
- package/dist/foundation/index.js.map +1 -0
- package/dist/generated/contracts.d.ts +1514 -0
- package/dist/generated/contracts.d.ts.map +1 -0
- package/dist/generated/contracts.js +959 -0
- package/dist/generated/contracts.js.map +1 -0
- package/dist/generated/database.d.ts +48 -0
- package/dist/generated/database.d.ts.map +1 -0
- package/dist/generated/database.js +17 -0
- package/dist/generated/database.js.map +1 -0
- package/dist/generated/zod-schemas.d.ts +14793 -0
- package/dist/generated/zod-schemas.d.ts.map +1 -0
- package/dist/generated/zod-schemas.js +547 -0
- package/dist/generated/zod-schemas.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/representation/index.d.ts +304 -0
- package/dist/representation/index.d.ts.map +1 -0
- package/dist/representation/index.js +280 -0
- package/dist/representation/index.js.map +1 -0
- 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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"}
|