@timeback/sdk 0.1.6 → 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.
Files changed (117) hide show
  1. package/dist/client/adapters/react/hooks/types.d.ts +15 -0
  2. package/dist/client/adapters/react/hooks/types.d.ts.map +1 -0
  3. package/dist/client/adapters/react/hooks/useTimebackVerification.d.ts +18 -0
  4. package/dist/client/adapters/react/hooks/useTimebackVerification.d.ts.map +1 -0
  5. package/dist/client/adapters/react/index.d.ts +2 -0
  6. package/dist/client/adapters/react/index.d.ts.map +1 -1
  7. package/dist/client/adapters/react/index.js +139 -9
  8. package/dist/client/auth/bearer.d.ts +17 -0
  9. package/dist/client/auth/bearer.d.ts.map +1 -0
  10. package/dist/client/auth/index.d.ts +3 -0
  11. package/dist/client/auth/index.d.ts.map +1 -0
  12. package/dist/client/auth/types.d.ts +39 -0
  13. package/dist/client/auth/types.d.ts.map +1 -0
  14. package/dist/client/index.d.ts +2 -0
  15. package/dist/client/index.d.ts.map +1 -1
  16. package/dist/client/lib/fetch.d.ts +19 -0
  17. package/dist/client/lib/fetch.d.ts.map +1 -0
  18. package/dist/client/namespaces/user.d.ts +25 -2
  19. package/dist/client/namespaces/user.d.ts.map +1 -1
  20. package/dist/client/timeback-client.class.d.ts +15 -0
  21. package/dist/client/timeback-client.class.d.ts.map +1 -1
  22. package/dist/client/timeback-client.d.ts +3 -0
  23. package/dist/client/timeback-client.d.ts.map +1 -1
  24. package/dist/client.d.ts +2 -1
  25. package/dist/client.d.ts.map +1 -1
  26. package/dist/client.js +69 -6
  27. package/dist/edge.js +85291 -169
  28. package/dist/identity.js +85186 -74
  29. package/dist/index.js +773 -493
  30. package/dist/server/adapters/express.d.ts.map +1 -1
  31. package/dist/server/adapters/express.js +169 -193
  32. package/dist/server/adapters/native.d.ts.map +1 -1
  33. package/dist/server/adapters/native.js +32 -1
  34. package/dist/server/adapters/nextjs.js +32 -1
  35. package/dist/server/adapters/nuxt.d.ts.map +1 -1
  36. package/dist/server/adapters/nuxt.js +173 -193
  37. package/dist/server/adapters/solid-start.d.ts.map +1 -1
  38. package/dist/server/adapters/solid-start.js +173 -193
  39. package/dist/server/adapters/svelte-kit.d.ts.map +1 -1
  40. package/dist/server/adapters/svelte-kit.js +37 -1
  41. package/dist/server/adapters/tanstack-start.d.ts.map +1 -1
  42. package/dist/server/adapters/tanstack-start.js +168 -193
  43. package/dist/server/adapters/utils.d.ts +1 -1
  44. package/dist/server/adapters/utils.d.ts.map +1 -1
  45. package/dist/server/{lib/build-activity-events.d.ts → handlers/activity/caliper.d.ts} +29 -4
  46. package/dist/server/handlers/activity/caliper.d.ts.map +1 -0
  47. package/dist/server/handlers/activity/gradebook.d.ts +56 -0
  48. package/dist/server/handlers/activity/gradebook.d.ts.map +1 -0
  49. package/dist/server/handlers/activity/handler.d.ts +15 -0
  50. package/dist/server/handlers/activity/handler.d.ts.map +1 -0
  51. package/dist/server/handlers/activity/index.d.ts +9 -0
  52. package/dist/server/handlers/activity/index.d.ts.map +1 -0
  53. package/dist/server/handlers/activity/resolve.d.ts +39 -0
  54. package/dist/server/handlers/activity/resolve.d.ts.map +1 -0
  55. package/dist/server/handlers/activity/schema.d.ts +52 -0
  56. package/dist/server/handlers/activity/schema.d.ts.map +1 -0
  57. package/dist/server/handlers/activity/types.d.ts +52 -0
  58. package/dist/server/handlers/activity/types.d.ts.map +1 -0
  59. package/dist/server/handlers/identity/handler.d.ts +14 -0
  60. package/dist/server/handlers/identity/handler.d.ts.map +1 -0
  61. package/dist/server/handlers/identity/index.d.ts +8 -0
  62. package/dist/server/handlers/identity/index.d.ts.map +1 -0
  63. package/dist/server/handlers/identity/oidc.d.ts +43 -0
  64. package/dist/server/handlers/identity/oidc.d.ts.map +1 -0
  65. package/dist/server/handlers/identity/types.d.ts +24 -0
  66. package/dist/server/handlers/identity/types.d.ts.map +1 -0
  67. package/dist/server/handlers/identity-only/handler.d.ts +15 -0
  68. package/dist/server/handlers/identity-only/handler.d.ts.map +1 -0
  69. package/dist/server/handlers/identity-only/index.d.ts +8 -0
  70. package/dist/server/handlers/identity-only/index.d.ts.map +1 -0
  71. package/dist/server/handlers/identity-only/oidc.d.ts +26 -0
  72. package/dist/server/handlers/identity-only/oidc.d.ts.map +1 -0
  73. package/dist/server/handlers/identity-only/types.d.ts +19 -0
  74. package/dist/server/handlers/identity-only/types.d.ts.map +1 -0
  75. package/dist/server/handlers/index.d.ts +5 -2
  76. package/dist/server/handlers/index.d.ts.map +1 -1
  77. package/dist/server/{lib/build-user-profile.d.ts → handlers/user/enrollments.d.ts} +7 -2
  78. package/dist/server/handlers/user/enrollments.d.ts.map +1 -0
  79. package/dist/server/handlers/user/handler.d.ts +17 -0
  80. package/dist/server/handlers/user/handler.d.ts.map +1 -0
  81. package/dist/server/handlers/user/index.d.ts +10 -0
  82. package/dist/server/handlers/user/index.d.ts.map +1 -0
  83. package/dist/server/handlers/user/profile.d.ts +22 -0
  84. package/dist/server/handlers/user/profile.d.ts.map +1 -0
  85. package/dist/server/handlers/user/types.d.ts +35 -0
  86. package/dist/server/handlers/user/types.d.ts.map +1 -0
  87. package/dist/server/handlers/user/verify.d.ts +25 -0
  88. package/dist/server/handlers/user/verify.d.ts.map +1 -0
  89. package/dist/server/index.d.ts +1 -1
  90. package/dist/server/index.d.ts.map +1 -1
  91. package/dist/server/lib/index.d.ts +4 -5
  92. package/dist/server/lib/index.d.ts.map +1 -1
  93. package/dist/server/lib/resolve.d.ts +4 -42
  94. package/dist/server/lib/resolve.d.ts.map +1 -1
  95. package/dist/server/lib/sso.d.ts +86 -0
  96. package/dist/server/lib/sso.d.ts.map +1 -0
  97. package/dist/server/lib/utils.d.ts +32 -1
  98. package/dist/server/lib/utils.d.ts.map +1 -1
  99. package/dist/server/timeback-identity.d.ts.map +1 -1
  100. package/dist/server/timeback.d.ts.map +1 -1
  101. package/dist/server/types.d.ts +16 -9
  102. package/dist/server/types.d.ts.map +1 -1
  103. package/dist/shared/constants.d.ts +1 -0
  104. package/dist/shared/constants.d.ts.map +1 -1
  105. package/dist/shared/types.d.ts +15 -0
  106. package/dist/shared/types.d.ts.map +1 -1
  107. package/package.json +6 -2
  108. package/dist/server/handlers/activity.d.ts +0 -25
  109. package/dist/server/handlers/activity.d.ts.map +0 -1
  110. package/dist/server/handlers/identity-full.d.ts +0 -28
  111. package/dist/server/handlers/identity-full.d.ts.map +0 -1
  112. package/dist/server/handlers/identity-only.d.ts +0 -22
  113. package/dist/server/handlers/identity-only.d.ts.map +0 -1
  114. package/dist/server/handlers/user.d.ts +0 -31
  115. package/dist/server/handlers/user.d.ts.map +0 -1
  116. package/dist/server/lib/build-activity-events.d.ts.map +0 -1
  117. 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
- constructor(getBaseURL) {
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 fetch(`${this.getBaseURL()}${ROUTES.USER.ME}`, {
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 fetch(`${this.baseURL}${ROUTES.ACTIVITY}`, {
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({ baseURL });
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
  };