@timeback/sdk 0.1.8 → 0.1.10
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 +6 -6
- package/dist/chunk-3mqpr9vx.js +2 -0
- package/dist/chunk-92nnwa7t.js +2 -0
- package/dist/{chunk-ewsp6v3b.js → chunk-af3xwwsv.js} +5 -5
- package/dist/{chunk-07j8zre9.js → chunk-b8649tw4.js} +1 -1
- package/dist/{chunk-3886xy48.js → chunk-bd09q1fw.js} +6 -6
- package/dist/chunk-js665z11.js +1 -0
- package/dist/chunk-nsr7a2dv.js +2 -0
- package/dist/chunk-sgcwg4j6.js +1 -0
- package/dist/{chunk-9se82640.js → chunk-txwjkpfz.js} +1 -1
- package/dist/client/adapters/react/hooks/types.d.ts +34 -27
- package/dist/client/adapters/react/hooks/types.d.ts.map +1 -1
- package/dist/client/adapters/react/hooks/useTimebackVerification.d.ts +17 -5
- package/dist/client/adapters/react/hooks/useTimebackVerification.d.ts.map +1 -1
- package/dist/client/adapters/react/index.d.ts +1 -1
- package/dist/client/adapters/react/index.d.ts.map +1 -1
- package/dist/client/adapters/react/index.js +2 -2
- package/dist/client/adapters/react/provider.d.ts.map +1 -1
- package/dist/client/adapters/solid/primitives/createTimebackVerification.d.ts +3 -1
- package/dist/client/adapters/solid/primitives/createTimebackVerification.d.ts.map +1 -1
- package/dist/client/adapters/solid/primitives/createTimebackVerification.ts +55 -15
- package/dist/client/adapters/solid/types.d.ts +25 -29
- package/dist/client/adapters/solid/types.d.ts.map +1 -1
- package/dist/client/adapters/solid/types.ts +27 -18
- package/dist/client/adapters/svelte/stores/client.d.ts.map +1 -1
- package/dist/client/adapters/svelte/stores/client.ts +2 -9
- package/dist/client/adapters/svelte/stores/profile.d.ts +1 -1
- package/dist/client/adapters/svelte/stores/profile.d.ts.map +1 -1
- package/dist/client/adapters/svelte/stores/profile.ts +4 -11
- package/dist/client/adapters/svelte/stores/verification.d.ts +1 -1
- package/dist/client/adapters/svelte/stores/verification.d.ts.map +1 -1
- package/dist/client/adapters/svelte/stores/verification.ts +90 -17
- package/dist/client/adapters/svelte/types.d.ts +1 -29
- package/dist/client/adapters/svelte/types.d.ts.map +1 -1
- package/dist/client/adapters/vue/composables/useTimebackVerification.d.ts +3 -1
- package/dist/client/adapters/vue/composables/useTimebackVerification.d.ts.map +1 -1
- package/dist/client/adapters/vue/composables/useTimebackVerification.ts +59 -18
- package/dist/client/adapters/vue/provider.d.ts.map +1 -1
- package/dist/client/adapters/vue/provider.ts +4 -11
- package/dist/client/adapters/vue/types.d.ts +25 -29
- package/dist/client/adapters/vue/types.d.ts.map +1 -1
- package/dist/client/adapters/vue/types.ts +27 -18
- package/dist/client/auth/types.d.ts +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/lib/activity/activity.class.d.ts +130 -22
- package/dist/client/lib/activity/activity.class.d.ts.map +1 -1
- package/dist/client/lib/activity/transport.d.ts +15 -0
- package/dist/client/lib/activity/transport.d.ts.map +1 -0
- package/dist/client/lib/activity/types.d.ts +53 -0
- package/dist/client/lib/activity/types.d.ts.map +1 -0
- package/dist/client/lib/utils.d.ts +33 -0
- package/dist/client/lib/utils.d.ts.map +1 -1
- package/dist/client/lib/utils.ts +109 -0
- package/dist/client/namespaces/activity.d.ts +45 -6
- package/dist/client/namespaces/activity.d.ts.map +1 -1
- package/dist/client/timeback-client.class.d.ts +7 -1
- package/dist/client/timeback-client.class.d.ts.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/edge.js +1 -1
- package/dist/identity.js +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -22
- package/dist/server/adapters/express.d.ts.map +1 -1
- package/dist/server/adapters/express.js +1 -1
- package/dist/server/adapters/native.d.ts.map +1 -1
- package/dist/server/adapters/native.js +1 -1
- package/dist/server/adapters/nextjs.js +1 -1
- package/dist/server/adapters/nuxt.d.ts.map +1 -1
- package/dist/server/adapters/nuxt.js +1 -1
- package/dist/server/adapters/solid-start.d.ts.map +1 -1
- package/dist/server/adapters/solid-start.js +1 -1
- package/dist/server/adapters/svelte-kit.d.ts.map +1 -1
- package/dist/server/adapters/svelte-kit.js +1 -1
- package/dist/server/adapters/tanstack-start.d.ts.map +1 -1
- package/dist/server/adapters/tanstack-start.js +1 -1
- package/dist/server/adapters/utils.d.ts +1 -1
- package/dist/server/adapters/utils.d.ts.map +1 -1
- package/dist/server/handlers/activity/caliper.d.ts +50 -14
- package/dist/server/handlers/activity/caliper.d.ts.map +1 -1
- package/dist/server/handlers/activity/heartbeat-handler.d.ts +15 -0
- package/dist/server/handlers/activity/heartbeat-handler.d.ts.map +1 -0
- package/dist/server/handlers/activity/index.d.ts +5 -3
- package/dist/server/handlers/activity/index.d.ts.map +1 -1
- package/dist/server/handlers/activity/progress.d.ts +2 -2
- package/dist/server/handlers/activity/progress.d.ts.map +1 -1
- package/dist/server/handlers/activity/schema.d.ts +40 -6
- package/dist/server/handlers/activity/schema.d.ts.map +1 -1
- package/dist/server/handlers/activity/submit-handler.d.ts +29 -0
- package/dist/server/handlers/activity/submit-handler.d.ts.map +1 -0
- package/dist/server/handlers/activity/submit.d.ts +44 -0
- package/dist/server/handlers/activity/submit.d.ts.map +1 -0
- package/dist/server/handlers/activity/types.d.ts +126 -5
- package/dist/server/handlers/activity/types.d.ts.map +1 -1
- package/dist/server/handlers/identity/handler.d.ts +23 -4
- package/dist/server/handlers/identity/handler.d.ts.map +1 -1
- package/dist/server/handlers/identity/index.d.ts +2 -2
- package/dist/server/handlers/identity/index.d.ts.map +1 -1
- package/dist/server/handlers/identity/oidc.d.ts.map +1 -1
- package/dist/server/handlers/identity/types.d.ts +0 -6
- package/dist/server/handlers/identity/types.d.ts.map +1 -1
- package/dist/server/handlers/index.d.ts +3 -3
- package/dist/server/handlers/index.d.ts.map +1 -1
- package/dist/server/handlers/user/handler.d.ts.map +1 -1
- package/dist/server/handlers/user/profile.d.ts.map +1 -1
- package/dist/server/handlers/user/types.d.ts +3 -0
- package/dist/server/handlers/user/types.d.ts.map +1 -1
- package/dist/server/handlers/user/verify.d.ts.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/lib/hooks.d.ts +20 -0
- package/dist/server/lib/hooks.d.ts.map +1 -0
- package/dist/server/lib/index.d.ts +4 -2
- package/dist/server/lib/index.d.ts.map +1 -1
- package/dist/server/lib/logger.d.ts +36 -9
- package/dist/server/lib/logger.d.ts.map +1 -1
- package/dist/server/lib/resolve.d.ts +1 -1
- package/dist/server/lib/resolve.d.ts.map +1 -1
- package/dist/server/lib/utils.d.ts +19 -1
- package/dist/server/lib/utils.d.ts.map +1 -1
- package/dist/server/lib/validation.d.ts +55 -0
- package/dist/server/lib/validation.d.ts.map +1 -0
- package/dist/server/namespaces/activity/index.d.ts +8 -0
- package/dist/server/namespaces/activity/index.d.ts.map +1 -0
- package/dist/server/namespaces/activity/record.d.ts +49 -0
- package/dist/server/namespaces/activity/record.d.ts.map +1 -0
- package/dist/server/namespaces/activity/schema.d.ts +50 -0
- package/dist/server/namespaces/activity/schema.d.ts.map +1 -0
- package/dist/server/namespaces/user/get-profile.d.ts +32 -0
- package/dist/server/namespaces/user/get-profile.d.ts.map +1 -0
- package/dist/server/namespaces/user/index.d.ts +8 -0
- package/dist/server/namespaces/user/index.d.ts.map +1 -0
- package/dist/server/namespaces/user/verify.d.ts +28 -0
- package/dist/server/namespaces/user/verify.d.ts.map +1 -0
- package/dist/server/timeback.d.ts +3 -3
- package/dist/server/timeback.d.ts.map +1 -1
- package/dist/server/types.d.ts +394 -12
- package/dist/server/types.d.ts.map +1 -1
- package/dist/shared/constants.d.ts +20 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.ts +51 -0
- package/dist/shared/index.d.ts +9 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/schemas.d.ts +57 -0
- package/dist/shared/schemas.d.ts.map +1 -0
- package/dist/shared/types.d.ts +263 -10
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.ts +620 -0
- package/package.json +5 -5
- package/dist/chunk-ahy54f2r.js +0 -2
- package/dist/chunk-j1xdrfqj.js +0 -2
- package/dist/chunk-qaa129bd.js +0 -2
- package/dist/chunk-qr0bbnsr.js +0 -1
- package/dist/chunk-rgbpvxbv.js +0 -1
- package/dist/server/handlers/activity/handler.d.ts +0 -32
- package/dist/server/handlers/activity/handler.d.ts.map +0 -1
- package/dist/shared/xp-calculator.d.ts +0 -25
- package/dist/shared/xp-calculator.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/express.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAChB,kBAAkB,EAIlB,iBAAiB,EACjB,MAAM,SAAS,CAAA;AA6FhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/express.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAChB,kBAAkB,EAIlB,iBAAiB,EACjB,MAAM,SAAS,CAAA;AA6FhB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,CAsD/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAiE3F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-
|
|
1
|
+
import"../../chunk-js665z11.js";import"../../chunk-txwjkpfz.js";import{C as _,D as Z,E as P,F as Q}from"../../chunk-3mqpr9vx.js";import{K as X}from"../../chunk-nsr7a2dv.js";import"../../chunk-b8649tw4.js";function $(C){let z=C.protocol||"http",F=C.get("host")||"localhost",J=`${z}://${F}${C.url}`,B=new Headers;for(let[M,L]of Object.entries(C.headers))if(L)B.set(M,Array.isArray(L)?L.join(", "):L);let K={method:C.method,headers:B};if(["POST","PUT","PATCH"].includes(C.method)&&C.body)K.body=JSON.stringify(C.body);return new Request(J,K)}async function V(C,z){z.status(C.status);let F={};if(C.headers.forEach((B,K)=>{F[K]=B}),z.set(F),C.status>=300&&C.status<400){let B=C.headers.get("Location");if(B){z.redirect(B);return}}let J=await C.text();z.send(J)}function Y(C){let z=Z(C);return(F,J,B)=>{let K=$(F),M=new URL(K.url).pathname;(()=>{let G=_({pathname:M,method:F.method});if(!G)return Promise.resolve(void 0);if(G==="identity.signOut")return Promise.resolve(z.identity.signOut());if(G==="identity.signIn")return z.identity.signIn(K);if(G==="identity.callback")return z.identity.callback(K);if(G==="user.me"){if(!Q(z))return Promise.resolve(void 0);return z.user.me(K)}if(G==="user.verify"){if(!Q(z))return Promise.resolve(void 0);return z.user.verify(K)}if(G==="activity.heartbeat"){if(!P(z))return Promise.resolve(void 0);return z.activity.heartbeat(K)}if(G==="activity.submit"){if(!P(z))return Promise.resolve(void 0);return z.activity.submit(K)}return Promise.resolve(void 0)})().then((G)=>{if(G)return V(G,J);B()}).catch(()=>{let G=X({error:"Internal server error"},500);return V(G,J)})}}function j(C,z){let F=Z(C);function J(B){return(K,M)=>{let L=$(K);Promise.resolve(B(L)).then((G)=>V(G,M)).catch(()=>{let G=X({error:"Internal server error"},500);return V(G,M)})}}if(z.get("/identity/signin",J((B)=>F.identity.signIn(B))),z.get("/identity/callback",J((B)=>F.identity.callback(B))),z.get("/identity/signout",J(()=>F.identity.signOut())),Q(F))z.get("/user/me",J((B)=>F.user.me(B))),z.get("/user/verify",J((B)=>F.user.verify(B)));if(P(F))z.post("/activity/heartbeat",J((B)=>F.activity.heartbeat(B))),z.post("/activity/submit",J((B)=>F.activity.submit(B)))}export{Y as toExpressMiddleware,j as mountExpressRoutes};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/native.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAYrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,gBAAgB,GAAG,oBAAoB,GAC5C,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/native.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAYrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,gBAAgB,GAAG,oBAAoB,GAC5C,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAuDrC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as Q,D as V,E as L,F as M}from"../../chunk-3mqpr9vx.js";import{K}from"../../chunk-nsr7a2dv.js";import"../../chunk-b8649tw4.js";function $(G){return typeof G==="object"&&G!==null&&"timeback"in G}function S(G){let{timeback:X,callbackPath:Y}=$(G)?G:{timeback:G,callbackPath:void 0},z=V(X);return(E)=>{let Z=new URL(E.url).pathname,_=E.method,J=Q({pathname:Z,method:_,callbackPath:Y});if(J==="identity.signIn")return z.identity.signIn(E);if(J==="identity.callback")return z.identity.callback(E);if(J==="identity.signOut")return Promise.resolve(z.identity.signOut());if(J==="user.me"){if(!M(z))return Promise.resolve(K({error:"Not found"},404));return z.user.me(E)}if(J==="user.verify"){if(!M(z))return Promise.resolve(K({error:"Not found"},404));return z.user.verify(E)}if(J==="activity.heartbeat"){if(!L(z))return Promise.resolve(K({error:"Not found"},404));return z.activity.heartbeat(E)}if(J==="activity.submit"){if(!L(z))return Promise.resolve(K({error:"Not found"},404));return z.activity.submit(E)}return Promise.resolve(K({error:"Not found"},404))}}export{S as toNativeHandler};
|
|
2
2
|
export{S as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as z}from"./native.js";import"../../chunk-
|
|
1
|
+
import{d as z}from"./native.js";import"../../chunk-3mqpr9vx.js";import"../../chunk-nsr7a2dv.js";import"../../chunk-b8649tw4.js";function F(B){let g=z(B);return{GET:g,POST:g,PUT:g,DELETE:g,PATCH:g}}export{F as toNextjsHandler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/nuxt.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,KAAK,EACX,gBAAgB,EAEhB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,MAAM,SAAS,CAAA;AAuMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAsB,WAAW,CAAC,MAAM,SAAS,aAAa,EAC7D,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"nuxt.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/nuxt.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,KAAK,EACX,gBAAgB,EAEhB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,MAAM,SAAS,CAAA;AAuMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAsB,WAAW,CAAC,MAAM,SAAS,aAAa,EAC7D,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,GACjC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAsC/B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,gBAAgB,GAAG;IAAE,QAAQ,EAAE,gBAAgB,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E,YAAY,CAiDd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-
|
|
1
|
+
import"../../chunk-js665z11.js";import"../../chunk-txwjkpfz.js";import{B as O,C as z,D as B,E as _,F as $}from"../../chunk-3mqpr9vx.js";import{K as Y}from"../../chunk-nsr7a2dv.js";import"../../chunk-b8649tw4.js";function W(x){return new Promise((D,J)=>{let L=[];x.on("data",(C)=>{if(!C)return;if(C instanceof Buffer)return void L.push(C);if(typeof C==="string")return void L.push(Buffer.from(C,"utf-8"));if(C instanceof Uint8Array)return void L.push(Buffer.from(C))}),x.on("end",()=>D(Buffer.concat(L).toString("utf-8"))),x.on("error",(C)=>{if(C instanceof Error)J(C)})})}function M(x){if(x.path)return O(x.path);if(x.request){let J=x.request.url;if(J.startsWith("http://")||J.startsWith("https://"))return new URL(J).pathname;return J.split("?")[0]??"/"}return(x.node?.req?.url?.split("?")[0]??"/")||"/"}function I(x){if(!x)return;if(Array.isArray(x))return x[0]?.trim();return x.split(",")[0]?.trim()}function T(x){let D=x.url??"/";if(D.startsWith("http://")||D.startsWith("https://"))return new URL(D).href;let J=I(x.headers["x-forwarded-proto"]),L=J==="https"?"https":J==="http"?"http":"http",Q=I(x.headers["x-forwarded-host"])||x.headers.host||"localhost";return new URL(D,`${L}://${Q}`).href}function A(x){if(x.request)return x.request.url;let D=x.node?.req;if(!D)throw Error("Cannot determine URL from Nuxt event");return T(D)}function N(x){if(x.request)return x.request.method;return x.node?.req?.method??"GET"}async function V(x){if(x.request)return x.request;let D=x.node?.req;if(!D)throw Error("Cannot convert Nuxt event to Request: no request object found");let J=A(x),L=D.method??"GET",C=new Headers;for(let[S,G]of Object.entries(D.headers))if(G)C.set(S,Array.isArray(G)?G.join(", "):G);let Q={method:L,headers:C};if(["POST","PUT","PATCH","DELETE"].includes(L)){let S=await W(D);if(S)Q.body=S}return new Request(J,Q)}async function f(x){let{timeback:D,event:J,basePath:L="/api/timeback",callbackPath:C}=x,Q=M(J),S=N(J),G=B(D),X=z({pathname:Q,method:S,basePath:L,callbackPath:C});if(!X)return;if(X==="identity.signOut")return G.identity.signOut();let K=await V(J);if(X==="identity.signIn")return G.identity.signIn(K);if(X==="identity.callback")return G.identity.callback(K);if(X==="user.me"){if(!$(G))return;return G.user.me(K)}if(X==="user.verify"){if(!$(G))return;return G.user.verify(K)}if(X==="activity.heartbeat"){if(!_(G))return;return G.activity.heartbeat(K)}if(X==="activity.submit"){if(!_(G))return;return G.activity.submit(K)}return}function g(x){let D=E(x)?x:{timeback:x},{timeback:J,callbackPath:L}=D,C=B(J),Q=async(S)=>{let G=M(S),X=N(S),K=z({pathname:G,method:X,callbackPath:L});if(!K)return Y({error:"Not found"},404);if(K==="identity.signOut")return C.identity.signOut();let Z=await V(S);if(K==="identity.signIn")return C.identity.signIn(Z);if(K==="identity.callback")return C.identity.callback(Z);if(K==="user.me"){if(!$(C))return Y({error:"Not found"},404);return C.user.me(Z)}if(K==="user.verify"){if(!$(C))return Y({error:"Not found"},404);return C.user.verify(Z)}if(K==="activity.heartbeat"){if(!_(C))return Y({error:"Not found"},404);return C.activity.heartbeat(Z)}if(K==="activity.submit"){if(!_(C))return Y({error:"Not found"},404);return C.activity.submit(Z)}return Y({error:"Not found"},404)};return{GET:Q,POST:Q,PUT:Q,DELETE:Q,PATCH:Q}}function E(x){return typeof x==="object"&&x!==null&&"timeback"in x}export{g as toNuxtHandler,f as nuxtHandler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solid-start.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/solid-start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAM7F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"solid-start.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/solid-start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAM7F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,CA4C/E;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,wBAAwB,GAC/B,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAmC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-
|
|
1
|
+
import"../../chunk-js665z11.js";import"../../chunk-txwjkpfz.js";import{C as N,D as O,E as I,F as J}from"../../chunk-3mqpr9vx.js";import{K as G}from"../../chunk-nsr7a2dv.js";import"../../chunk-b8649tw4.js";function Z(K){let B=O(K),F=(C)=>{let D=new URL(C.request.url).pathname,L=C.request.method,z=N({pathname:D,method:L});if(!z)return G({error:"Not found"},404);if(z==="identity.signOut")return B.identity.signOut();if(z==="identity.signIn")return B.identity.signIn(C.request);if(z==="identity.callback")return B.identity.callback(C.request);if(z==="user.me"){if(!J(B))return G({error:"Not found"},404);return B.user.me(C.request)}if(z==="user.verify"){if(!J(B))return G({error:"Not found"},404);return B.user.verify(C.request)}if(z==="activity.heartbeat"){if(!I(B))return G({error:"Not found"},404);return B.activity.heartbeat(C.request)}if(z==="activity.submit"){if(!I(B))return G({error:"Not found"},404);return B.activity.submit(C.request)}return G({error:"Not found"},404)};return{GET:F,POST:F,PUT:F,DELETE:F,PATCH:F}}function _(K){let{timeback:B,event:F,basePath:C="/api/timeback",callbackPath:Q}=K,D=F.request,L=new URL(D.url),z=O(B),V=L.pathname,W=D.method,E=N({pathname:V,method:W,basePath:C,callbackPath:Q});if(!E)return;if(E==="identity.signOut")return z.identity.signOut();if(E==="identity.signIn")return z.identity.signIn(D);if(E==="identity.callback")return z.identity.callback(D);if(E==="user.me"){if(!J(z))return;return z.user.me(D)}if(E==="user.verify"){if(!J(z))return;return z.user.verify(D)}if(E==="activity.heartbeat"){if(!I(z))return;return z.activity.heartbeat(D)}if(E==="activity.submit"){if(!I(z))return;return z.activity.submit(D)}return}export{Z as toSolidStartHandler,_ as solidStartHandler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte-kit.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/svelte-kit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EAErB,MAAM,SAAS,CAAA;AAMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,SAAS,qBAAqB,EAC1E,OAAO,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"svelte-kit.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/svelte-kit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EAErB,MAAM,SAAS,CAAA;AAMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,SAAS,qBAAqB,EAC1E,OAAO,EAAE,uBAAuB,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,QAAQ,CAAC,CA8DnB;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAgB7E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as Z}from"./native.js";import{
|
|
1
|
+
import{d as Z}from"./native.js";import{C as X,D as Y,E as V,F as W}from"../../chunk-3mqpr9vx.js";import"../../chunk-nsr7a2dv.js";import"../../chunk-b8649tw4.js";async function $(M){let{timeback:J,event:z,resolve:D,building:Q=!1,basePath:_="/api/timeback",callbackPath:C}=M;if(Q)return D(z);let{url:E,request:L}=z,B=Y(J),G=E.pathname,I=L.method,F=X({pathname:G,method:I,basePath:_,callbackPath:C});if(!F)return D(z);if(F==="identity.signOut")return B.identity.signOut();if(F==="identity.signIn")return await B.identity.signIn(L);if(F==="identity.callback")return await B.identity.callback(L);if(F==="user.me"){if(!W(B))return D(z);return await B.user.me(L)}if(F==="user.verify"){if(!W(B))return D(z);return await B.user.verify(L)}if(F==="activity.heartbeat"){if(!V(B))return D(z);return await B.activity.heartbeat(L)}if(F==="activity.submit"){if(!V(B))return D(z);return await B.activity.submit(L)}return D(z)}function j(M){let J=Z(M),z=(D)=>{return(Q)=>D(Q.request)};return{GET:z(J),POST:z(J),PUT:z(J),DELETE:z(J),PATCH:z(J)}}export{j as toSvelteKitHandler,$ as svelteKitHandler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack-start.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/tanstack-start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAEhB,2BAA2B,EAC3B,qBAAqB,EACrB,MAAM,SAAS,CAAA;AAMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,gBAAgB,GAAG,2BAA2B,GACnD,qBAAqB,
|
|
1
|
+
{"version":3,"file":"tanstack-start.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/tanstack-start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,gBAAgB,EAEhB,2BAA2B,EAC3B,qBAAqB,EACrB,MAAM,SAAS,CAAA;AAMhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,sBAAsB,CACrC,KAAK,EAAE,gBAAgB,GAAG,2BAA2B,GACnD,qBAAqB,CA+CvB;AAcD;;GAEG;AACH,eAAO,MAAM,oBAAoB,+BAAyB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-
|
|
1
|
+
import"../../chunk-js665z11.js";import"../../chunk-txwjkpfz.js";import{C as G,D as I,E,F}from"../../chunk-3mqpr9vx.js";import{K as B}from"../../chunk-nsr7a2dv.js";import"../../chunk-b8649tw4.js";function Q(C){let J=V(C)?C:{timeback:C},{timeback:K,callbackPath:L}=J,q=I(K),D=(x)=>{let M=new URL(x.request.url).pathname,N=x.request.method,z=G({pathname:M,method:N,callbackPath:L});if(!z)return B({error:"Not found"},404);if(z==="identity.signOut")return q.identity.signOut();if(z==="identity.signIn")return q.identity.signIn(x.request);if(z==="identity.callback")return q.identity.callback(x.request);if(z==="user.me"){if(!F(q))return B({error:"Not found"},404);return q.user.me(x.request)}if(z==="user.verify"){if(!F(q))return B({error:"Not found"},404);return q.user.verify(x.request)}if(z==="activity.heartbeat"){if(!E(q))return B({error:"Not found"},404);return q.activity.heartbeat(x.request)}if(z==="activity.submit"){if(!E(q))return B({error:"Not found"},404);return q.activity.submit(x.request)}return B({error:"Not found"},404)};return{GET:D,POST:D,PUT:D,DELETE:D,PATCH:D}}function V(C){return"timeback"in C}var Z=Q;export{Q as toTanStackStartHandler,Z as tanstackStartHandler};
|
|
@@ -12,7 +12,7 @@ type AnyHandlers = Handlers | IdentityOnlyHandlers;
|
|
|
12
12
|
/**
|
|
13
13
|
* A canonical route identifier for Timeback's built-in endpoints.
|
|
14
14
|
*/
|
|
15
|
-
type TimebackRouteId = 'identity.signIn' | 'identity.callback' | 'identity.signOut' | 'user.me' | 'user.verify' | 'activity';
|
|
15
|
+
type TimebackRouteId = 'identity.signIn' | 'identity.callback' | 'identity.signOut' | 'user.me' | 'user.verify' | 'activity.heartbeat' | 'activity.submit';
|
|
16
16
|
/**
|
|
17
17
|
* Normalize a path-like string to a pathname only (no query string).
|
|
18
18
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C;;GAEG;AACH,KAAK,WAAW,GAAG,QAAQ,GAAG,oBAAoB,CAAA;AAElD;;GAEG;AACH,KAAK,eAAe,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,kBAAkB,GAClB,SAAS,GACT,aAAa,GACb,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C;;GAEG;AACH,KAAK,WAAW,GAAG,QAAQ,GAAG,oBAAoB,CAAA;AAElD;;GAEG;AACH,KAAK,eAAe,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,kBAAkB,GAClB,SAAS,GACT,aAAa,GACb,oBAAoB,GACpB,iBAAiB,CAAA;AAEpB;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAkCD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,eAAe,GAAG,IAAI,CA0EzB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,QAAQ,IAAI,QAAQ,CAE9E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,QAAQ,IAAI,QAAQ,CAE1E"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { Environment
|
|
1
|
+
import type { TimebackActivityContext, TimebackActivityMetric, TimeSpentMetric } from '@timeback/caliper';
|
|
2
|
+
import type { Environment } from '@timeback/core';
|
|
3
3
|
import type { ActivityCourseRef, ActivityMetrics } from '../../../shared/types';
|
|
4
|
-
import type { ActivityBeforeSendData, AppConfig } from '../../types';
|
|
5
|
-
import type {
|
|
4
|
+
import type { ActivityBeforeSendData, AppConfig, TimeSpentBeforeSendData } from '../../types';
|
|
5
|
+
import type { CompletionPayload } from './types';
|
|
6
6
|
/**
|
|
7
7
|
* Activity Caliper Events
|
|
8
8
|
*
|
|
@@ -105,29 +105,65 @@ export declare function buildActivityMetrics(metrics: ActivityMetrics): Timeback
|
|
|
105
105
|
*/
|
|
106
106
|
export declare function buildTimeSpentMetrics(elapsedMs: number, pausedMs: number): TimeSpentMetric[];
|
|
107
107
|
/**
|
|
108
|
-
* Build Caliper
|
|
108
|
+
* Build the Caliper session field from a runId.
|
|
109
|
+
*
|
|
110
|
+
* The runId is a client-generated correlation ID that links heartbeat
|
|
111
|
+
* TimeSpentEvents with the eventual ActivityCompletedEvent. It maps
|
|
112
|
+
* naturally to the Caliper `session` field, which both Beyond AI and
|
|
113
|
+
* Learn with AI platforms support.
|
|
114
|
+
*
|
|
115
|
+
* @param runId - Activity run correlation ID
|
|
116
|
+
* @returns Session URI string, or undefined if no runId
|
|
117
|
+
*/
|
|
118
|
+
export declare function buildSession(runId?: string): string | undefined;
|
|
119
|
+
/**
|
|
120
|
+
* Build a Caliper ActivityCompletedEvent for a completion submission.
|
|
121
|
+
*
|
|
122
|
+
* Only builds the completion event — time-spent events are handled
|
|
123
|
+
* separately by the heartbeat handler or sendTimeSpent().
|
|
109
124
|
*
|
|
110
125
|
* @param params - Event building parameters
|
|
111
|
-
* @returns Built
|
|
126
|
+
* @returns Built event and context for the beforeActivitySend hook
|
|
112
127
|
*/
|
|
113
|
-
export declare function
|
|
128
|
+
export declare function buildCompletionEvent(params: {
|
|
114
129
|
sensor: string;
|
|
115
130
|
timebackId: string;
|
|
116
131
|
email: string;
|
|
117
|
-
payload:
|
|
132
|
+
payload: CompletionPayload;
|
|
118
133
|
course: AppConfig['courses'][number];
|
|
119
134
|
appName: string;
|
|
120
135
|
apiEnv: Environment;
|
|
121
136
|
onerosterBaseUrl: string;
|
|
122
137
|
attempt?: number;
|
|
138
|
+
runId?: string;
|
|
123
139
|
}): ActivityBeforeSendData;
|
|
124
140
|
/**
|
|
125
|
-
*
|
|
141
|
+
* Build a Caliper TimeSpentEvent for time tracking.
|
|
142
|
+
*
|
|
143
|
+
* Pure function — builds the event and hook data without creating
|
|
144
|
+
* clients or making network calls. Used by both the heartbeat handler
|
|
145
|
+
* and `sendTimeSpent()`.
|
|
126
146
|
*
|
|
127
|
-
* @param
|
|
128
|
-
* @
|
|
129
|
-
* @param activityEvent - ActivityEvent payload
|
|
130
|
-
* @param timeSpentEvent - TimeSpentEvent payload
|
|
147
|
+
* @param params - Event building parameters
|
|
148
|
+
* @returns Built event and context for the beforeTimeSpentSend hook
|
|
131
149
|
*/
|
|
132
|
-
export declare function
|
|
150
|
+
export declare function buildTimeSpentEvent(params: {
|
|
151
|
+
sensor: string;
|
|
152
|
+
timebackId: string;
|
|
153
|
+
email: string;
|
|
154
|
+
payload: {
|
|
155
|
+
id: string;
|
|
156
|
+
name: string;
|
|
157
|
+
course: ActivityCourseRef;
|
|
158
|
+
startedAt: string;
|
|
159
|
+
endedAt: string;
|
|
160
|
+
elapsedMs: number;
|
|
161
|
+
pausedMs: number;
|
|
162
|
+
};
|
|
163
|
+
course: AppConfig['courses'][number];
|
|
164
|
+
appName: string;
|
|
165
|
+
apiEnv: Environment;
|
|
166
|
+
onerosterBaseUrl: string;
|
|
167
|
+
runId?: string;
|
|
168
|
+
}): TimeSpentBeforeSendData;
|
|
133
169
|
//# sourceMappingURL=caliper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caliper.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/caliper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,
|
|
1
|
+
{"version":3,"file":"caliper.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/caliper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heartbeat Handler
|
|
3
|
+
*
|
|
4
|
+
* Minimal HTTP route handler for activity heartbeats (time-spent tracking).
|
|
5
|
+
* Only builds and sends TimeSpentEvent - no progress, attempt, XP, or gradebook writes.
|
|
6
|
+
*/
|
|
7
|
+
import type { ActivityHandler, ActivityHandlerConfig } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* Create the heartbeat POST handler.
|
|
10
|
+
*
|
|
11
|
+
* @param config - Handler configuration
|
|
12
|
+
* @returns The heartbeat request handler
|
|
13
|
+
*/
|
|
14
|
+
export declare function createHeartbeatHandler(config: ActivityHandlerConfig): ActivityHandler;
|
|
15
|
+
//# sourceMappingURL=heartbeat-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat-handler.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/heartbeat-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAyDrE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CA0GrF"}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Route handler for activity tracking and submission.
|
|
5
5
|
*/
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export
|
|
6
|
+
export { createHeartbeatHandler } from './heartbeat-handler';
|
|
7
|
+
export { createSubmitHandler } from './submit-handler';
|
|
8
|
+
export { buildActivityContext, buildActivityMetrics, buildCompletionEvent, buildTimeSpentMetrics, InvalidSensorUrlError, MissingSyncedCourseIdError, } from './caliper';
|
|
9
|
+
export { recordCompletion, sendTimeSpent } from './submit';
|
|
10
|
+
export type { ActivityHandler, ActivityHandlerConfig, ActivityUserInfo, CompletionConfig, CompletionDeps, CompletionOptions, CompletionPayload, CompletionResult, HeartbeatValidationResult, SubmitValidationResult, TimeSpentOptions, ValidatedHeartbeatPayload, ValidatedSubmitPayload, } from './types';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC1B,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE1D,YAAY,EACX,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,GACtB,MAAM,SAAS,CAAA"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { TimebackClient } from '@timeback/core';
|
|
8
8
|
import type { AppConfig, Environment } from '../../types';
|
|
9
|
-
import type {
|
|
9
|
+
import type { CompletionPayload } from './types';
|
|
10
10
|
/**
|
|
11
11
|
* Result of progress computation.
|
|
12
12
|
*/
|
|
@@ -39,7 +39,7 @@ export declare function computeProgress(params: {
|
|
|
39
39
|
client: TimebackClient;
|
|
40
40
|
courseId: string;
|
|
41
41
|
timebackId: string;
|
|
42
|
-
payload:
|
|
42
|
+
payload: CompletionPayload;
|
|
43
43
|
course: AppConfig['courses'][number];
|
|
44
44
|
env: Environment;
|
|
45
45
|
}): Promise<ProgressResult | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/progress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/progress.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAIhD;;GAEG;AACH,UAAU,cAAc;IACvB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAClC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EACpC,GAAG,EAAE,WAAW,GACd,MAAM,GAAG,SAAS,CAMpB;AAcD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE;IAC7C,MAAM,EAAE,cAAc,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,iBAAiB,CAAA;IAC1B,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;IACpC,GAAG,EAAE,WAAW,CAAA;CAChB,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAkLtC"}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import * as z from 'zod';
|
|
7
7
|
import type { AppConfig, Environment } from '../../types';
|
|
8
|
-
import type {
|
|
9
|
-
/** Zod schema for validating
|
|
10
|
-
export declare const
|
|
8
|
+
import type { HeartbeatValidationResult, SubmitValidationResult } from './types';
|
|
9
|
+
/** Zod schema for validating heartbeat payloads. */
|
|
10
|
+
export declare const heartbeatPayloadSchema: z.ZodObject<{
|
|
11
11
|
id: z.ZodString;
|
|
12
12
|
name: z.ZodString;
|
|
13
13
|
course: z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -27,25 +27,59 @@ export declare const activityPayloadSchema: z.ZodObject<{
|
|
|
27
27
|
}, z.core.$strip>, z.ZodObject<{
|
|
28
28
|
code: z.ZodString;
|
|
29
29
|
}, z.core.$strip>]>;
|
|
30
|
+
runId: z.ZodString;
|
|
30
31
|
startedAt: z.ZodISODateTime;
|
|
31
32
|
endedAt: z.ZodISODateTime;
|
|
32
33
|
elapsedMs: z.ZodNumber;
|
|
33
34
|
pausedMs: z.ZodNumber;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
/**
|
|
37
|
+
* Validate the heartbeat request body and resolve config dependencies.
|
|
38
|
+
*
|
|
39
|
+
* @param body - Raw request body
|
|
40
|
+
* @param appConfig - App configuration
|
|
41
|
+
* @param env - Environment
|
|
42
|
+
* @returns Validated data or error response
|
|
43
|
+
*/
|
|
44
|
+
export declare function validateHeartbeatRequest(body: unknown, appConfig: AppConfig, env: Environment): HeartbeatValidationResult;
|
|
45
|
+
/** Zod schema for validating submit payloads. */
|
|
46
|
+
export declare const submitPayloadSchema: z.ZodObject<{
|
|
47
|
+
id: z.ZodString;
|
|
48
|
+
name: z.ZodString;
|
|
49
|
+
course: z.ZodUnion<readonly [z.ZodObject<{
|
|
50
|
+
subject: z.ZodEnum<{
|
|
51
|
+
FastMath: "FastMath";
|
|
52
|
+
Language: "Language";
|
|
53
|
+
Math: "Math";
|
|
54
|
+
None: "None";
|
|
55
|
+
Other: "Other";
|
|
56
|
+
Reading: "Reading";
|
|
57
|
+
Science: "Science";
|
|
58
|
+
"Social Studies": "Social Studies";
|
|
59
|
+
Vocabulary: "Vocabulary";
|
|
60
|
+
Writing: "Writing";
|
|
61
|
+
}>;
|
|
62
|
+
grade: z.ZodUnion<readonly [z.ZodLiteral<-1>, z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>, z.ZodLiteral<7>, z.ZodLiteral<8>, z.ZodLiteral<9>, z.ZodLiteral<10>, z.ZodLiteral<11>, z.ZodLiteral<12>, z.ZodLiteral<13>]>;
|
|
63
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
64
|
+
code: z.ZodString;
|
|
65
|
+
}, z.core.$strip>]>;
|
|
66
|
+
runId: z.ZodString;
|
|
67
|
+
endedAt: z.ZodISODateTime;
|
|
34
68
|
metrics: z.ZodObject<{
|
|
35
69
|
totalQuestions: z.ZodOptional<z.ZodNumber>;
|
|
36
70
|
correctQuestions: z.ZodOptional<z.ZodNumber>;
|
|
37
|
-
xpEarned: z.
|
|
71
|
+
xpEarned: z.ZodNumber;
|
|
38
72
|
masteredUnits: z.ZodOptional<z.ZodNumber>;
|
|
39
73
|
}, z.core.$strip>;
|
|
40
74
|
pctComplete: z.ZodPipe<z.ZodOptional<z.ZodNumber>, z.ZodTransform<number | undefined, number | undefined>>;
|
|
41
75
|
}, z.core.$strip>;
|
|
42
76
|
/**
|
|
43
|
-
* Validate the
|
|
77
|
+
* Validate the submit request body and resolve config dependencies.
|
|
44
78
|
*
|
|
45
79
|
* @param body - Raw request body
|
|
46
80
|
* @param appConfig - App configuration
|
|
47
81
|
* @param env - Environment
|
|
48
82
|
* @returns Validated data or error response
|
|
49
83
|
*/
|
|
50
|
-
export declare function
|
|
84
|
+
export declare function validateSubmitRequest(body: unknown, appConfig: AppConfig, env: Environment): SubmitValidationResult;
|
|
51
85
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAOxB,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AA6ChF,oDAAoD;AACpD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAA;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,WAAW,GACd,yBAAyB,CAgE3B;AAMD,iDAAiD;AACjD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAW9B,CAAA;AAEF;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,WAAW,GACd,sBAAsB,CAgExB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit Handler
|
|
3
|
+
*
|
|
4
|
+
* HTTP route handler for activity completion submissions.
|
|
5
|
+
* Delegates to recordCompletion() for the shared completion pipeline.
|
|
6
|
+
* Only sends ActivityCompletedEvent — heartbeats handle time-spent events separately.
|
|
7
|
+
*/
|
|
8
|
+
import type { IdentityConfig } from '../../types';
|
|
9
|
+
import type { ActivityHandler, ActivityHandlerConfig, ActivityUserInfo } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Get user info from the request based on identity mode.
|
|
12
|
+
*
|
|
13
|
+
* @param identity - Identity configuration
|
|
14
|
+
* @param req - Incoming request
|
|
15
|
+
* @returns User info or undefined if not authenticated
|
|
16
|
+
*/
|
|
17
|
+
export declare function getActivityUserInfo(identity: IdentityConfig, req: Request): Promise<ActivityUserInfo | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Create the submit POST handler.
|
|
20
|
+
*
|
|
21
|
+
* This handler receives activity completion submissions and delegates to
|
|
22
|
+
* recordCompletion(). Time-spent tracking is handled separately by the
|
|
23
|
+
* heartbeat handler.
|
|
24
|
+
*
|
|
25
|
+
* @param config - Handler configuration
|
|
26
|
+
* @returns The submit request handler
|
|
27
|
+
*/
|
|
28
|
+
export declare function createSubmitHandler(config: ActivityHandlerConfig): ActivityHandler;
|
|
29
|
+
//# sourceMappingURL=submit-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-handler.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/submit-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAQvF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,OAAO,GACV,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAQvC;AAMD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CA8ElF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activity Submit
|
|
3
|
+
*
|
|
4
|
+
* Core functions for activity completion and time-spent event submission.
|
|
5
|
+
*
|
|
6
|
+
* - recordCompletion() — builds and sends ActivityCompletedEvent
|
|
7
|
+
* - sendTimeSpent() — builds and sends TimeSpentEvent
|
|
8
|
+
*
|
|
9
|
+
* Used by both the HTTP handlers and the programmatic
|
|
10
|
+
* `timeback.activity.record()` API.
|
|
11
|
+
*/
|
|
12
|
+
import type { CompletionConfig, CompletionDeps, CompletionOptions, CompletionResult, TimeSpentOptions } from './types';
|
|
13
|
+
export declare const defaultCompletionDeps: CompletionDeps;
|
|
14
|
+
/**
|
|
15
|
+
* Record an activity completion.
|
|
16
|
+
*
|
|
17
|
+
* Builds and sends an ActivityCompletedEvent. Handles progress computation,
|
|
18
|
+
* attempt resolution, the beforeActivitySend hook, and mastery completion
|
|
19
|
+
* entry writes.
|
|
20
|
+
*
|
|
21
|
+
* Time-spent tracking is handled separately by the heartbeat handler
|
|
22
|
+
* or sendTimeSpent().
|
|
23
|
+
*
|
|
24
|
+
* @param config - Completion configuration
|
|
25
|
+
* @param options - Completion options
|
|
26
|
+
* @param deps - Internal dependencies (for testing)
|
|
27
|
+
* @returns Completion result
|
|
28
|
+
*/
|
|
29
|
+
export declare function recordCompletion(config: CompletionConfig, options: CompletionOptions, deps?: CompletionDeps): Promise<CompletionResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Send a TimeSpentEvent for time tracking.
|
|
32
|
+
*
|
|
33
|
+
* Uses the shared client from config, resolves the user,
|
|
34
|
+
* builds and sends the TimeSpentEvent.
|
|
35
|
+
*
|
|
36
|
+
* Used by `timeback.activity.record()` when time data is provided.
|
|
37
|
+
* The HTTP heartbeat handler uses `buildTimeSpentEvent` with
|
|
38
|
+
* additional deduplication logic.
|
|
39
|
+
*
|
|
40
|
+
* @param config - Completion configuration (reuses same config shape)
|
|
41
|
+
* @param options - Time-spent options
|
|
42
|
+
*/
|
|
43
|
+
export declare function sendTimeSpent(config: CompletionConfig, options: TimeSpentOptions): Promise<void>;
|
|
44
|
+
//# sourceMappingURL=submit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../../../src/server/handlers/activity/submit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,OAAO,KAAK,EAEX,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EAEjB,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,SAAS,CAAA;AAIhB,eAAO,MAAM,qBAAqB,EAAE,cAGnC,CAAA;AAwBD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,EAC1B,IAAI,GAAE,cAAsC,GAC1C,OAAO,CAAC,gBAAgB,CAAC,CAsI3B;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
|