@timeback/sdk 0.1.4 → 0.1.6

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 (71) hide show
  1. package/README.md +46 -23
  2. package/dist/client/adapters/react/index.d.ts +1 -2
  3. package/dist/client/adapters/react/index.d.ts.map +1 -1
  4. package/dist/client/adapters/react/index.js +30 -33
  5. package/dist/client/adapters/react/provider.d.ts +1 -2
  6. package/dist/client/adapters/react/provider.d.ts.map +1 -1
  7. package/dist/client/adapters/solid/context.d.ts +1 -2
  8. package/dist/client/adapters/solid/context.d.ts.map +1 -1
  9. package/dist/client/adapters/solid/context.tsx +1 -2
  10. package/dist/client/adapters/solid/index.d.ts +1 -2
  11. package/dist/client/adapters/solid/index.d.ts.map +1 -1
  12. package/dist/client/adapters/solid/index.ts +1 -2
  13. package/dist/client/adapters/svelte/index.d.ts +1 -2
  14. package/dist/client/adapters/svelte/index.d.ts.map +1 -1
  15. package/dist/client/adapters/svelte/index.ts +1 -2
  16. package/dist/client/adapters/svelte/stores.d.ts +1 -2
  17. package/dist/client/adapters/svelte/stores.d.ts.map +1 -1
  18. package/dist/client/adapters/svelte/stores.ts +1 -2
  19. package/dist/client/adapters/vue/index.d.ts +1 -2
  20. package/dist/client/adapters/vue/index.d.ts.map +1 -1
  21. package/dist/client/adapters/vue/index.ts +1 -2
  22. package/dist/client/adapters/vue/provider.d.ts +1 -2
  23. package/dist/client/adapters/vue/provider.d.ts.map +1 -1
  24. package/dist/client/adapters/vue/provider.ts +1 -2
  25. package/dist/client/index.d.ts +1 -1
  26. package/dist/client/index.d.ts.map +1 -1
  27. package/dist/client/lib/activity/activity.class.d.ts +21 -21
  28. package/dist/client/lib/activity/activity.class.d.ts.map +1 -1
  29. package/dist/client/lib/activity/index.d.ts +0 -1
  30. package/dist/client/lib/activity/index.d.ts.map +1 -1
  31. package/dist/client/namespaces/activity.d.ts +13 -8
  32. package/dist/client/namespaces/activity.d.ts.map +1 -1
  33. package/dist/client.d.ts +4 -4
  34. package/dist/client.d.ts.map +1 -1
  35. package/dist/client.js +30 -34
  36. package/dist/edge.d.ts +1 -1
  37. package/dist/index.d.ts +1 -5
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +25888 -6188
  40. package/dist/server/adapters/express.js +19592 -927
  41. package/dist/server/adapters/nuxt.js +19596 -931
  42. package/dist/server/adapters/solid-start.js +19594 -929
  43. package/dist/server/adapters/tanstack-start.js +19592 -927
  44. package/dist/server/handlers/activity.d.ts +4 -7
  45. package/dist/server/handlers/activity.d.ts.map +1 -1
  46. package/dist/server/handlers/user.d.ts.map +1 -1
  47. package/dist/server/lib/build-activity-events.d.ts +29 -1
  48. package/dist/server/lib/build-activity-events.d.ts.map +1 -1
  49. package/dist/server/lib/index.d.ts +2 -4
  50. package/dist/server/lib/index.d.ts.map +1 -1
  51. package/dist/server/lib/resolve.d.ts +112 -0
  52. package/dist/server/lib/resolve.d.ts.map +1 -0
  53. package/dist/server/timeback-identity.d.ts +2 -2
  54. package/dist/server/timeback.d.ts +2 -2
  55. package/dist/server/timeback.d.ts.map +1 -1
  56. package/dist/server/types.d.ts +152 -27
  57. package/dist/server/types.d.ts.map +1 -1
  58. package/dist/shared/types.d.ts +118 -9
  59. package/dist/shared/types.d.ts.map +1 -1
  60. package/package.json +4 -8
  61. package/dist/client/lib/activity/activity.d.ts +0 -16
  62. package/dist/client/lib/activity/activity.d.ts.map +0 -1
  63. package/dist/config.d.ts +0 -20
  64. package/dist/config.d.ts.map +0 -1
  65. package/dist/config.js +0 -0
  66. package/dist/server/lib/resolve-activity-course.d.ts +0 -22
  67. package/dist/server/lib/resolve-activity-course.d.ts.map +0 -1
  68. package/dist/server/lib/resolve-timeback-id.d.ts +0 -28
  69. package/dist/server/lib/resolve-timeback-id.d.ts.map +0 -1
  70. package/dist/server/lib/resolve-timeback-user.d.ts +0 -42
  71. package/dist/server/lib/resolve-timeback-user.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"activity.class.d.ts","sourceRoot":"","sources":["../../../../src/client/lib/activity/activity.class.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEhG;;GAEG;AACH,qBAAa,QAAQ;IAgBnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAhB9B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,MAAM,CAAQ;IAEtB;;;;;;;OAOG;IACH,YACkB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,EAC1E;IAEJ;;;;OAIG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;;;OAIG;IACH,IAAI,SAAS,IAAI,IAAI,GAAG,SAAS,CAEhC;IAED;;;;OAIG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED;;;;OAIG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;OAIG;IACH,IAAI,SAAS,IAAI,MAAM,CAatB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED;;OAEG;IACH,MAAM,IAAI,IAAI,CAKb;IAED;;;;;OAKG;IACG,GAAG,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjD;CACD"}
