@timeback/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/README.md +21 -22
- package/dist/client/adapters/react/hooks/types.d.ts +15 -0
- package/dist/client/adapters/react/hooks/types.d.ts.map +1 -0
- package/dist/client/adapters/react/hooks/useTimebackVerification.d.ts +18 -0
- package/dist/client/adapters/react/hooks/useTimebackVerification.d.ts.map +1 -0
- package/dist/client/adapters/react/index.d.ts +2 -0
- package/dist/client/adapters/react/index.d.ts.map +1 -1
- package/dist/client/adapters/react/index.js +139 -9
- package/dist/client/auth/bearer.d.ts +17 -0
- package/dist/client/auth/bearer.d.ts.map +1 -0
- package/dist/client/auth/index.d.ts +3 -0
- package/dist/client/auth/index.d.ts.map +1 -0
- package/dist/client/auth/types.d.ts +39 -0
- package/dist/client/auth/types.d.ts.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/lib/fetch.d.ts +19 -0
- package/dist/client/lib/fetch.d.ts.map +1 -0
- package/dist/client/namespaces/user.d.ts +25 -2
- package/dist/client/namespaces/user.d.ts.map +1 -1
- package/dist/client/timeback-client.class.d.ts +15 -0
- package/dist/client/timeback-client.class.d.ts.map +1 -1
- package/dist/client/timeback-client.d.ts +3 -0
- package/dist/client/timeback-client.d.ts.map +1 -1
- package/dist/client.d.ts +2 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +69 -6
- package/dist/edge.d.ts +1 -1
- package/dist/edge.js +85291 -169
- package/dist/identity.js +85186 -74
- package/dist/index.js +1289 -840
- package/dist/server/adapters/express.d.ts.map +1 -1
- package/dist/server/adapters/express.js +489 -388
- package/dist/server/adapters/native.d.ts.map +1 -1
- package/dist/server/adapters/native.js +32 -1
- package/dist/server/adapters/nextjs.js +32 -1
- package/dist/server/adapters/nuxt.d.ts.map +1 -1
- package/dist/server/adapters/nuxt.js +493 -388
- package/dist/server/adapters/solid-start.d.ts.map +1 -1
- package/dist/server/adapters/solid-start.js +493 -388
- package/dist/server/adapters/svelte-kit.d.ts.map +1 -1
- package/dist/server/adapters/svelte-kit.js +37 -1
- package/dist/server/adapters/tanstack-start.d.ts.map +1 -1
- package/dist/server/adapters/tanstack-start.js +488 -388
- package/dist/server/adapters/utils.d.ts +1 -1
- package/dist/server/adapters/utils.d.ts.map +1 -1
- package/dist/server/{lib/build-activity-events.d.ts → handlers/activity/caliper.d.ts} +29 -4
- package/dist/server/handlers/activity/caliper.d.ts.map +1 -0
- package/dist/server/handlers/activity/gradebook.d.ts +56 -0
- package/dist/server/handlers/activity/gradebook.d.ts.map +1 -0
- package/dist/server/handlers/activity/handler.d.ts +15 -0
- package/dist/server/handlers/activity/handler.d.ts.map +1 -0
- package/dist/server/handlers/activity/index.d.ts +9 -0
- package/dist/server/handlers/activity/index.d.ts.map +1 -0
- package/dist/server/handlers/activity/resolve.d.ts +39 -0
- package/dist/server/handlers/activity/resolve.d.ts.map +1 -0
- package/dist/server/handlers/activity/schema.d.ts +52 -0
- package/dist/server/handlers/activity/schema.d.ts.map +1 -0
- package/dist/server/handlers/activity/types.d.ts +52 -0
- package/dist/server/handlers/activity/types.d.ts.map +1 -0
- package/dist/server/handlers/identity/handler.d.ts +14 -0
- package/dist/server/handlers/identity/handler.d.ts.map +1 -0
- package/dist/server/handlers/identity/index.d.ts +8 -0
- package/dist/server/handlers/identity/index.d.ts.map +1 -0
- package/dist/server/handlers/identity/oidc.d.ts +43 -0
- package/dist/server/handlers/identity/oidc.d.ts.map +1 -0
- package/dist/server/handlers/identity/types.d.ts +24 -0
- package/dist/server/handlers/identity/types.d.ts.map +1 -0
- package/dist/server/handlers/identity-only/handler.d.ts +15 -0
- package/dist/server/handlers/identity-only/handler.d.ts.map +1 -0
- package/dist/server/handlers/identity-only/index.d.ts +8 -0
- package/dist/server/handlers/identity-only/index.d.ts.map +1 -0
- package/dist/server/handlers/identity-only/oidc.d.ts +26 -0
- package/dist/server/handlers/identity-only/oidc.d.ts.map +1 -0
- package/dist/server/handlers/identity-only/types.d.ts +19 -0
- package/dist/server/handlers/identity-only/types.d.ts.map +1 -0
- package/dist/server/handlers/index.d.ts +5 -2
- package/dist/server/handlers/index.d.ts.map +1 -1
- package/dist/server/{lib/build-user-profile.d.ts → handlers/user/enrollments.d.ts} +7 -2
- package/dist/server/handlers/user/enrollments.d.ts.map +1 -0
- package/dist/server/handlers/user/handler.d.ts +17 -0
- package/dist/server/handlers/user/handler.d.ts.map +1 -0
- package/dist/server/handlers/user/index.d.ts +10 -0
- package/dist/server/handlers/user/index.d.ts.map +1 -0
- package/dist/server/handlers/user/profile.d.ts +22 -0
- package/dist/server/handlers/user/profile.d.ts.map +1 -0
- package/dist/server/handlers/user/types.d.ts +35 -0
- package/dist/server/handlers/user/types.d.ts.map +1 -0
- package/dist/server/handlers/user/verify.d.ts +25 -0
- package/dist/server/handlers/user/verify.d.ts.map +1 -0
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/lib/index.d.ts +4 -5
- package/dist/server/lib/index.d.ts.map +1 -1
- package/dist/server/lib/resolve.d.ts +4 -42
- package/dist/server/lib/resolve.d.ts.map +1 -1
- package/dist/server/lib/sso.d.ts +86 -0
- package/dist/server/lib/sso.d.ts.map +1 -0
- package/dist/server/lib/utils.d.ts +32 -1
- package/dist/server/lib/utils.d.ts.map +1 -1
- package/dist/server/timeback-identity.d.ts +2 -2
- package/dist/server/timeback-identity.d.ts.map +1 -1
- package/dist/server/timeback.d.ts.map +1 -1
- package/dist/server/types.d.ts +19 -12
- package/dist/server/types.d.ts.map +1 -1
- package/dist/shared/constants.d.ts +1 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/types.d.ts +18 -3
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/config.d.ts +0 -20
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -0
- package/dist/server/handlers/activity.d.ts +0 -25
- package/dist/server/handlers/activity.d.ts.map +0 -1
- package/dist/server/handlers/identity-full.d.ts +0 -28
- package/dist/server/handlers/identity-full.d.ts.map +0 -1
- package/dist/server/handlers/identity-only.d.ts +0 -22
- package/dist/server/handlers/identity-only.d.ts.map +0 -1
- package/dist/server/handlers/user.d.ts +0 -31
- package/dist/server/handlers/user.d.ts.map +0 -1
- package/dist/server/lib/build-activity-events.d.ts.map +0 -1
- package/dist/server/lib/build-user-profile.d.ts.map +0 -1
package/dist/client.js
CHANGED
|
@@ -8,7 +8,8 @@ var ROUTES = {
|
|
|
8
8
|
CALLBACK: "/identity/callback"
|
|
9
9
|
},
|
|
10
10
|
USER: {
|
|
11
|
-
ME: "/user/me"
|
|
11
|
+
ME: "/user/me",
|
|
12
|
+
VERIFY: "/user/verify"
|
|
12
13
|
}
|
|
13
14
|
};
|
|
14
15
|
|
|
@@ -23,6 +24,15 @@ function getDefaultBaseURL() {
|
|
|
23
24
|
return `${window.location.origin}${DEFAULT_BASE_PATH}`;
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
// src/client/lib/fetch.ts
|
|
28
|
+
function getDefaultFetch() {
|
|
29
|
+
const globalFetch = typeof globalThis === "undefined" ? undefined : globalThis.fetch;
|
|
30
|
+
if (!globalFetch) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
return (input, init) => globalThis.fetch(input, init);
|
|
34
|
+
}
|
|
35
|
+
|
|
26
36
|
// src/client/lib/activity/activity.class.ts
|
|
27
37
|
class Activity {
|
|
28
38
|
params;
|
|
@@ -128,14 +138,16 @@ class Auth {
|
|
|
128
138
|
// src/client/namespaces/user.ts
|
|
129
139
|
class User {
|
|
130
140
|
getBaseURL;
|
|
131
|
-
|
|
141
|
+
fetchImpl;
|
|
142
|
+
constructor(getBaseURL, fetchImpl) {
|
|
132
143
|
this.getBaseURL = getBaseURL;
|
|
144
|
+
this.fetchImpl = fetchImpl;
|
|
133
145
|
}
|
|
134
146
|
async fetch() {
|
|
135
147
|
if (!isBrowser()) {
|
|
136
148
|
throw new Error("user.fetch() requires a browser environment");
|
|
137
149
|
}
|
|
138
|
-
const response = await
|
|
150
|
+
const response = await this.fetchImpl(`${this.getBaseURL()}${ROUTES.USER.ME}`, {
|
|
139
151
|
method: "GET",
|
|
140
152
|
credentials: "include"
|
|
141
153
|
});
|
|
@@ -145,6 +157,24 @@ class User {
|
|
|
145
157
|
}
|
|
146
158
|
return response.json();
|
|
147
159
|
}
|
|
160
|
+
async verify() {
|
|
161
|
+
if (!isBrowser()) {
|
|
162
|
+
throw new Error("user.verify() requires a browser environment");
|
|
163
|
+
}
|
|
164
|
+
const response = await this.fetchImpl(`${this.getBaseURL()}${ROUTES.USER.VERIFY}`, {
|
|
165
|
+
method: "GET",
|
|
166
|
+
credentials: "include"
|
|
167
|
+
});
|
|
168
|
+
if (!response.ok) {
|
|
169
|
+
const errorResponse = await response.json().catch(() => ({ error: "Unknown error" }));
|
|
170
|
+
throw new Error(errorResponse.error ?? "Failed to verify Timeback user");
|
|
171
|
+
}
|
|
172
|
+
const data = await response.json();
|
|
173
|
+
if (data.verified && data.timebackId) {
|
|
174
|
+
return { verified: true, timebackId: data.timebackId };
|
|
175
|
+
}
|
|
176
|
+
return { verified: false };
|
|
177
|
+
}
|
|
148
178
|
}
|
|
149
179
|
// src/client/timeback-client.class.ts
|
|
150
180
|
class TimebackClient {
|
|
@@ -152,11 +182,19 @@ class TimebackClient {
|
|
|
152
182
|
auth;
|
|
153
183
|
user;
|
|
154
184
|
_baseURL;
|
|
185
|
+
_fetch;
|
|
155
186
|
constructor(config = {}) {
|
|
156
187
|
this._baseURL = config.baseURL;
|
|
188
|
+
const baseFetch = config.fetch ?? getDefaultFetch();
|
|
189
|
+
if (!baseFetch) {
|
|
190
|
+
throw new Error("TimebackClient requires a fetch implementation. " + "Provide `fetch` in the constructor config for non-browser runtimes.");
|
|
191
|
+
}
|
|
192
|
+
const rawPlugins = config.plugins;
|
|
193
|
+
const plugins = Array.isArray(rawPlugins) ? rawPlugins : rawPlugins ? [rawPlugins] : [];
|
|
194
|
+
this._fetch = plugins.reduce((f, p) => p.wrapFetch(f), baseFetch);
|
|
157
195
|
this.activity = new ActivityManager((payload) => this.sendActivity(payload));
|
|
158
196
|
this.auth = new Auth(() => this.baseURL);
|
|
159
|
-
this.user = new User(() => this.baseURL);
|
|
197
|
+
this.user = new User(() => this.baseURL, this._fetch);
|
|
160
198
|
}
|
|
161
199
|
get baseURL() {
|
|
162
200
|
if (!this._baseURL) {
|
|
@@ -169,7 +207,7 @@ class TimebackClient {
|
|
|
169
207
|
return this._baseURL;
|
|
170
208
|
}
|
|
171
209
|
async sendActivity(payload) {
|
|
172
|
-
const response = await
|
|
210
|
+
const response = await this._fetch(`${this.baseURL}${ROUTES.ACTIVITY}`, {
|
|
173
211
|
method: "POST",
|
|
174
212
|
headers: { "Content-Type": "application/json" },
|
|
175
213
|
body: JSON.stringify(payload),
|
|
@@ -185,10 +223,35 @@ class TimebackClient {
|
|
|
185
223
|
// src/client/timeback-client.ts
|
|
186
224
|
function createClient(config = {}) {
|
|
187
225
|
const baseURL = config.baseURL ?? getDefaultBaseURL();
|
|
188
|
-
return new TimebackClient({
|
|
226
|
+
return new TimebackClient({
|
|
227
|
+
baseURL,
|
|
228
|
+
fetch: config.fetch,
|
|
229
|
+
plugins: config.plugins
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// src/client/auth/bearer.ts
|
|
233
|
+
function bearer(options) {
|
|
234
|
+
const headerName = options.headerName ?? "Authorization";
|
|
235
|
+
const prefix = options.prefix ?? "Bearer ";
|
|
236
|
+
return {
|
|
237
|
+
wrapFetch(fetchImpl) {
|
|
238
|
+
return async (input, init) => {
|
|
239
|
+
const token = await options.getToken();
|
|
240
|
+
if (!token) {
|
|
241
|
+
throw new Error("Missing bearer token (are you authenticated yet?)");
|
|
242
|
+
}
|
|
243
|
+
const headers = new Headers(init?.headers ?? (input instanceof Request ? input.headers : undefined));
|
|
244
|
+
if (!headers.has(headerName)) {
|
|
245
|
+
headers.set(headerName, `${prefix}${token}`);
|
|
246
|
+
}
|
|
247
|
+
return fetchImpl(input, { ...init, headers });
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
};
|
|
189
251
|
}
|
|
190
252
|
export {
|
|
191
253
|
createClient,
|
|
254
|
+
bearer,
|
|
192
255
|
TimebackClient,
|
|
193
256
|
Activity
|
|
194
257
|
};
|
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
|
*/
|