@dream-api/sdk 0.1.5 → 0.1.7

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/dist/index.d.mts CHANGED
@@ -53,6 +53,7 @@ interface UsageTrackResult {
53
53
  interface Tier {
54
54
  name: string;
55
55
  displayName: string;
56
+ /** Price in cents (e.g., 2900 = $29.00) */
56
57
  price: number;
57
58
  limit: number;
58
59
  priceId: string;
@@ -65,6 +66,7 @@ interface Product {
65
66
  name: string;
66
67
  displayName?: string;
67
68
  description?: string;
69
+ /** Price in cents (e.g., 4900 = $49.00) */
68
70
  price: number;
69
71
  currency?: string;
70
72
  priceId: string;
package/dist/index.d.ts CHANGED
@@ -53,6 +53,7 @@ interface UsageTrackResult {
53
53
  interface Tier {
54
54
  name: string;
55
55
  displayName: string;
56
+ /** Price in cents (e.g., 2900 = $29.00) */
56
57
  price: number;
57
58
  limit: number;
58
59
  priceId: string;
@@ -65,6 +66,7 @@ interface Product {
65
66
  name: string;
66
67
  displayName?: string;
67
68
  description?: string;
69
+ /** Price in cents (e.g., 4900 = $49.00) */
68
70
  price: number;
69
71
  currency?: string;
70
72
  priceId: string;
package/dist/index.js CHANGED
@@ -182,7 +182,7 @@ var DreamClient = class {
182
182
 
183
183
  // src/clerk.ts
184
184
  var CLERK_PUBLISHABLE_KEY = "pk_test_Y29tcG9zZWQtYmxvd2Zpc2gtNzYuY2xlcmsuYWNjb3VudHMuZGV2JA";
185
- var CLERK_CDN_URL = "https://cdn.jsdelivr.net/npm/@clerk/clerk-js@5/dist/clerk.browser.js";
185
+ var CLERK_CDN_URL = "https://cdn.jsdelivr.net/npm/@clerk/clerk-js@5.118.0/dist/clerk.browser.js";
186
186
  var JWT_TEMPLATE = "end-user-api";
187
187
  function getClerk() {
188
188
  return window.Clerk;
@@ -191,6 +191,7 @@ var ClerkManager = class {
191
191
  constructor(onTokenChange) {
192
192
  this.loaded = false;
193
193
  this.token = null;
194
+ this.bootstrapUser = null;
194
195
  this.onTokenChange = onTokenChange;
195
196
  }
196
197
  /**
@@ -198,6 +199,16 @@ var ClerkManager = class {
198
199
  */
199
200
  async load() {
200
201
  if (this.loaded || typeof window === "undefined") return;
202
+ const bootstrapToken = this.checkBootstrapToken();
203
+ if (bootstrapToken) {
204
+ this.token = bootstrapToken.token;
205
+ this.bootstrapUser = bootstrapToken.user;
206
+ this.onTokenChange?.(this.token);
207
+ this.loaded = true;
208
+ console.log("[DreamSDK] Bootstrap token found, user:", bootstrapToken.user.email);
209
+ this.removeTokenFromUrl();
210
+ return;
211
+ }
201
212
  const existingClerk = getClerk();
202
213
  if (existingClerk) {
203
214
  this.loaded = true;
@@ -221,6 +232,45 @@ var ClerkManager = class {
221
232
  this.loaded = true;
222
233
  await this.checkSession();
223
234
  }
235
+ /**
236
+ * Check for bootstrap token in URL (from sign-up worker redirect)
237
+ */
238
+ checkBootstrapToken() {
239
+ if (typeof window === "undefined") return null;
240
+ const params = new URLSearchParams(window.location.search);
241
+ const token = params.get("__dream_token");
242
+ if (!token) return null;
243
+ try {
244
+ const parts = token.split(".");
245
+ if (parts.length !== 3) return null;
246
+ const payload = JSON.parse(atob(parts[1].replace(/-/g, "+").replace(/_/g, "/")));
247
+ if (payload.exp && payload.exp < Math.floor(Date.now() / 1e3)) {
248
+ console.log("[DreamSDK] Bootstrap token expired");
249
+ return null;
250
+ }
251
+ return {
252
+ token,
253
+ user: {
254
+ id: payload.userId,
255
+ email: payload.email || "",
256
+ plan: payload.plan || "free",
257
+ publishableKey: payload.publishableKey || ""
258
+ }
259
+ };
260
+ } catch (err) {
261
+ console.error("[DreamSDK] Failed to parse bootstrap token:", err);
262
+ return null;
263
+ }
264
+ }
265
+ /**
266
+ * Remove bootstrap token from URL (clean up after reading)
267
+ */
268
+ removeTokenFromUrl() {
269
+ if (typeof window === "undefined") return;
270
+ const url = new URL(window.location.href);
271
+ url.searchParams.delete("__dream_token");
272
+ window.history.replaceState({}, "", url.toString());
273
+ }
224
274
  /**
225
275
  * Check if returning from auth and grab token
226
276
  */
@@ -240,6 +290,7 @@ var ClerkManager = class {
240
290
  * Check if user is signed in
241
291
  */
242
292
  isSignedIn() {
293
+ if (this.bootstrapUser && this.token) return true;
243
294
  const clerk = getClerk();
244
295
  return !!clerk?.user && !!clerk?.session;
245
296
  }
@@ -247,13 +298,15 @@ var ClerkManager = class {
247
298
  * Get current user info
248
299
  */
249
300
  getUser() {
301
+ if (this.bootstrapUser) return this.bootstrapUser;
250
302
  const clerk = getClerk();
251
303
  if (!clerk?.user) return null;
252
304
  const user = clerk.user;
253
305
  const metadata = user.publicMetadata || {};
306
+ const email = user.primaryEmailAddress?.emailAddress || user.emailAddresses?.[0]?.emailAddress || "";
254
307
  return {
255
308
  id: user.id,
256
- email: user.primaryEmailAddress?.emailAddress || "",
309
+ email,
257
310
  plan: metadata.plan || "free",
258
311
  publishableKey: metadata.publishableKey || ""
259
312
  };
@@ -283,11 +336,13 @@ var ClerkManager = class {
283
336
  * Sign out
284
337
  */
285
338
  async signOut() {
286
- const clerk = getClerk();
287
- if (!clerk) return;
288
- await clerk.signOut();
339
+ this.bootstrapUser = null;
289
340
  this.token = null;
290
341
  this.onTokenChange?.(null);
342
+ const clerk = getClerk();
343
+ if (clerk) {
344
+ await clerk.signOut();
345
+ }
291
346
  }
292
347
  /**
293
348
  * Check if we're returning from auth (has clerk params/cookies)
package/dist/index.mjs CHANGED
@@ -154,7 +154,7 @@ var DreamClient = class {
154
154
 
155
155
  // src/clerk.ts
156
156
  var CLERK_PUBLISHABLE_KEY = "pk_test_Y29tcG9zZWQtYmxvd2Zpc2gtNzYuY2xlcmsuYWNjb3VudHMuZGV2JA";
157
- var CLERK_CDN_URL = "https://cdn.jsdelivr.net/npm/@clerk/clerk-js@5/dist/clerk.browser.js";
157
+ var CLERK_CDN_URL = "https://cdn.jsdelivr.net/npm/@clerk/clerk-js@5.118.0/dist/clerk.browser.js";
158
158
  var JWT_TEMPLATE = "end-user-api";
159
159
  function getClerk() {
160
160
  return window.Clerk;
@@ -163,6 +163,7 @@ var ClerkManager = class {
163
163
  constructor(onTokenChange) {
164
164
  this.loaded = false;
165
165
  this.token = null;
166
+ this.bootstrapUser = null;
166
167
  this.onTokenChange = onTokenChange;
167
168
  }
168
169
  /**
@@ -170,6 +171,16 @@ var ClerkManager = class {
170
171
  */
171
172
  async load() {
172
173
  if (this.loaded || typeof window === "undefined") return;
174
+ const bootstrapToken = this.checkBootstrapToken();
175
+ if (bootstrapToken) {
176
+ this.token = bootstrapToken.token;
177
+ this.bootstrapUser = bootstrapToken.user;
178
+ this.onTokenChange?.(this.token);
179
+ this.loaded = true;
180
+ console.log("[DreamSDK] Bootstrap token found, user:", bootstrapToken.user.email);
181
+ this.removeTokenFromUrl();
182
+ return;
183
+ }
173
184
  const existingClerk = getClerk();
174
185
  if (existingClerk) {
175
186
  this.loaded = true;
@@ -193,6 +204,45 @@ var ClerkManager = class {
193
204
  this.loaded = true;
194
205
  await this.checkSession();
195
206
  }
207
+ /**
208
+ * Check for bootstrap token in URL (from sign-up worker redirect)
209
+ */
210
+ checkBootstrapToken() {
211
+ if (typeof window === "undefined") return null;
212
+ const params = new URLSearchParams(window.location.search);
213
+ const token = params.get("__dream_token");
214
+ if (!token) return null;
215
+ try {
216
+ const parts = token.split(".");
217
+ if (parts.length !== 3) return null;
218
+ const payload = JSON.parse(atob(parts[1].replace(/-/g, "+").replace(/_/g, "/")));
219
+ if (payload.exp && payload.exp < Math.floor(Date.now() / 1e3)) {
220
+ console.log("[DreamSDK] Bootstrap token expired");
221
+ return null;
222
+ }
223
+ return {
224
+ token,
225
+ user: {
226
+ id: payload.userId,
227
+ email: payload.email || "",
228
+ plan: payload.plan || "free",
229
+ publishableKey: payload.publishableKey || ""
230
+ }
231
+ };
232
+ } catch (err) {
233
+ console.error("[DreamSDK] Failed to parse bootstrap token:", err);
234
+ return null;
235
+ }
236
+ }
237
+ /**
238
+ * Remove bootstrap token from URL (clean up after reading)
239
+ */
240
+ removeTokenFromUrl() {
241
+ if (typeof window === "undefined") return;
242
+ const url = new URL(window.location.href);
243
+ url.searchParams.delete("__dream_token");
244
+ window.history.replaceState({}, "", url.toString());
245
+ }
196
246
  /**
197
247
  * Check if returning from auth and grab token
198
248
  */
@@ -212,6 +262,7 @@ var ClerkManager = class {
212
262
  * Check if user is signed in
213
263
  */
214
264
  isSignedIn() {
265
+ if (this.bootstrapUser && this.token) return true;
215
266
  const clerk = getClerk();
216
267
  return !!clerk?.user && !!clerk?.session;
217
268
  }
@@ -219,13 +270,15 @@ var ClerkManager = class {
219
270
  * Get current user info
220
271
  */
221
272
  getUser() {
273
+ if (this.bootstrapUser) return this.bootstrapUser;
222
274
  const clerk = getClerk();
223
275
  if (!clerk?.user) return null;
224
276
  const user = clerk.user;
225
277
  const metadata = user.publicMetadata || {};
278
+ const email = user.primaryEmailAddress?.emailAddress || user.emailAddresses?.[0]?.emailAddress || "";
226
279
  return {
227
280
  id: user.id,
228
- email: user.primaryEmailAddress?.emailAddress || "",
281
+ email,
229
282
  plan: metadata.plan || "free",
230
283
  publishableKey: metadata.publishableKey || ""
231
284
  };
@@ -255,11 +308,13 @@ var ClerkManager = class {
255
308
  * Sign out
256
309
  */
257
310
  async signOut() {
258
- const clerk = getClerk();
259
- if (!clerk) return;
260
- await clerk.signOut();
311
+ this.bootstrapUser = null;
261
312
  this.token = null;
262
313
  this.onTokenChange?.(null);
314
+ const clerk = getClerk();
315
+ if (clerk) {
316
+ await clerk.signOut();
317
+ }
263
318
  }
264
319
  /**
265
320
  * Check if we're returning from auth (has clerk params/cookies)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dream-api/sdk",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Official SDK for Dream API - Auth, billing, and usage tracking in one API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",