1
+ {"version":3,"file":"activity.class.d.ts","sourceRoot":"","sources":["../../../../src/client/lib/activity/activity.class.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEhG;;;;;GAKG;AACH,qBAAa,QAAQ;IAgBnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAhB9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;IACjC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,MAAM,CAAQ;IAEtB;;;;;;;OAOG;IACH,YACkB,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,EAG7E;IAED;;;;OAIG;IACH,IAAI,SAAS,IAAI,IAAI,CAEpB;IAED;;;;OAIG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;OAIG;IACH,IAAI,SAAS,IAAI,MAAM,CAatB;IAED;;;;;;;;OAQG;IACH,aAAa,CACZ,IAAI,EAAE,eAAe,GACpB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAAC,GACpE,kBAAkB,CAyBpB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED;;OAEG;IACH,MAAM,IAAI,IAAI,CAKb;IAED;;;;OAIG;IACG,GAAG,CACR,IAAI,EAAE,eAAe,GACpB,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAAC,GACpE,OAAO,CAAC,IAAI,CAAC,CAaf;CACD"}
@@ -1,6 +1,5 @@
1
1
  /**
2
2
  * Activity Module
3
3
  */
4
- export { createActivity } from './activity';
5
4
  export { Activity } from './activity.class';
6
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/lib/activity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/lib/activity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA"}
@@ -6,7 +6,7 @@
6
6
  import { Activity } from '../lib/activity';
7
7
  import type { ActivityEndPayload, ActivityParams } from '../../shared/types';
8
8
  /**
9
- * Activity namespace for creating and managing activities.
9
+ * Activity namespace for starting and managing activities.
10
10
  */
11
11
  export declare class ActivityManager {
12
12
  private readonly sendActivity;
@@ -17,25 +17,30 @@ export declare class ActivityManager {
17
17
  */
18
18
  constructor(sendActivity: (payload: ActivityEndPayload) => Promise<void>);
19
19
  /**
20
- * Create a new activity.
20
+ * Start a new activity.
21
21
  *
22
- * The activity is created but not started. Call `.start()` to begin tracking.
22
+ * The activity timer begins immediately. Use `pause()`, `resume()`, and `end()`
23
+ * to control the activity lifecycle.
23
24
  *
24
25
  * @param params - Activity parameters
25
- * @returns Activity instance
26
+ * @returns Started activity instance
26
27
  *
27
28
  * @example
28
29
  * ```typescript
29
- * const activity = timeback.activity.new({
30
+ * const activity = timeback.activity.start({
30
31
  * id: 'lesson-1',
31
32
  * name: 'Intro',
32
33
  * course: { subject: 'Math', grade: 3 },
33
34
  * })
34
- * activity.start()
35
35
  * // ... user completes lesson ...
36
- * await activity.end({ totalQuestions: 10, correctQuestions: 8 })
36
+ * await activity.end({
37
+ * totalQuestions: 10,
38
+ * correctQuestions: 8,
39
+ * attemptNumber: 1,
40
+ * pctCompleteApp: 67,
41
+ * })
37
42
  * ```
38
43
  */
39
- new(params: ActivityParams): Activity;
44
+ start(params: ActivityParams): Activity;
40
45
  }
41
46
  //# sourceMappingURL=activity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/client/namespaces/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE5E;;GAEG;AACH,qBAAa,eAAe;IAMf,OAAO,CAAC,QAAQ,CAAC,YAAY;IALzC;;;;OAIG;IACH,YAA6B,YAAY,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,EAAI;IAE7F;;;;;;;;;;;;;;;;;;;OAmBG;IACH,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAEpC;CACD"}
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/client/namespaces/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE5E;;GAEG;AACH,qBAAa,eAAe;IAMf,OAAO,CAAC,QAAQ,CAAC,YAAY;IALzC;;;;OAIG;IACH,YAA6B,YAAY,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,EAAI;IAE7F;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAEtC;CACD"}
package/dist/client.d.ts CHANGED
@@ -10,10 +10,10 @@
10
10
  * const client = createClient()
11
11
  *
12
12
  * // Start tracking
13
- * const activity = client.startActivity({
13
+ * const activity = client.activity.start({
14
14
  * id: 'lesson-123',
15
15
  * name: 'Algebra Basics',
16
- * course: { subject: 'FastMath', grade: 3 },
16
+ * course: { subject: 'Math', grade: 3 },
17
17
  * })
18
18
  *
19
19
  * // Pause/resume
@@ -21,10 +21,10 @@
21
21
  * activity.resume()
22
22
  *
23
23
  * // End tracking with metrics
24
- * await activity.end({ totalQuestions: 10, correctQuestions: 8 })
24
+ * await activity.end({ totalQuestions: 10, correctQuestions: 8, attemptNumber: 1 })
25
25
  * ```
26
26
  */
27
27
  export { createClient, TimebackClient } from './client/index';
28
- export { createActivity, Activity } from './client/index';
28
+ export { Activity } from './client/index';
29
29
  export type { TimebackIdentity, TimebackProfile, TimebackSessionUser, ActivityParams, ActivityMetrics, } from './shared/types';
30
30
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzD,YAAY,EACX,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,eAAe,GACf,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,YAAY,EACX,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,eAAe,GACf,MAAM,gBAAgB,CAAA"}
package/dist/client.js CHANGED
@@ -35,24 +35,16 @@ class Activity {
35
35
  constructor(params, sendActivity) {
36
36
  this.params = params;
37
37
  this.sendActivity = sendActivity;
38
- }
39
- get isStarted() {
40
- return this._startedAt !== undefined;
38
+ this._startedAt = new Date;
41
39
  }
42
40
  get startedAt() {
43
41
  return this._startedAt;
44
42
  }
45
- start() {
46
- if (this._startedAt)
47
- return this;
48
- this._startedAt = new Date;
49
- return this;
50
- }
51
43
  get isPaused() {
52
44
  return this._isPaused;
53
45
  }
54
46
  get elapsedMs() {
55
- if (!this._startedAt || this._ended) {
47
+ if (this._ended) {
56
48
  return 0;
57
49
  }
58
50
  const now = new Date;
@@ -62,8 +54,30 @@ class Activity {
62
54
  }
63
55
  return Math.max(0, elapsed);
64
56
  }
57
+ _buildPayload(data) {
58
+ const now = new Date;
59
+ const pausedMs = this._totalPausedMs + (this._isPaused && this._pausedAt ? now.getTime() - this._pausedAt.getTime() : 0);
60
+ const elapsedMs = now.getTime() - this._startedAt.getTime() - pausedMs;
61
+ return {
62
+ id: this.params.id,
63
+ name: this.params.name,
64
+ course: this.params.course,
65
+ startedAt: this._startedAt.toISOString(),
66
+ endedAt: now.toISOString(),
67
+ elapsedMs: Math.max(0, elapsedMs),
68
+ pausedMs,
69
+ metrics: {
70
+ totalQuestions: data.totalQuestions,
71
+ correctQuestions: data.correctQuestions,
72
+ ...data.xpEarned === undefined ? {} : { xpEarned: data.xpEarned },
73
+ ...data.masteredUnits === undefined ? {} : { masteredUnits: data.masteredUnits }
74
+ },
75
+ ...data.attemptNumber === undefined ? {} : { attemptNumber: data.attemptNumber },
76
+ ...data.pctCompleteApp === undefined ? {} : { pctCompleteApp: data.pctCompleteApp }
77
+ };
78
+ }
65
79
  pause() {
66
- if (!this._startedAt || this._isPaused || this._ended)
80
+ if (this._isPaused || this._ended)
67
81
  return;
68
82
  this._isPaused = true;
69
83
  this._pausedAt = new Date;
@@ -75,43 +89,26 @@ class Activity {
75
89
  this._isPaused = false;
76
90
  this._pausedAt = undefined;
77
91
  }
78
- async end(metrics) {
79
- if (!this._startedAt) {
80
- throw new Error("Cannot end activity that was never started");
81
- }
92
+ async end(data) {
82
93
  if (this._ended)
83
94
  return;
84
95
  this._ended = true;
85
96
  if (this._isPaused && this._pausedAt) {
86
97
  this._totalPausedMs += new Date().getTime() - this._pausedAt.getTime();
98
+ this._isPaused = false;
99
+ this._pausedAt = undefined;
87
100
  }
88
- const endedAt = new Date;
89
- const elapsedMs = endedAt.getTime() - this._startedAt.getTime() - this._totalPausedMs;
90
- const payload = {
91
- id: this.params.id,
92
- name: this.params.name,
93
- course: this.params.course,
94
- startedAt: this._startedAt.toISOString(),
95
- endedAt: endedAt.toISOString(),
96
- elapsedMs: Math.max(0, elapsedMs),
97
- pausedMs: this._totalPausedMs,
98
- metrics
99
- };
101
+ const payload = this._buildPayload(data);
100
102
  await this.sendActivity(payload);
101
103
  }
102
104
  }
103
-
104
- // src/client/lib/activity/activity.ts
105
- function createActivity(params, sendActivity) {
106
- return new Activity(params, sendActivity);
107
- }
108
105
  // src/client/namespaces/activity.ts
109
106
  class ActivityManager {
110
107
  sendActivity;
111
108
  constructor(sendActivity) {
112
109
  this.sendActivity = sendActivity;
113
110
  }
114
- new(params) {
111
+ start(params) {
115
112
  return new Activity(params, this.sendActivity);
116
113
  }
117
114
  }
@@ -192,7 +189,6 @@ function createClient(config = {}) {
192
189
  }
193
190
  export {
194
191
  createClient,
195
- createActivity,
196
192
  TimebackClient,
197
193
  Activity
198
194
  };
package/dist/edge.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Timeback (edge/worker friendly entrypoint)
3
3
  *
4
4
  * This entrypoint is intended for runtimes like Cloudflare Workers / workerd.
5
- * It avoids importing Node-only dependencies (notably config loading via `jiti`).
5
+ * It avoids importing Node-only dependencies (notably config loading via `c12`).
6
6
  *
7
7
  * It includes identity-only SSO plus a small set of edge-safe helpers.
8
8
  */
package/dist/index.d.ts CHANGED
@@ -15,11 +15,7 @@
15
15
  * },
16
16
  * identity: {
17
17
  * mode: 'custom',
18
- * getUser: async (req) => ({
19
- * id: session.userId,
20
- * email: session.user.email,
21
- * name: session.user.name,
22
- * }),
18
+ * getEmail: req => getSessionFromCookie(req)?.email,
23
19
  * },
24
20
  * })
25
21
  * ```
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,YAAY,EACX,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,kCAAkC,EAClC,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,+BAA+B,GAC/B,MAAM,UAAU,CAAA;AAEjB,YAAY,EACX,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,GACf,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,YAAY,EACX,cAAc,EACd,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,kCAAkC,EAClC,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,+BAA+B,GAC/B,MAAM,UAAU,CAAA;AAEjB,YAAY,EACX,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,GACf,MAAM,gBAAgB,CAAA"}