@coursebuilder/server 0.1.0-canary.0.0c9beb2ae
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 +21 -0
- package/dist/actions/checkout.d.ts +6 -0
- package/dist/actions/checkout.js +9 -0
- package/dist/actions/checkout.js.map +1 -0
- package/dist/actions/claimed.d.ts +6 -0
- package/dist/actions/claimed.js +8 -0
- package/dist/actions/claimed.js.map +1 -0
- package/dist/actions/create-magic-link.d.ts +6 -0
- package/dist/actions/create-magic-link.js +9 -0
- package/dist/actions/create-magic-link.js.map +1 -0
- package/dist/actions/index.d.ts +11 -0
- package/dist/actions/index.js +18 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/prices-coupon-for-code.d.ts +6 -0
- package/dist/actions/prices-coupon-for-code.js +63 -0
- package/dist/actions/prices-coupon-for-code.js.map +1 -0
- package/dist/actions/prices-formatted.d.ts +6 -0
- package/dist/actions/prices-formatted.js +8 -0
- package/dist/actions/prices-formatted.js.map +1 -0
- package/dist/actions/process-refund.d.ts +1 -0
- package/dist/actions/process-refund.js +8 -0
- package/dist/actions/process-refund.js.map +1 -0
- package/dist/actions/redeem.d.ts +1 -0
- package/dist/actions/redeem.js +8 -0
- package/dist/actions/redeem.js.map +1 -0
- package/dist/actions/transfer-purchase.d.ts +1 -0
- package/dist/actions/transfer-purchase.js +8 -0
- package/dist/actions/transfer-purchase.js.map +1 -0
- package/dist/actions/user-lookup.d.ts +6 -0
- package/dist/actions/user-lookup.js +9 -0
- package/dist/actions/user-lookup.js.map +1 -0
- package/dist/adapter-BtDS6LDw.d.ts +9 -0
- package/dist/chunk-22AMOZYZ.js +67 -0
- package/dist/chunk-22AMOZYZ.js.map +1 -0
- package/dist/chunk-4EQQSW57.js +32 -0
- package/dist/chunk-4EQQSW57.js.map +1 -0
- package/dist/chunk-4LZZLN6T.js +52 -0
- package/dist/chunk-4LZZLN6T.js.map +1 -0
- package/dist/chunk-4QQA3TC2.js +29 -0
- package/dist/chunk-4QQA3TC2.js.map +1 -0
- package/dist/chunk-4TSEPUSC.js +160 -0
- package/dist/chunk-4TSEPUSC.js.map +1 -0
- package/dist/chunk-5O4UO4IR.js +93 -0
- package/dist/chunk-5O4UO4IR.js.map +1 -0
- package/dist/chunk-7FCQOLKL.js +26 -0
- package/dist/chunk-7FCQOLKL.js.map +1 -0
- package/dist/chunk-AZLUMIIF.js +8 -0
- package/dist/chunk-AZLUMIIF.js.map +1 -0
- package/dist/chunk-E6HV6TNI.js +38 -0
- package/dist/chunk-E6HV6TNI.js.map +1 -0
- package/dist/chunk-ECNJPNPU.js +54 -0
- package/dist/chunk-ECNJPNPU.js.map +1 -0
- package/dist/chunk-F3KUYN5I.js +111 -0
- package/dist/chunk-F3KUYN5I.js.map +1 -0
- package/dist/chunk-G63YAJF2.js +107 -0
- package/dist/chunk-G63YAJF2.js.map +1 -0
- package/dist/chunk-JFR7XO72.js +7 -0
- package/dist/chunk-JFR7XO72.js.map +1 -0
- package/dist/chunk-KNC7QVGZ.js +26 -0
- package/dist/chunk-KNC7QVGZ.js.map +1 -0
- package/dist/chunk-ODSSRMD2.js +270 -0
- package/dist/chunk-ODSSRMD2.js.map +1 -0
- package/dist/chunk-VEKYIR7I.js +26 -0
- package/dist/chunk-VEKYIR7I.js.map +1 -0
- package/dist/chunk-W7YAT4NR.js +12 -0
- package/dist/chunk-W7YAT4NR.js.map +1 -0
- package/dist/chunk-WGAPYIUP.js +56 -0
- package/dist/chunk-WGAPYIUP.js.map +1 -0
- package/dist/chunk-WYNH2AWD.js +7 -0
- package/dist/chunk-WYNH2AWD.js.map +1 -0
- package/dist/chunk-Y5X5J55Z.js +384 -0
- package/dist/chunk-Y5X5J55Z.js.map +1 -0
- package/dist/chunk-YFLGJIMA.js +216 -0
- package/dist/chunk-YFLGJIMA.js.map +1 -0
- package/dist/chunk-ZFZNN4E5.js +7 -0
- package/dist/chunk-ZFZNN4E5.js.map +1 -0
- package/dist/create-inngest-middleware.d.ts +635 -0
- package/dist/create-inngest-middleware.js +12 -0
- package/dist/create-inngest-middleware.js.map +1 -0
- package/dist/http-router.d.ts +20 -0
- package/dist/http-router.js +24 -0
- package/dist/http-router.js.map +1 -0
- package/dist/http.d.ts +38 -0
- package/dist/http.js +32 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +365 -0
- package/dist/index.js.map +1 -0
- package/dist/magic-string.es-ENO43NON.js +1389 -0
- package/dist/magic-string.es-ENO43NON.js.map +1 -0
- package/dist/runtime/actions.d.ts +5 -0
- package/dist/runtime/actions.js +8 -0
- package/dist/runtime/actions.js.map +1 -0
- package/dist/runtime/assert.d.ts +15 -0
- package/dist/runtime/assert.js +8 -0
- package/dist/runtime/assert.js.map +1 -0
- package/dist/runtime/cookie.d.ts +8 -0
- package/dist/runtime/cookie.js +8 -0
- package/dist/runtime/cookie.js.map +1 -0
- package/dist/runtime/env.d.ts +9 -0
- package/dist/runtime/env.js +11 -0
- package/dist/runtime/env.js.map +1 -0
- package/dist/runtime/env.test.d.ts +2 -0
- package/dist/runtime/env.test.js +14956 -0
- package/dist/runtime/env.test.js.map +1 -0
- package/dist/runtime/init.d.ts +26 -0
- package/dist/runtime/init.js +14 -0
- package/dist/runtime/init.js.map +1 -0
- package/dist/runtime/logger.d.ts +4 -0
- package/dist/runtime/logger.js +10 -0
- package/dist/runtime/logger.js.map +1 -0
- package/dist/runtime/merge.d.ts +4 -0
- package/dist/runtime/merge.js +8 -0
- package/dist/runtime/merge.js.map +1 -0
- package/dist/runtime/providers.d.ts +21 -0
- package/dist/runtime/providers.js +9 -0
- package/dist/runtime/providers.js.map +1 -0
- package/dist/runtime/web.d.ts +29 -0
- package/dist/runtime/web.js +16 -0
- package/dist/runtime/web.js.map +1 -0
- package/package.json +65 -0
- package/src/actions/actions.test.ts +232 -0
- package/src/actions/checkout.ts +160 -0
- package/src/actions/claimed.ts +40 -0
- package/src/actions/create-magic-link.ts +78 -0
- package/src/actions/index.ts +401 -0
- package/src/actions/prices-coupon-for-code.ts +91 -0
- package/src/actions/prices-formatted.ts +313 -0
- package/src/actions/process-refund.ts +2 -0
- package/src/actions/redeem.ts +2 -0
- package/src/actions/transfer-purchase.ts +2 -0
- package/src/actions/user-lookup.ts +37 -0
- package/src/adapter.ts +28 -0
- package/src/create-inngest-middleware.ts +157 -0
- package/src/http-actions.ts +29 -0
- package/src/http-router.ts +79 -0
- package/src/http.test.ts +46 -0
- package/src/http.ts +83 -0
- package/src/index.test.ts +21 -0
- package/src/index.ts +44 -0
- package/src/mock-adapter.ts +398 -0
- package/src/mock-payment-provider.ts +56 -0
- package/src/resource-chat.ts +371 -0
- package/src/runtime/actions.ts +25 -0
- package/src/runtime/assert.ts +55 -0
- package/src/runtime/cookie.ts +12 -0
- package/src/runtime/env.test.ts +49 -0
- package/src/runtime/env.ts +63 -0
- package/src/runtime/init.ts +112 -0
- package/src/runtime/logger.ts +6 -0
- package/src/runtime/merge.ts +25 -0
- package/src/runtime/providers.ts +38 -0
- package/src/runtime/web.ts +199 -0
- package/src/streaming-chat-prompt-executor.ts +43 -0
- package/src/type-contracts.test.ts +167 -0
- package/src/web-body-parse.test.ts +55 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
// src/create-inngest-middleware.ts
|
|
2
|
+
import {
|
|
3
|
+
EventSchemas,
|
|
4
|
+
Inngest,
|
|
5
|
+
InngestMiddleware
|
|
6
|
+
} from "inngest";
|
|
7
|
+
|
|
8
|
+
// src/mock-adapter.ts
|
|
9
|
+
var mockServerAdapter = {
|
|
10
|
+
client: null,
|
|
11
|
+
getPersonalOrganization: async () => null,
|
|
12
|
+
createPersonalOrganization: async () => {
|
|
13
|
+
throw new Error("Method not implemented.");
|
|
14
|
+
},
|
|
15
|
+
transferPurchaseToUser: async () => {
|
|
16
|
+
return null;
|
|
17
|
+
},
|
|
18
|
+
redeemFullPriceCoupon: async () => {
|
|
19
|
+
return {};
|
|
20
|
+
},
|
|
21
|
+
archiveProduct: async (productId) => {
|
|
22
|
+
return {};
|
|
23
|
+
},
|
|
24
|
+
updateProduct: async (product) => {
|
|
25
|
+
return {};
|
|
26
|
+
},
|
|
27
|
+
createProduct: async (product) => {
|
|
28
|
+
return {};
|
|
29
|
+
},
|
|
30
|
+
createPurchaseTransfer: async () => {
|
|
31
|
+
return Promise.resolve();
|
|
32
|
+
},
|
|
33
|
+
createCoupon: async (input) => {
|
|
34
|
+
return [];
|
|
35
|
+
},
|
|
36
|
+
addResourceToProduct: async (options) => {
|
|
37
|
+
return null;
|
|
38
|
+
},
|
|
39
|
+
incrementCouponUsedCount(_) {
|
|
40
|
+
return Promise.resolve();
|
|
41
|
+
},
|
|
42
|
+
getExistingNonBulkValidPurchasesOfProduct: async () => {
|
|
43
|
+
return [];
|
|
44
|
+
},
|
|
45
|
+
getMerchantPriceForProductId: async (productId) => null,
|
|
46
|
+
getMerchantProductForProductId: async (productId) => null,
|
|
47
|
+
getMerchantAccount: async () => null,
|
|
48
|
+
createMerchantCustomer: async () => null,
|
|
49
|
+
createMerchantCoupon: async () => ({}),
|
|
50
|
+
getMerchantCustomerForUserId: async () => null,
|
|
51
|
+
getUpgradableProducts: async () => [],
|
|
52
|
+
createPurchase: async (options) => {
|
|
53
|
+
throw new Error("Method not implemented.");
|
|
54
|
+
},
|
|
55
|
+
availableUpgradesForProduct(purchases, productId) {
|
|
56
|
+
return Promise.resolve([]);
|
|
57
|
+
},
|
|
58
|
+
clearLessonProgressForUser(options) {
|
|
59
|
+
return Promise.resolve(void 0);
|
|
60
|
+
},
|
|
61
|
+
completeLessonProgressForUser(options) {
|
|
62
|
+
return Promise.resolve(null);
|
|
63
|
+
},
|
|
64
|
+
couponForIdOrCode(options) {
|
|
65
|
+
return Promise.resolve(null);
|
|
66
|
+
},
|
|
67
|
+
createMerchantChargeAndPurchase(options) {
|
|
68
|
+
throw new Error("Method not implemented.");
|
|
69
|
+
},
|
|
70
|
+
findOrCreateMerchantCustomer(options) {
|
|
71
|
+
return Promise.resolve(null);
|
|
72
|
+
},
|
|
73
|
+
createMerchantEvent(options) {
|
|
74
|
+
throw new Error("Method not implemented.");
|
|
75
|
+
},
|
|
76
|
+
getMerchantEventByIdentifier(identifier) {
|
|
77
|
+
return Promise.resolve(null);
|
|
78
|
+
},
|
|
79
|
+
getMerchantEventsByAccount(merchantAccountId) {
|
|
80
|
+
return Promise.resolve([]);
|
|
81
|
+
},
|
|
82
|
+
findOrCreateUser(email, name) {
|
|
83
|
+
throw new Error("Method not implemented.");
|
|
84
|
+
},
|
|
85
|
+
getCoupon(couponIdOrCode) {
|
|
86
|
+
return Promise.resolve(null);
|
|
87
|
+
},
|
|
88
|
+
getCouponWithBulkPurchases(couponId) {
|
|
89
|
+
return Promise.resolve(null);
|
|
90
|
+
},
|
|
91
|
+
getDefaultCoupon(productIds) {
|
|
92
|
+
return Promise.resolve(null);
|
|
93
|
+
},
|
|
94
|
+
getLessonProgressCountsByDate() {
|
|
95
|
+
return Promise.resolve([]);
|
|
96
|
+
},
|
|
97
|
+
getLessonProgressForUser(userId) {
|
|
98
|
+
return Promise.resolve([]);
|
|
99
|
+
},
|
|
100
|
+
getModuleProgressForUser(userId, moduleId) {
|
|
101
|
+
return Promise.resolve({
|
|
102
|
+
completedLessons: [],
|
|
103
|
+
nextResource: null,
|
|
104
|
+
percentCompleted: 0,
|
|
105
|
+
completedLessonsCount: 0,
|
|
106
|
+
totalLessonsCount: 0
|
|
107
|
+
});
|
|
108
|
+
},
|
|
109
|
+
getLessonProgresses() {
|
|
110
|
+
return Promise.resolve([]);
|
|
111
|
+
},
|
|
112
|
+
getMerchantCharge(merchantChargeId) {
|
|
113
|
+
return Promise.resolve(null);
|
|
114
|
+
},
|
|
115
|
+
getMerchantCouponForTypeAndPercent(params) {
|
|
116
|
+
return Promise.resolve(null);
|
|
117
|
+
},
|
|
118
|
+
getMerchantCouponsForTypeAndPercent(params) {
|
|
119
|
+
return Promise.resolve([]);
|
|
120
|
+
},
|
|
121
|
+
getMerchantCouponForTypeAndAmount(params) {
|
|
122
|
+
return Promise.resolve(null);
|
|
123
|
+
},
|
|
124
|
+
getMerchantCoupon(merchantCouponId) {
|
|
125
|
+
return Promise.resolve(null);
|
|
126
|
+
},
|
|
127
|
+
getMerchantProduct(stripeProductId) {
|
|
128
|
+
return Promise.resolve(null);
|
|
129
|
+
},
|
|
130
|
+
getPrice(productId) {
|
|
131
|
+
return Promise.resolve(null);
|
|
132
|
+
},
|
|
133
|
+
getPriceForProduct(productId) {
|
|
134
|
+
return Promise.resolve(null);
|
|
135
|
+
},
|
|
136
|
+
getProduct(productId, withResources = true) {
|
|
137
|
+
return Promise.resolve(null);
|
|
138
|
+
},
|
|
139
|
+
getProductResources(productId) {
|
|
140
|
+
return Promise.resolve(null);
|
|
141
|
+
},
|
|
142
|
+
getPurchaseCountForProduct(productId) {
|
|
143
|
+
return Promise.resolve(0);
|
|
144
|
+
},
|
|
145
|
+
getPurchase(purchaseId) {
|
|
146
|
+
return Promise.resolve(null);
|
|
147
|
+
},
|
|
148
|
+
getPurchaseDetails(purchaseId, userId) {
|
|
149
|
+
return Promise.resolve({ availableUpgrades: [] });
|
|
150
|
+
},
|
|
151
|
+
getPurchaseForStripeCharge(stripeChargeId) {
|
|
152
|
+
return Promise.resolve(null);
|
|
153
|
+
},
|
|
154
|
+
getPurchaseByCheckoutSessionId(checkoutSessionId) {
|
|
155
|
+
return Promise.resolve(null);
|
|
156
|
+
},
|
|
157
|
+
getPurchaseUserTransferById(options) {
|
|
158
|
+
return Promise.resolve(null);
|
|
159
|
+
},
|
|
160
|
+
getPurchaseWithUser(purchaseId) {
|
|
161
|
+
return Promise.resolve(null);
|
|
162
|
+
},
|
|
163
|
+
getUserWithPurchasersByEmail(email) {
|
|
164
|
+
return Promise.resolve(null);
|
|
165
|
+
},
|
|
166
|
+
getPurchasesForUser(userId) {
|
|
167
|
+
return Promise.resolve([]);
|
|
168
|
+
},
|
|
169
|
+
getEntitlementsForUser(params) {
|
|
170
|
+
return Promise.resolve([]);
|
|
171
|
+
},
|
|
172
|
+
getEntitlementTypeByName(name) {
|
|
173
|
+
return Promise.resolve(null);
|
|
174
|
+
},
|
|
175
|
+
getUserById(userId) {
|
|
176
|
+
return Promise.resolve(null);
|
|
177
|
+
},
|
|
178
|
+
pricesOfPurchasesTowardOneBundle(options) {
|
|
179
|
+
return Promise.resolve([]);
|
|
180
|
+
},
|
|
181
|
+
toggleLessonProgressForUser(options) {
|
|
182
|
+
return Promise.resolve(null);
|
|
183
|
+
},
|
|
184
|
+
transferPurchasesToNewUser(options) {
|
|
185
|
+
return Promise.resolve(void 0);
|
|
186
|
+
},
|
|
187
|
+
updatePurchaseStatusForCharge(chargeId, status) {
|
|
188
|
+
return Promise.resolve(void 0);
|
|
189
|
+
},
|
|
190
|
+
updatePurchaseUserTransferTransferState(options) {
|
|
191
|
+
return Promise.resolve(null);
|
|
192
|
+
},
|
|
193
|
+
addResourceToResource: async (options) => {
|
|
194
|
+
return {};
|
|
195
|
+
},
|
|
196
|
+
removeResourceFromResource: async (options) => {
|
|
197
|
+
return null;
|
|
198
|
+
},
|
|
199
|
+
createContentResource: async (resource) => {
|
|
200
|
+
return resource;
|
|
201
|
+
},
|
|
202
|
+
getEvent: async (_) => {
|
|
203
|
+
return null;
|
|
204
|
+
},
|
|
205
|
+
createEvent: async (_) => {
|
|
206
|
+
return null;
|
|
207
|
+
},
|
|
208
|
+
createEventSeries: async (_) => {
|
|
209
|
+
return { eventSeries: null, childEvents: [] };
|
|
210
|
+
},
|
|
211
|
+
createCohort: async (_) => {
|
|
212
|
+
return { cohort: null, product: void 0 };
|
|
213
|
+
},
|
|
214
|
+
createWorkshop: async (_) => {
|
|
215
|
+
return {
|
|
216
|
+
workshop: null,
|
|
217
|
+
sections: [],
|
|
218
|
+
lessons: [],
|
|
219
|
+
product: void 0
|
|
220
|
+
};
|
|
221
|
+
},
|
|
222
|
+
getContentResource: async (_) => {
|
|
223
|
+
return null;
|
|
224
|
+
},
|
|
225
|
+
getVideoResource: async (_) => {
|
|
226
|
+
return null;
|
|
227
|
+
},
|
|
228
|
+
getParentResourceOfVideoResource: async (_) => {
|
|
229
|
+
return null;
|
|
230
|
+
},
|
|
231
|
+
updateContentResourceFields(_) {
|
|
232
|
+
return null;
|
|
233
|
+
},
|
|
234
|
+
createOrganization: async () => null,
|
|
235
|
+
getOrganization: async () => null,
|
|
236
|
+
addMemberToOrganization: async () => null,
|
|
237
|
+
removeMemberFromOrganization: async () => void 0,
|
|
238
|
+
addRoleForMember: async () => void 0,
|
|
239
|
+
removeRoleForMember: async () => void 0,
|
|
240
|
+
getMembershipsForUser: async () => [],
|
|
241
|
+
getOrganizationMembers: async () => [],
|
|
242
|
+
getMerchantSubscription: async () => null,
|
|
243
|
+
createMerchantSubscription: async () => null,
|
|
244
|
+
updateMerchantSubscription: async () => null,
|
|
245
|
+
deleteMerchantSubscription: async () => void 0,
|
|
246
|
+
createMerchantSession: async () => Promise.resolve({}),
|
|
247
|
+
createSubscription: async () => null,
|
|
248
|
+
getSubscriptionForStripeId: async () => null,
|
|
249
|
+
updateSubscriptionStatus: async () => void 0,
|
|
250
|
+
getPurchasesForBulkCouponId: async () => []
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
// src/mock-payment-provider.ts
|
|
254
|
+
var mockPaymentsAdapter = {
|
|
255
|
+
getCouponPercentOff: async () => 0,
|
|
256
|
+
getCouponAmountOff: async () => 0,
|
|
257
|
+
createCoupon: async () => "mock-coupon-id",
|
|
258
|
+
createPromotionCode: async () => "mock-promotion-code-id",
|
|
259
|
+
createCheckoutSession: async () => "mock-checkout-session-id",
|
|
260
|
+
createCustomer: async () => "mock-customer-id",
|
|
261
|
+
verifyWebhookSignature: async () => true,
|
|
262
|
+
getCheckoutSession: async () => ({ id: "mock-checkout-session-id" }),
|
|
263
|
+
getCustomer: async () => ({ id: "mock-customer-id" }),
|
|
264
|
+
updateCustomer: async () => {
|
|
265
|
+
},
|
|
266
|
+
refundCharge: async () => ({}),
|
|
267
|
+
updateProduct: async () => {
|
|
268
|
+
},
|
|
269
|
+
updatePrice: async () => {
|
|
270
|
+
},
|
|
271
|
+
getProduct: async () => ({}),
|
|
272
|
+
getPrice: async () => ({}),
|
|
273
|
+
createPrice: async () => ({}),
|
|
274
|
+
createProduct: async () => ({}),
|
|
275
|
+
getSubscription: async () => ({}),
|
|
276
|
+
getBillingPortalUrl: async () => "mock-billing-portal-url",
|
|
277
|
+
updateSubscriptionItemQuantity: async () => ({})
|
|
278
|
+
};
|
|
279
|
+
var mockPaymentProvider = {
|
|
280
|
+
id: "mock-stripe",
|
|
281
|
+
name: "Mock Stripe",
|
|
282
|
+
type: "payment",
|
|
283
|
+
options: {
|
|
284
|
+
errorRedirectUrl: "mock-error-redirect-url",
|
|
285
|
+
cancelUrl: "mock-cancel-url",
|
|
286
|
+
baseSuccessUrl: "mock-base-success-url",
|
|
287
|
+
paymentsAdapter: mockPaymentsAdapter
|
|
288
|
+
},
|
|
289
|
+
getSubscriptionInfo: async () => ({}),
|
|
290
|
+
getPurchaseInfo: async () => ({}),
|
|
291
|
+
createCheckoutSession: async () => ({
|
|
292
|
+
redirect: "mock-checkout-session-id",
|
|
293
|
+
status: 303
|
|
294
|
+
}),
|
|
295
|
+
getCustomer: async () => ({ id: "mock-customer-id" }),
|
|
296
|
+
updateCustomer: async () => {
|
|
297
|
+
},
|
|
298
|
+
refundCharge: async () => ({}),
|
|
299
|
+
updateProduct: async () => {
|
|
300
|
+
},
|
|
301
|
+
updatePrice: async () => {
|
|
302
|
+
},
|
|
303
|
+
getProduct: async () => ({}),
|
|
304
|
+
getPrice: async () => ({}),
|
|
305
|
+
createPrice: async () => ({}),
|
|
306
|
+
createProduct: async () => ({}),
|
|
307
|
+
getSubscription: async () => ({}),
|
|
308
|
+
getBillingPortalUrl: async () => "mock-billing-portal-url"
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
// src/create-inngest-middleware.ts
|
|
312
|
+
import {
|
|
313
|
+
MockOpenAIProvider
|
|
314
|
+
} from "@coursebuilder/core/providers/openai";
|
|
315
|
+
import {
|
|
316
|
+
MockPartykitProvider
|
|
317
|
+
} from "@coursebuilder/core/providers/partykit";
|
|
318
|
+
import {
|
|
319
|
+
mockSlackProvider
|
|
320
|
+
} from "@coursebuilder/core/providers/slack";
|
|
321
|
+
var MockTranscriptionProvider = {
|
|
322
|
+
id: "mock-transcription",
|
|
323
|
+
name: "Mock Transcription",
|
|
324
|
+
type: "transcription",
|
|
325
|
+
options: {
|
|
326
|
+
apiKey: "mock-api-key",
|
|
327
|
+
callbackUrl: "mock-callback-url"
|
|
328
|
+
},
|
|
329
|
+
apiKey: "mock-api-key",
|
|
330
|
+
callbackUrl: "mock-callback-url",
|
|
331
|
+
getCallbackUrl: () => "mock-callback-url",
|
|
332
|
+
initiateTranscription: async () => ({ mock: "transcription" }),
|
|
333
|
+
handleCallback: () => ({
|
|
334
|
+
srt: "mock-srt",
|
|
335
|
+
transcript: "mock-transcript",
|
|
336
|
+
wordLevelSrt: "mock-word-level-srt"
|
|
337
|
+
})
|
|
338
|
+
};
|
|
339
|
+
var defineCourseBuilderFunctions = (functions) => functions;
|
|
340
|
+
var createInngestMiddleware = (context) => {
|
|
341
|
+
return new InngestMiddleware({
|
|
342
|
+
name: "Course Builder Middleware",
|
|
343
|
+
init() {
|
|
344
|
+
return {
|
|
345
|
+
onFunctionRun() {
|
|
346
|
+
return {
|
|
347
|
+
transformInput() {
|
|
348
|
+
return { ctx: context };
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
};
|
|
356
|
+
var schemas = new EventSchemas().fromRecord();
|
|
357
|
+
var coreInngest = new Inngest({
|
|
358
|
+
id: "core-inngest",
|
|
359
|
+
schemas,
|
|
360
|
+
middleware: [
|
|
361
|
+
createInngestMiddleware({
|
|
362
|
+
db: mockServerAdapter,
|
|
363
|
+
siteRootUrl: "",
|
|
364
|
+
partyKitRootUrl: "",
|
|
365
|
+
transcriptProvider: MockTranscriptionProvider,
|
|
366
|
+
openaiProvider: MockOpenAIProvider,
|
|
367
|
+
partyProvider: MockPartykitProvider,
|
|
368
|
+
paymentProvider: mockPaymentProvider,
|
|
369
|
+
emailProvider: {},
|
|
370
|
+
notificationProvider: mockSlackProvider,
|
|
371
|
+
getAuthConfig: () => ({}),
|
|
372
|
+
mediaUploadProvider: {
|
|
373
|
+
deleteFiles: async (_) => Promise.resolve({ success: true })
|
|
374
|
+
}
|
|
375
|
+
})
|
|
376
|
+
]
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
export {
|
|
380
|
+
defineCourseBuilderFunctions,
|
|
381
|
+
createInngestMiddleware,
|
|
382
|
+
coreInngest
|
|
383
|
+
};
|
|
384
|
+
//# sourceMappingURL=chunk-Y5X5J55Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/create-inngest-middleware.ts","../src/mock-adapter.ts","../src/mock-payment-provider.ts"],"sourcesContent":["import {\n\tEventSchemas,\n\tGetEvents,\n\tGetFunctionInput,\n\tHandler,\n\tInngest,\n\tInngestFunction,\n\tInngestMiddleware,\n} from 'inngest'\n\nimport type { ServerAdapter } from './adapter'\nimport { mockServerAdapter } from './mock-adapter'\nimport { mockPaymentProvider } from './mock-payment-provider'\nimport type {\n\tCourseBuilderAuthConfig,\n\tCourseBuilderEmailProvider,\n} from '@coursebuilder/core/auth'\nimport type { CourseBuilderCoreEvents } from '@coursebuilder/core/events'\nimport type { TranscriptionConfig } from '@coursebuilder/core/providers'\nimport {\n\tLlmProviderConfig,\n\tMockOpenAIProvider,\n} from '@coursebuilder/core/providers/openai'\nimport {\n\tMockPartykitProvider,\n\tPartyProviderConfig,\n} from '@coursebuilder/core/providers/partykit'\nimport {\n\tmockSlackProvider,\n\tNotificationProviderConfig,\n} from '@coursebuilder/core/providers/slack'\nimport { PaymentsProviderConfig } from '@coursebuilder/core/types'\n\nconst MockTranscriptionProvider: TranscriptionConfig = {\n\tid: 'mock-transcription',\n\tname: 'Mock Transcription',\n\ttype: 'transcription',\n\toptions: {\n\t\tapiKey: 'mock-api-key',\n\t\tcallbackUrl: 'mock-callback-url',\n\t},\n\tapiKey: 'mock-api-key',\n\tcallbackUrl: 'mock-callback-url',\n\tgetCallbackUrl: () => 'mock-callback-url',\n\tinitiateTranscription: async () => ({ mock: 'transcription' }),\n\thandleCallback: () => ({\n\t\tsrt: 'mock-srt',\n\t\ttranscript: 'mock-transcript',\n\t\twordLevelSrt: 'mock-word-level-srt',\n\t}),\n}\n\nexport interface CoreInngestContext {\n\tdb: ServerAdapter\n\tsiteRootUrl: string\n\ttranscriptProvider: TranscriptionConfig\n\topenaiProvider: LlmProviderConfig\n\tpartyProvider: PartyProviderConfig\n\tpaymentProvider?: PaymentsProviderConfig\n\temailProvider?: CourseBuilderEmailProvider\n\tnotificationProvider?: NotificationProviderConfig\n\tgetAuthConfig: () => CourseBuilderAuthConfig\n\tmediaUploadProvider: {\n\t\tdeleteFiles: (fileKey: string) => Promise<{ success: boolean }>\n\t}\n}\n\nexport type CoreInngestFunctionInput = GetFunctionInput<CoreInngest>\n\n/** A server composition input with a statically limited context and event. */\nexport type CourseBuilderHandlerInput<\n\tTContext extends Partial<CoreInngestContext>,\n\tTEventName extends Extract<keyof CourseBuilderCoreEvents, string>,\n\tTEvent extends CourseBuilderCoreEvents[TEventName] =\n\t\tCourseBuilderCoreEvents[TEventName],\n> = Omit<CoreInngestFunctionInput, keyof CoreInngestContext | 'event'> &\n\tTContext & {\n\t\tevent: TEvent\n\t}\n\nexport type CoreInngestFunctionInputFor<\n\tTContext extends Partial<CoreInngestContext>,\n\tTEventName extends Extract<keyof CourseBuilderCoreEvents, string>,\n\tTEvent extends CourseBuilderCoreEvents[TEventName] =\n\t\tCourseBuilderCoreEvents[TEventName],\n> = CourseBuilderHandlerInput<TContext, TEventName, TEvent>\n\nexport type CoreInngestTrigger = InngestFunction.Trigger<\n\tkeyof GetEvents<CoreInngest>\n>\nexport type CoreInngestHandler = Handler.Any\n\nexport type CourseBuilderFunctionDefinition = {\n\tconfig: { id: string }\n\ttrigger: CoreInngestTrigger\n\thandler: CoreInngestHandler\n}\n\n/** Validates function definitions without widening their inferred config types. */\nexport const defineCourseBuilderFunctions = <TFunctions extends unknown[]>(\n\tfunctions: TFunctions &\n\t\t(TFunctions[number] extends CourseBuilderFunctionDefinition\n\t\t\t? unknown\n\t\t\t: never),\n): TFunctions => functions\n\nexport const createInngestMiddleware = <\n\tTCourseBuilderContext extends CoreInngestContext = CoreInngestContext,\n>(\n\tcontext: TCourseBuilderContext,\n) => {\n\treturn new InngestMiddleware({\n\t\tname: 'Course Builder Middleware',\n\t\tinit() {\n\t\t\treturn {\n\t\t\t\tonFunctionRun() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttransformInput() {\n\t\t\t\t\t\t\t// kill me - this middleware is just for types\n\t\t\t\t\t\t\ttype MappedCoreContext = {\n\t\t\t\t\t\t\t\t[K in keyof TCourseBuilderContext]: TCourseBuilderContext[K]\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn { ctx: context as unknown as MappedCoreContext }\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\t})\n}\n\nconst schemas = new EventSchemas().fromRecord<CourseBuilderCoreEvents>()\n\nexport const coreInngest = new Inngest({\n\tid: 'core-inngest',\n\tschemas,\n\tmiddleware: [\n\t\tcreateInngestMiddleware({\n\t\t\tdb: mockServerAdapter,\n\t\t\tsiteRootUrl: '',\n\t\t\tpartyKitRootUrl: '',\n\t\t\ttranscriptProvider: MockTranscriptionProvider,\n\t\t\topenaiProvider: MockOpenAIProvider,\n\t\t\tpartyProvider: MockPartykitProvider,\n\t\t\tpaymentProvider: mockPaymentProvider,\n\t\t\temailProvider: {} as CourseBuilderEmailProvider,\n\t\t\tnotificationProvider: mockSlackProvider,\n\t\t\tgetAuthConfig: () => ({}) as CourseBuilderAuthConfig,\n\t\t\tmediaUploadProvider: {\n\t\t\t\tdeleteFiles: async (_) => Promise.resolve({ success: true }),\n\t\t\t},\n\t\t}),\n\t],\n})\n\nexport type CoreInngest = typeof coreInngest\n","import {\n\tContentResourceResource,\n\tEntitlement,\n\tMerchantCharge,\n\tUpgradableProduct,\n} from '@coursebuilder/core/schemas'\nimport { AttributionSnapshotPayload } from '@coursebuilder/core/schemas/attribution-snapshot'\nimport { type ContentResource } from '@coursebuilder/core/schemas/content-resource-schema'\nimport { Coupon } from '@coursebuilder/core/schemas/coupon-schema'\nimport { MerchantCoupon } from '@coursebuilder/core/schemas/merchant-coupon-schema'\nimport { MerchantCustomer } from '@coursebuilder/core/schemas/merchant-customer-schema'\nimport { MerchantEvents } from '@coursebuilder/core/schemas/merchant-events-schema'\nimport { MerchantProduct } from '@coursebuilder/core/schemas/merchant-product-schema'\nimport { MerchantSession } from '@coursebuilder/core/schemas/merchant-session'\nimport { Price } from '@coursebuilder/core/schemas/price-schema'\nimport { Product } from '@coursebuilder/core/schemas/product-schema'\nimport { Purchase } from '@coursebuilder/core/schemas/purchase-schema'\nimport {\n\tPurchaseUserTransfer,\n\tPurchaseUserTransferState,\n} from '@coursebuilder/core/schemas/purchase-user-transfer-schema'\nimport {\n\tModuleProgress,\n\tResourceProgress,\n} from '@coursebuilder/core/schemas/resource-progress-schema'\nimport { User } from '@coursebuilder/core/schemas/user-schema'\n\nimport type { ServerAdapter } from './adapter'\n\nexport const mockServerAdapter: ServerAdapter = {\n\tclient: null,\n\tgetPersonalOrganization: async () => null,\n\tcreatePersonalOrganization: async () => {\n\t\tthrow new Error('Method not implemented.')\n\t},\n\ttransferPurchaseToUser: async () => {\n\t\treturn null\n\t},\n\tredeemFullPriceCoupon: async () => {\n\t\treturn {} as any\n\t},\n\tarchiveProduct: async (productId) => {\n\t\treturn {} as any\n\t},\n\tupdateProduct: async (product) => {\n\t\treturn {} as any\n\t},\n\tcreateProduct: async (product) => {\n\t\treturn {} as any\n\t},\n\tcreatePurchaseTransfer: async () => {\n\t\treturn Promise.resolve()\n\t},\n\tcreateCoupon: async (input) => {\n\t\treturn []\n\t},\n\taddResourceToProduct: async (options) => {\n\t\treturn null\n\t},\n\tincrementCouponUsedCount(_) {\n\t\treturn Promise.resolve()\n\t},\n\tgetExistingNonBulkValidPurchasesOfProduct: async () => {\n\t\treturn []\n\t},\n\tgetMerchantPriceForProductId: async (productId) => null,\n\tgetMerchantProductForProductId: async (productId) => null,\n\tgetMerchantAccount: async () => null,\n\tcreateMerchantCustomer: async () => null,\n\tcreateMerchantCoupon: async () => ({}) as MerchantCoupon,\n\tgetMerchantCustomerForUserId: async () => null,\n\tgetUpgradableProducts: async () => [],\n\tcreatePurchase: async (options) => {\n\t\tthrow new Error('Method not implemented.')\n\t},\n\tavailableUpgradesForProduct(\n\t\tpurchases: any,\n\t\tproductId: string,\n\t): Promise<\n\t\t{\n\t\t\tupgradableTo: { id: string; name: string }\n\t\t\tupgradableFrom: { id: string; name: string }\n\t\t}[]\n\t> {\n\t\treturn Promise.resolve([])\n\t},\n\tclearLessonProgressForUser(options: {\n\t\tuserId: string\n\t\tlessons: { id: string; slug: string }[]\n\t}): Promise<void> {\n\t\treturn Promise.resolve(undefined)\n\t},\n\tcompleteLessonProgressForUser(options: {\n\t\tuserId: string\n\t\tlessonId?: string\n\t}): Promise<ResourceProgress | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tcouponForIdOrCode(options: {\n\t\tcode?: string\n\t\tcouponId?: string\n\t}): Promise<(Coupon & { merchantCoupon: MerchantCoupon }) | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tcreateMerchantChargeAndPurchase(options: {\n\t\tuserId: string\n\t\tproductId: string\n\t\tstripeChargeId: string\n\t\tstripeCouponId?: string\n\t\tmerchantAccountId: string\n\t\tmerchantProductId: string\n\t\tmerchantCustomerId: string\n\t\tstripeChargeAmount: number\n\t\tquantity?: number\n\t\tbulk?: boolean\n\t\tcheckoutSessionId: string\n\t\tappliedPPPStripeCouponId?: string\n\t\tupgradedFromPurchaseId?: string\n\t\tusedCouponId?: string\n\t\tcountry?: string\n\t\torganizationId?: string\n\t\tpurchaseBenefitsTransport?: string\n\t\tattributionSnapshot?: AttributionSnapshotPayload\n\t}): Promise<Purchase> {\n\t\tthrow new Error('Method not implemented.')\n\t},\n\tfindOrCreateMerchantCustomer(options: {\n\t\tuser: User\n\t\tidentifier: string\n\t\tmerchantAccountId: string\n\t}): Promise<MerchantCustomer | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tcreateMerchantEvent(options: {\n\t\tmerchantAccountId: string\n\t\tidentifier: string\n\t\tpayload: Record<string, any>\n\t}): Promise<MerchantEvents> {\n\t\tthrow new Error('Method not implemented.')\n\t},\n\tgetMerchantEventByIdentifier(\n\t\tidentifier: string,\n\t): Promise<MerchantEvents | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetMerchantEventsByAccount(\n\t\tmerchantAccountId: string,\n\t): Promise<MerchantEvents[]> {\n\t\treturn Promise.resolve([])\n\t},\n\tfindOrCreateUser(\n\t\temail: string,\n\t\tname?: string | null,\n\t): Promise<{\n\t\tuser: User\n\t\tisNewUser: boolean\n\t}> {\n\t\tthrow new Error('Method not implemented.')\n\t},\n\tgetCoupon(couponIdOrCode: string): Promise<Coupon | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetCouponWithBulkPurchases(couponId: string): Promise<\n\t\t| (Coupon & {\n\t\t\t\tredeemedBulkCouponPurchases: Purchase[]\n\t\t\t\tbulkPurchase?: Purchase | null\n\t\t })\n\t\t| null\n\t> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetDefaultCoupon(productIds?: string[]): Promise<{\n\t\tdefaultMerchantCoupon: MerchantCoupon\n\t\tdefaultCoupon: Coupon\n\t} | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetLessonProgressCountsByDate(): Promise<\n\t\t{\n\t\t\tcount: number\n\t\t\tcompletedAt: string\n\t\t}[]\n\t> {\n\t\treturn Promise.resolve([])\n\t},\n\tgetLessonProgressForUser(userId: string): Promise<ResourceProgress[]> {\n\t\treturn Promise.resolve([])\n\t},\n\tgetModuleProgressForUser(\n\t\tuserId: string,\n\t\tmoduleId: string,\n\t): Promise<ModuleProgress> {\n\t\treturn Promise.resolve({\n\t\t\tcompletedLessons: [],\n\t\t\tnextResource: null,\n\t\t\tpercentCompleted: 0,\n\t\t\tcompletedLessonsCount: 0,\n\t\t\ttotalLessonsCount: 0,\n\t\t})\n\t},\n\tgetLessonProgresses(): Promise<ResourceProgress[]> {\n\t\treturn Promise.resolve([])\n\t},\n\tgetMerchantCharge(merchantChargeId: string): Promise<MerchantCharge | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetMerchantCouponForTypeAndPercent(params: {\n\t\ttype: string\n\t\tpercentageDiscount: number\n\t}): Promise<MerchantCoupon | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetMerchantCouponsForTypeAndPercent(params: {\n\t\ttype: string\n\t\tpercentageDiscount: number\n\t}): Promise<MerchantCoupon[]> {\n\t\treturn Promise.resolve([])\n\t},\n\tgetMerchantCouponForTypeAndAmount(params: {\n\t\ttype: string\n\t\tamountDiscount: number\n\t}): Promise<MerchantCoupon | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetMerchantCoupon(merchantCouponId: string): Promise<MerchantCoupon | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetMerchantProduct(stripeProductId: string): Promise<MerchantProduct | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPrice(productId: string): Promise<Price | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPriceForProduct(productId: string): Promise<Price | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetProduct(\n\t\tproductId?: string,\n\t\twithResources: boolean = true,\n\t): Promise<Product | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetProductResources(productId: string): Promise<ContentResource[] | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPurchaseCountForProduct(productId: string): Promise<number> {\n\t\treturn Promise.resolve(0)\n\t},\n\tgetPurchase(purchaseId: string): Promise<Purchase | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPurchaseDetails(\n\t\tpurchaseId: string,\n\t\tuserId: string,\n\t): Promise<{\n\t\tpurchase?: Purchase\n\t\texistingPurchase?: Purchase | null\n\t\tavailableUpgrades: UpgradableProduct[]\n\t}> {\n\t\treturn Promise.resolve({ availableUpgrades: [] })\n\t},\n\tgetPurchaseForStripeCharge(stripeChargeId: string): Promise<Purchase | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPurchaseByCheckoutSessionId(\n\t\tcheckoutSessionId: string,\n\t): Promise<Purchase | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPurchaseUserTransferById(options: { id: string }): Promise<\n\t\t| (PurchaseUserTransfer & {\n\t\t\t\tsourceUser: User\n\t\t\t\ttargetUser: User | null\n\t\t\t\tpurchase: Purchase\n\t\t })\n\t\t| null\n\t> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPurchaseWithUser(purchaseId: string): Promise<\n\t\t| (Purchase & {\n\t\t\t\tuser: User\n\t\t })\n\t\t| null\n\t> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetUserWithPurchasersByEmail(email: string): Promise<any | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetPurchasesForUser(userId?: string): Promise<Purchase[]> {\n\t\treturn Promise.resolve([])\n\t},\n\tgetEntitlementsForUser(params: {\n\t\tuserId: string\n\t\tsourceType?: string\n\t\tentitlementType?: string\n\t}): Promise<Entitlement[]> {\n\t\treturn Promise.resolve([])\n\t},\n\tgetEntitlementTypeByName(\n\t\tname: string,\n\t): Promise<{ id: string; name: string } | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tgetUserById(userId: string): Promise<User | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\tpricesOfPurchasesTowardOneBundle(options: {\n\t\tuserId: string | undefined\n\t\tbundleId: string\n\t}): Promise<Price[]> {\n\t\treturn Promise.resolve([])\n\t},\n\ttoggleLessonProgressForUser(options: {\n\t\tuserId: string\n\t\tlessonId?: string\n\t\tlessonSlug?: string\n\t}): Promise<ResourceProgress | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\ttransferPurchasesToNewUser(options: {\n\t\tmerchantCustomerId: string\n\t\tuserId: string\n\t}): Promise<unknown> {\n\t\treturn Promise.resolve(undefined)\n\t},\n\tupdatePurchaseStatusForCharge(\n\t\tchargeId: string,\n\t\tstatus: 'Valid' | 'Refunded' | 'Disputed' | 'Banned' | 'Restricted',\n\t): Promise<Purchase | undefined> {\n\t\treturn Promise.resolve(undefined)\n\t},\n\tupdatePurchaseUserTransferTransferState(options: {\n\t\tid: string\n\t\ttransferState: PurchaseUserTransferState\n\t}): Promise<PurchaseUserTransfer | null> {\n\t\treturn Promise.resolve(null)\n\t},\n\taddResourceToResource: async (options) => {\n\t\treturn {} as ContentResourceResource\n\t},\n\tremoveResourceFromResource: async (options) => {\n\t\treturn null\n\t},\n\tcreateContentResource: async (resource) => {\n\t\treturn resource as ContentResource\n\t},\n\tgetEvent: async (_) => {\n\t\treturn null\n\t},\n\tcreateEvent: async (_) => {\n\t\treturn null\n\t},\n\tcreateEventSeries: async (_) => {\n\t\treturn { eventSeries: null as any, childEvents: [] }\n\t},\n\tcreateCohort: async (_) => {\n\t\treturn { cohort: null as any, product: undefined }\n\t},\n\tcreateWorkshop: async (_) => {\n\t\treturn {\n\t\t\tworkshop: null as any,\n\t\t\tsections: [],\n\t\t\tlessons: [],\n\t\t\tproduct: undefined,\n\t\t}\n\t},\n\tgetContentResource: async (_) => {\n\t\treturn null\n\t},\n\tgetVideoResource: async (_) => {\n\t\treturn null\n\t},\n\tgetParentResourceOfVideoResource: async (_) => {\n\t\treturn null\n\t},\n\tupdateContentResourceFields(_) {\n\t\treturn null\n\t},\n\tcreateOrganization: async () => null,\n\tgetOrganization: async () => null,\n\taddMemberToOrganization: async () => null,\n\tremoveMemberFromOrganization: async () => undefined,\n\taddRoleForMember: async () => undefined,\n\tremoveRoleForMember: async () => undefined,\n\tgetMembershipsForUser: async () => [],\n\tgetOrganizationMembers: async () => [],\n\tgetMerchantSubscription: async () => null,\n\tcreateMerchantSubscription: async () => null,\n\tupdateMerchantSubscription: async () => null,\n\tdeleteMerchantSubscription: async () => undefined,\n\tcreateMerchantSession: async () => Promise.resolve({} as MerchantSession),\n\tcreateSubscription: async () => null,\n\tgetSubscriptionForStripeId: async () => null,\n\tupdateSubscriptionStatus: async () => undefined,\n\tgetPurchasesForBulkCouponId: async () => [],\n}\n","import type {\n\tPaymentsAdapter,\n\tPaymentsProviderConfig,\n} from '@coursebuilder/core/types'\n\nconst mockPaymentsAdapter: PaymentsAdapter = {\n\tgetCouponPercentOff: async () => 0,\n\tgetCouponAmountOff: async () => 0,\n\tcreateCoupon: async () => 'mock-coupon-id',\n\tcreatePromotionCode: async () => 'mock-promotion-code-id',\n\tcreateCheckoutSession: async () => 'mock-checkout-session-id',\n\tcreateCustomer: async () => 'mock-customer-id',\n\tverifyWebhookSignature: async () => true,\n\tgetCheckoutSession: async () => ({ id: 'mock-checkout-session-id' }) as any,\n\tgetCustomer: async () => ({ id: 'mock-customer-id' }) as any,\n\tupdateCustomer: async () => {},\n\trefundCharge: async () => ({}) as any,\n\tupdateProduct: async () => {},\n\tupdatePrice: async () => {},\n\tgetProduct: async () => ({}) as any,\n\tgetPrice: async () => ({}) as any,\n\tcreatePrice: async () => ({}) as any,\n\tcreateProduct: async () => ({}) as any,\n\tgetSubscription: async () => ({}) as any,\n\tgetBillingPortalUrl: async () => 'mock-billing-portal-url',\n\tupdateSubscriptionItemQuantity: async () => ({}) as any,\n}\n\nexport const mockPaymentProvider: PaymentsProviderConfig = {\n\tid: 'mock-stripe',\n\tname: 'Mock Stripe',\n\ttype: 'payment',\n\toptions: {\n\t\terrorRedirectUrl: 'mock-error-redirect-url',\n\t\tcancelUrl: 'mock-cancel-url',\n\t\tbaseSuccessUrl: 'mock-base-success-url',\n\t\tpaymentsAdapter: mockPaymentsAdapter,\n\t},\n\tgetSubscriptionInfo: async () => ({}) as any,\n\tgetPurchaseInfo: async () => ({}) as any,\n\tcreateCheckoutSession: async () => ({\n\t\tredirect: 'mock-checkout-session-id',\n\t\tstatus: 303,\n\t}),\n\tgetCustomer: async () => ({ id: 'mock-customer-id' }) as any,\n\tupdateCustomer: async () => {},\n\trefundCharge: async () => ({}) as any,\n\tupdateProduct: async () => {},\n\tupdatePrice: async () => {},\n\tgetProduct: async () => ({}) as any,\n\tgetPrice: async () => ({}) as any,\n\tcreatePrice: async () => ({}) as any,\n\tcreateProduct: async () => ({}) as any,\n\tgetSubscription: async () => ({}) as any,\n\tgetBillingPortalUrl: async () => 'mock-billing-portal-url',\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// src/actions/prices-formatted.ts
|
|
2
|
+
import { isAfter } from "date-fns";
|
|
3
|
+
import { formatPricesForProduct } from "@coursebuilder/commerce/format-prices-for-product";
|
|
4
|
+
import { PricingFormattedInputSchema } from "@coursebuilder/core/schemas/pricing-formatted-input-schema";
|
|
5
|
+
import { find } from "@coursebuilder/nodash";
|
|
6
|
+
var checkForAnyAvailableUpgrades = async ({
|
|
7
|
+
upgradeFromPurchaseId,
|
|
8
|
+
productId,
|
|
9
|
+
purchases,
|
|
10
|
+
courseBuilderAdapter
|
|
11
|
+
}) => {
|
|
12
|
+
if (upgradeFromPurchaseId)
|
|
13
|
+
return upgradeFromPurchaseId;
|
|
14
|
+
const validPurchases = getValidPurchases(purchases);
|
|
15
|
+
const productIdsAlreadyPurchased = validPurchases.map(
|
|
16
|
+
(purchase) => purchase.productId
|
|
17
|
+
);
|
|
18
|
+
const potentialUpgrades = await courseBuilderAdapter.availableUpgradesForProduct(
|
|
19
|
+
validPurchases,
|
|
20
|
+
productId
|
|
21
|
+
);
|
|
22
|
+
const availableUpgrades = potentialUpgrades.filter(
|
|
23
|
+
(availableUpgrade) => {
|
|
24
|
+
return !productIdsAlreadyPurchased.includes(
|
|
25
|
+
availableUpgrade.upgradableTo.id
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
return find(validPurchases, (purchase) => {
|
|
30
|
+
const upgradeProductIds = availableUpgrades.map(
|
|
31
|
+
(upgrade) => upgrade.upgradableFrom.id
|
|
32
|
+
);
|
|
33
|
+
return upgradeProductIds.includes(purchase.productId);
|
|
34
|
+
})?.id;
|
|
35
|
+
};
|
|
36
|
+
var getValidPurchases = (purchases) => {
|
|
37
|
+
return purchases.filter(
|
|
38
|
+
(purchase) => ["Valid", "Restricted"].includes(purchase.status)
|
|
39
|
+
);
|
|
40
|
+
};
|
|
41
|
+
function couponIsValid(coupon) {
|
|
42
|
+
if (coupon) {
|
|
43
|
+
const unlimitedUse = coupon.maxUses === -1;
|
|
44
|
+
const now = /* @__PURE__ */ new Date();
|
|
45
|
+
if (!unlimitedUse && coupon.usedCount >= coupon.maxUses)
|
|
46
|
+
return false;
|
|
47
|
+
if (coupon.expires && isAfter(now, coupon.expires))
|
|
48
|
+
return false;
|
|
49
|
+
} else {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
async function getActiveMerchantCoupon({
|
|
55
|
+
productId,
|
|
56
|
+
siteCouponId,
|
|
57
|
+
code,
|
|
58
|
+
courseBuilderAdapter
|
|
59
|
+
}) {
|
|
60
|
+
let activeMerchantCoupon = null;
|
|
61
|
+
let usedCouponId;
|
|
62
|
+
const defaultCoupons = productId ? await courseBuilderAdapter.getDefaultCoupon([productId]) : void 0;
|
|
63
|
+
const defaultMerchantCoupon = defaultCoupons ? defaultCoupons.defaultMerchantCoupon : null;
|
|
64
|
+
const incomingCoupon = await courseBuilderAdapter.couponForIdOrCode({
|
|
65
|
+
couponId: siteCouponId,
|
|
66
|
+
code
|
|
67
|
+
});
|
|
68
|
+
if (
|
|
69
|
+
// compare the discounts if there is a coupon and site/sale running
|
|
70
|
+
incomingCoupon?.merchantCoupon && couponIsValid(incomingCoupon) && defaultMerchantCoupon
|
|
71
|
+
) {
|
|
72
|
+
const { merchantCoupon: incomingMerchantCoupon } = incomingCoupon;
|
|
73
|
+
const product = productId ? await courseBuilderAdapter.getProduct(productId) : null;
|
|
74
|
+
const price = product ? await courseBuilderAdapter.getPriceForProduct(productId) : null;
|
|
75
|
+
const unitPrice = price?.unitAmount || 0;
|
|
76
|
+
const incomingDiscountAmount = incomingMerchantCoupon.amountDiscount !== null && incomingMerchantCoupon.amountDiscount !== void 0 && incomingMerchantCoupon.amountDiscount > 0 ? incomingMerchantCoupon.amountDiscount / 100 : (incomingMerchantCoupon.percentageDiscount ?? 0) * unitPrice;
|
|
77
|
+
const defaultDiscountAmount = defaultMerchantCoupon.amountDiscount !== null && defaultMerchantCoupon.amountDiscount !== void 0 && defaultMerchantCoupon.amountDiscount > 0 ? defaultMerchantCoupon.amountDiscount / 100 : (defaultMerchantCoupon.percentageDiscount ?? 0) * unitPrice;
|
|
78
|
+
if (incomingDiscountAmount >= defaultDiscountAmount) {
|
|
79
|
+
activeMerchantCoupon = incomingMerchantCoupon;
|
|
80
|
+
usedCouponId = incomingCoupon.id;
|
|
81
|
+
} else {
|
|
82
|
+
activeMerchantCoupon = defaultMerchantCoupon;
|
|
83
|
+
usedCouponId = defaultCoupons?.defaultCoupon?.id;
|
|
84
|
+
}
|
|
85
|
+
} else if (
|
|
86
|
+
// if it's a coupon, use it
|
|
87
|
+
incomingCoupon?.merchantCoupon && couponIsValid(incomingCoupon)
|
|
88
|
+
) {
|
|
89
|
+
activeMerchantCoupon = incomingCoupon.merchantCoupon;
|
|
90
|
+
usedCouponId = incomingCoupon.id;
|
|
91
|
+
} else if (
|
|
92
|
+
// if a sale is running, use that
|
|
93
|
+
defaultMerchantCoupon
|
|
94
|
+
) {
|
|
95
|
+
activeMerchantCoupon = defaultMerchantCoupon;
|
|
96
|
+
usedCouponId = defaultCoupons?.defaultCoupon?.id;
|
|
97
|
+
}
|
|
98
|
+
const defaultCoupon = defaultCoupons?.defaultCoupon;
|
|
99
|
+
return {
|
|
100
|
+
usedCouponId,
|
|
101
|
+
activeMerchantCoupon,
|
|
102
|
+
...defaultCoupon && defaultCoupon.merchantCouponId === activeMerchantCoupon?.id && {
|
|
103
|
+
defaultCoupon
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
var CheckForAvailableCouponsSchema = PricingFormattedInputSchema.pick({
|
|
108
|
+
merchantCoupon: true,
|
|
109
|
+
couponId: true,
|
|
110
|
+
code: true,
|
|
111
|
+
productId: true
|
|
112
|
+
});
|
|
113
|
+
var checkForAvailableCoupons = async ({
|
|
114
|
+
merchantCoupon,
|
|
115
|
+
couponId,
|
|
116
|
+
productId,
|
|
117
|
+
courseBuilderAdapter
|
|
118
|
+
}) => {
|
|
119
|
+
if (merchantCoupon?.id) {
|
|
120
|
+
return {
|
|
121
|
+
activeMerchantCoupon: merchantCoupon,
|
|
122
|
+
defaultCoupon: void 0
|
|
123
|
+
};
|
|
124
|
+
} else {
|
|
125
|
+
const { activeMerchantCoupon, defaultCoupon, usedCouponId } = await getActiveMerchantCoupon({
|
|
126
|
+
siteCouponId: couponId,
|
|
127
|
+
productId,
|
|
128
|
+
code: void 0,
|
|
129
|
+
courseBuilderAdapter
|
|
130
|
+
});
|
|
131
|
+
const minimalDefaultCoupon = defaultCoupon && {
|
|
132
|
+
expires: defaultCoupon.expires?.toISOString(),
|
|
133
|
+
percentageDiscount: defaultCoupon.percentageDiscount?.toString() || "0"
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
activeMerchantCoupon,
|
|
137
|
+
defaultCoupon,
|
|
138
|
+
usedCouponId
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
async function getPricesFormatted(request, cookies, options) {
|
|
143
|
+
const currentUser = options.getCurrentUser ? await options.getCurrentUser() : null;
|
|
144
|
+
const {
|
|
145
|
+
productId,
|
|
146
|
+
quantity = 1,
|
|
147
|
+
couponId,
|
|
148
|
+
merchantCoupon,
|
|
149
|
+
upgradeFromPurchaseId: _upgradeFromPurchaseId,
|
|
150
|
+
autoApplyPPP,
|
|
151
|
+
userId = currentUser?.id
|
|
152
|
+
} = PricingFormattedInputSchema.parse(request.body);
|
|
153
|
+
if (!productId)
|
|
154
|
+
return { status: 400, body: "productId is required" };
|
|
155
|
+
if (!options.adapter)
|
|
156
|
+
return { status: 400, body: "Adapter not found" };
|
|
157
|
+
const purchases = getValidPurchases(
|
|
158
|
+
await options.adapter.getPurchasesForUser(userId)
|
|
159
|
+
);
|
|
160
|
+
const country = request.headers?.["x-vercel-ip-country"] || request.body?.country || process.env.DEFAULT_COUNTRY || "US";
|
|
161
|
+
let upgradeFromPurchaseId = await checkForAnyAvailableUpgrades({
|
|
162
|
+
upgradeFromPurchaseId: _upgradeFromPurchaseId,
|
|
163
|
+
productId,
|
|
164
|
+
purchases,
|
|
165
|
+
country,
|
|
166
|
+
courseBuilderAdapter: options.adapter
|
|
167
|
+
});
|
|
168
|
+
const restrictedPurchase = purchases.find((purchase) => {
|
|
169
|
+
return purchase.productId === productId && purchase.status === "Restricted";
|
|
170
|
+
});
|
|
171
|
+
if (restrictedPurchase) {
|
|
172
|
+
const validPurchase = purchases.find((purchase) => {
|
|
173
|
+
return purchase.productId === productId && purchase.status === "Valid";
|
|
174
|
+
});
|
|
175
|
+
if (!validPurchase) {
|
|
176
|
+
upgradeFromPurchaseId = restrictedPurchase.id;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const { activeMerchantCoupon, defaultCoupon, usedCouponId } = await checkForAvailableCoupons({
|
|
180
|
+
merchantCoupon,
|
|
181
|
+
couponId,
|
|
182
|
+
productId,
|
|
183
|
+
courseBuilderAdapter: options.adapter
|
|
184
|
+
});
|
|
185
|
+
const usedCoupon = usedCouponId ? await options.adapter.getCoupon(usedCouponId) : null;
|
|
186
|
+
const productPrices = await formatPricesForProduct({
|
|
187
|
+
productId,
|
|
188
|
+
country,
|
|
189
|
+
quantity,
|
|
190
|
+
merchantCouponId: activeMerchantCoupon?.id,
|
|
191
|
+
...upgradeFromPurchaseId && { upgradeFromPurchaseId },
|
|
192
|
+
userId,
|
|
193
|
+
autoApplyPPP,
|
|
194
|
+
usedCouponId,
|
|
195
|
+
ctx: options.adapter
|
|
196
|
+
});
|
|
197
|
+
return {
|
|
198
|
+
body: {
|
|
199
|
+
...productPrices,
|
|
200
|
+
...defaultCoupon && { defaultCoupon },
|
|
201
|
+
...usedCoupon && {
|
|
202
|
+
usedCoupon,
|
|
203
|
+
usedCouponId
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
headers: {
|
|
207
|
+
"Content-Type": "application/json"
|
|
208
|
+
},
|
|
209
|
+
cookies
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export {
|
|
214
|
+
getPricesFormatted
|
|
215
|
+
};
|
|
216
|
+
//# sourceMappingURL=chunk-YFLGJIMA.js.map
|