@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.
- package/README.md +46 -23
- package/dist/client/adapters/react/index.d.ts +1 -2
- package/dist/client/adapters/react/index.d.ts.map +1 -1
- package/dist/client/adapters/react/index.js +30 -33
- package/dist/client/adapters/react/provider.d.ts +1 -2
- package/dist/client/adapters/react/provider.d.ts.map +1 -1
- package/dist/client/adapters/solid/context.d.ts +1 -2
- package/dist/client/adapters/solid/context.d.ts.map +1 -1
- package/dist/client/adapters/solid/context.tsx +1 -2
- package/dist/client/adapters/solid/index.d.ts +1 -2
- package/dist/client/adapters/solid/index.d.ts.map +1 -1
- package/dist/client/adapters/solid/index.ts +1 -2
- package/dist/client/adapters/svelte/index.d.ts +1 -2
- package/dist/client/adapters/svelte/index.d.ts.map +1 -1
- package/dist/client/adapters/svelte/index.ts +1 -2
- package/dist/client/adapters/svelte/stores.d.ts +1 -2
- package/dist/client/adapters/svelte/stores.d.ts.map +1 -1
- package/dist/client/adapters/svelte/stores.ts +1 -2
- package/dist/client/adapters/vue/index.d.ts +1 -2
- package/dist/client/adapters/vue/index.d.ts.map +1 -1
- package/dist/client/adapters/vue/index.ts +1 -2
- package/dist/client/adapters/vue/provider.d.ts +1 -2
- package/dist/client/adapters/vue/provider.d.ts.map +1 -1
- package/dist/client/adapters/vue/provider.ts +1 -2
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/lib/activity/activity.class.d.ts +21 -21
- package/dist/client/lib/activity/activity.class.d.ts.map +1 -1
- package/dist/client/lib/activity/index.d.ts +0 -1
- package/dist/client/lib/activity/index.d.ts.map +1 -1
- package/dist/client/namespaces/activity.d.ts +13 -8
- package/dist/client/namespaces/activity.d.ts.map +1 -1
- package/dist/client.d.ts +4 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -34
- package/dist/edge.d.ts +1 -1
- package/dist/index.d.ts +1 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25888 -6188
- package/dist/server/adapters/express.js +19592 -927
- package/dist/server/adapters/nuxt.js +19596 -931
- package/dist/server/adapters/solid-start.js +19594 -929
- package/dist/server/adapters/tanstack-start.js +19592 -927
- package/dist/server/handlers/activity.d.ts +4 -7
- package/dist/server/handlers/activity.d.ts.map +1 -1
- package/dist/server/handlers/user.d.ts.map +1 -1
- package/dist/server/lib/build-activity-events.d.ts +29 -1
- package/dist/server/lib/build-activity-events.d.ts.map +1 -1
- package/dist/server/lib/index.d.ts +2 -4
- package/dist/server/lib/index.d.ts.map +1 -1
- package/dist/server/lib/resolve.d.ts +112 -0
- package/dist/server/lib/resolve.d.ts.map +1 -0
- package/dist/server/timeback-identity.d.ts +2 -2
- package/dist/server/timeback.d.ts +2 -2
- package/dist/server/timeback.d.ts.map +1 -1
- package/dist/server/types.d.ts +152 -27
- package/dist/server/types.d.ts.map +1 -1
- package/dist/shared/types.d.ts +118 -9
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +4 -8
- package/dist/client/lib/activity/activity.d.ts +0 -16
- package/dist/client/lib/activity/activity.d.ts.map +0 -1
- package/dist/config.d.ts +0 -20
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -0
- package/dist/server/lib/resolve-activity-course.d.ts +0 -22
- package/dist/server/lib/resolve-activity-course.d.ts.map +0 -1
- package/dist/server/lib/resolve-timeback-id.d.ts +0 -28
- package/dist/server/lib/resolve-timeback-id.d.ts.map +0 -1
- package/dist/server/lib/resolve-timeback-user.d.ts +0 -42
- 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
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/client/lib/activity/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,
|
|
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
|
|
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
|
-
*
|
|
20
|
+
* Start a new activity.
|
|
21
21
|
*
|
|
22
|
-
* The activity
|
|
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
|
|
26
|
+
* @returns Started activity instance
|
|
26
27
|
*
|
|
27
28
|
* @example
|
|
28
29
|
* ```typescript
|
|
29
|
-
* const activity = timeback.activity.
|
|
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({
|
|
36
|
+
* await activity.end({
|
|
37
|
+
* totalQuestions: 10,
|
|
38
|
+
* correctQuestions: 8,
|
|
39
|
+
* attemptNumber: 1,
|
|
40
|
+
* pctCompleteApp: 67,
|
|
41
|
+
* })
|
|
37
42
|
* ```
|
|
38
43
|
*/
|
|
39
|
-
|
|
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
|
|
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.
|
|
13
|
+
* const activity = client.activity.start({
|
|
14
14
|
* id: 'lesson-123',
|
|
15
15
|
* name: 'Algebra Basics',
|
|
16
|
-
* course: { subject: '
|
|
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 {
|
|
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
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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,
|
|
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 (
|
|
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 (
|
|
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(
|
|
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
|
|
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
|
-
|
|
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 `
|
|
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
|
-
*
|
|
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
|
* ```
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|