@timeback/sdk 0.2.2 → 0.2.3-beta.20260326001827

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.
@@ -1,4 +1,4 @@
1
- import{d as Z1}from"./chunk-5qkmnsbm.js";import{R as j9,S as i,T as r1,U as c9}from"./chunk-1s709w5e.js";var Z4=i((Q9,T9)=>{(function(W,X){if(typeof Q9==="object"&&typeof T9==="object")T9.exports=X();else if(typeof define==="function"&&define.amd)define([],X);else if(typeof Q9==="object")Q9.esprima=X();else W.esprima=X()})(Q9,function(){return function($){var W={};function X(z){if(W[z])return W[z].exports;var M=W[z]={exports:{},id:z,loaded:!1};return $[z].call(M.exports,M,M.exports,X),M.loaded=!0,M.exports}return X.m=$,X.c=W,X.p="",X(0)}([function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(1),M=X(3),Y=X(8),H=X(15);function V(K,B,Q){var Z=null,J=function(E,b){if(Q)Q(E,b);if(Z)Z.visit(E,b)},D=typeof Q==="function"?J:null,j=!1;if(B){j=typeof B.comment==="boolean"&&B.comment;var C=typeof B.attachComment==="boolean"&&B.attachComment;if(j||C)Z=new z.CommentHandler,Z.attach=C,B.comment=!0,D=J}var I=!1;if(B&&typeof B.sourceType==="string")I=B.sourceType==="module";var O;if(B&&typeof B.jsx==="boolean"&&B.jsx)O=new M.JSXParser(K,B,D);else O=new Y.Parser(K,B,D);var R=I?O.parseModule():O.parseScript(),P=R;if(j&&Z)P.comments=Z.comments;if(O.config.tokens)P.tokens=O.tokens;if(O.config.tolerant)P.errors=O.errorHandler.errors;return P}W.parse=V;function G(K,B,Q){var Z=B||{};return Z.sourceType="module",V(K,Z,Q)}W.parseModule=G;function L(K,B,Q){var Z=B||{};return Z.sourceType="script",V(K,Z,Q)}W.parseScript=L;function U(K,B,Q){var Z=new H.Tokenizer(K,B),J;J=[];try{while(!0){var D=Z.getNextToken();if(!D)break;if(Q)D=Q(D);J.push(D)}}catch(j){Z.errorHandler.tolerate(j)}if(Z.errorHandler.tolerant)J.errors=Z.errors();return J}W.tokenize=U;var q=X(2);W.Syntax=q.Syntax,W.version="4.0.1"},function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(2),M=function(){function Y(){this.attach=!1,this.comments=[],this.stack=[],this.leading=[],this.trailing=[]}return Y.prototype.insertInnerComments=function(H,V){if(H.type===z.Syntax.BlockStatement&&H.body.length===0){var G=[];for(var L=this.leading.length-1;L>=0;--L){var U=this.leading[L];if(V.end.offset>=U.start)G.unshift(U.comment),this.leading.splice(L,1),this.trailing.splice(L,1)}if(G.length)H.innerComments=G}},Y.prototype.findTrailingComments=function(H){var V=[];if(this.trailing.length>0){for(var G=this.trailing.length-1;G>=0;--G){var L=this.trailing[G];if(L.start>=H.end.offset)V.unshift(L.comment)}return this.trailing.length=0,V}var U=this.stack[this.stack.length-1];if(U&&U.node.trailingComments){var q=U.node.trailingComments[0];if(q&&q.range[0]>=H.end.offset)V=U.node.trailingComments,delete U.node.trailingComments}return V},Y.prototype.findLeadingComments=function(H){var V=[],G;while(this.stack.length>0){var L=this.stack[this.stack.length-1];if(L&&L.start>=H.start.offset)G=L.node,this.stack.pop();else break}if(G){var U=G.leadingComments?G.leadingComments.length:0;for(var q=U-1;q>=0;--q){var K=G.leadingComments[q];if(K.range[1]<=H.start.offset)V.unshift(K),G.leadingComments.splice(q,1)}if(G.leadingComments&&G.leadingComments.length===0)delete G.leadingComments;return V}for(var q=this.leading.length-1;q>=0;--q){var L=this.leading[q];if(L.start<=H.start.offset)V.unshift(L.comment),this.leading.splice(q,1)}return V},Y.prototype.visitNode=function(H,V){if(H.type===z.Syntax.Program&&H.body.length>0)return;this.insertInnerComments(H,V);var G=this.findTrailingComments(V),L=this.findLeadingComments(V);if(L.length>0)H.leadingComments=L;if(G.length>0)H.trailingComments=G;this.stack.push({node:H,start:V.start.offset})},Y.prototype.visitComment=function(H,V){var G=H.type[0]==="L"?"Line":"Block",L={type:G,value:H.value};if(H.range)L.range=H.range;if(H.loc)L.loc=H.loc;if(this.comments.push(L),this.attach){var U={comment:{type:G,value:H.value,range:[V.start.offset,V.end.offset]},start:V.start.offset};if(H.loc)U.comment.loc=H.loc;H.type=G,this.leading.push(U),this.trailing.push(U)}},Y.prototype.visit=function(H,V){if(H.type==="LineComment")this.visitComment(H,V);else if(H.type==="BlockComment")this.visitComment(H,V);else if(this.attach)this.visitNode(H,V)},Y}();W.CommentHandler=M},function($,W){Object.defineProperty(W,"__esModule",{value:!0}),W.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function($,W,X){var z=this&&this.__extends||function(){var B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Q,Z){Q.__proto__=Z}||function(Q,Z){for(var J in Z)if(Z.hasOwnProperty(J))Q[J]=Z[J]};return function(Q,Z){B(Q,Z);function J(){this.constructor=Q}Q.prototype=Z===null?Object.create(Z):(J.prototype=Z.prototype,new J)}}();Object.defineProperty(W,"__esModule",{value:!0});var M=X(4),Y=X(5),H=X(6),V=X(7),G=X(8),L=X(13),U=X(14);L.TokenName[100]="JSXIdentifier",L.TokenName[101]="JSXText";function q(B){var Q;switch(B.type){case H.JSXSyntax.JSXIdentifier:var Z=B;Q=Z.name;break;case H.JSXSyntax.JSXNamespacedName:var J=B;Q=q(J.namespace)+":"+q(J.name);break;case H.JSXSyntax.JSXMemberExpression:var D=B;Q=q(D.object)+"."+q(D.property);break;default:break}return Q}var K=function(B){z(Q,B);function Q(Z,J,D){return B.call(this,Z,J,D)||this}return Q.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():B.prototype.parsePrimaryExpression.call(this)},Q.prototype.startJSX=function(){this.scanner.index=this.startMarker.index,this.scanner.lineNumber=this.startMarker.line,this.scanner.lineStart=this.startMarker.index-this.startMarker.column},Q.prototype.finishJSX=function(){this.nextToken()},Q.prototype.reenterJSX=function(){if(this.startJSX(),this.expectJSX("}"),this.config.tokens)this.tokens.pop()},Q.prototype.createJSXNode=function(){return this.collectComments(),{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},Q.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},Q.prototype.scanXHTMLEntity=function(Z){var J="&",D=!0,j=!1,C=!1,I=!1;while(!this.scanner.eof()&&D&&!j){var O=this.scanner.source[this.scanner.index];if(O===Z)break;if(j=O===";",J+=O,++this.scanner.index,!j)switch(J.length){case 2:C=O==="#";break;case 3:if(C)I=O==="x",D=I||M.Character.isDecimalDigit(O.charCodeAt(0)),C=C&&!I;break;default:D=D&&!(C&&!M.Character.isDecimalDigit(O.charCodeAt(0))),D=D&&!(I&&!M.Character.isHexDigit(O.charCodeAt(0)));break}}if(D&&j&&J.length>2){var R=J.substr(1,J.length-2);if(C&&R.length>1)J=String.fromCharCode(parseInt(R.substr(1),10));else if(I&&R.length>2)J=String.fromCharCode(parseInt("0"+R.substr(1),16));else if(!C&&!I&&U.XHTMLEntities[R])J=U.XHTMLEntities[R]}return J},Q.prototype.lexJSX=function(){var Z=this.scanner.source.charCodeAt(this.scanner.index);if(Z===60||Z===62||Z===47||Z===58||Z===61||Z===123||Z===125){var J=this.scanner.source[this.scanner.index++];return{type:7,value:J,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index}}if(Z===34||Z===39){var D=this.scanner.index,j=this.scanner.source[this.scanner.index++],C="";while(!this.scanner.eof()){var I=this.scanner.source[this.scanner.index++];if(I===j)break;else if(I==="&")C+=this.scanXHTMLEntity(j);else C+=I}return{type:8,value:C,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:D,end:this.scanner.index}}if(Z===46){var O=this.scanner.source.charCodeAt(this.scanner.index+1),R=this.scanner.source.charCodeAt(this.scanner.index+2),J=O===46&&R===46?"...":".",D=this.scanner.index;return this.scanner.index+=J.length,{type:7,value:J,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:D,end:this.scanner.index}}if(Z===96)return{type:10,value:"",lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};if(M.Character.isIdentifierStart(Z)&&Z!==92){var D=this.scanner.index;++this.scanner.index;while(!this.scanner.eof()){var I=this.scanner.source.charCodeAt(this.scanner.index);if(M.Character.isIdentifierPart(I)&&I!==92)++this.scanner.index;else if(I===45)++this.scanner.index;else break}var P=this.scanner.source.slice(D,this.scanner.index);return{type:100,value:P,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:D,end:this.scanner.index}}return this.scanner.lex()},Q.prototype.nextJSXToken=function(){this.collectComments(),this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;var Z=this.lexJSX();if(this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.config.tokens)this.tokens.push(this.convertToken(Z));return Z},Q.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;var Z=this.scanner.index,J="";while(!this.scanner.eof()){var D=this.scanner.source[this.scanner.index];if(D==="{"||D==="<")break;if(++this.scanner.index,J+=D,M.Character.isLineTerminator(D.charCodeAt(0))){if(++this.scanner.lineNumber,D==="\r"&&this.scanner.source[this.scanner.index]===`
1
+ import{d as Z1}from"./chunk-sekvadgt.js";import{R as j9,S as i,T as r1,U as c9}from"./chunk-1s709w5e.js";var Z4=i((Q9,T9)=>{(function(W,X){if(typeof Q9==="object"&&typeof T9==="object")T9.exports=X();else if(typeof define==="function"&&define.amd)define([],X);else if(typeof Q9==="object")Q9.esprima=X();else W.esprima=X()})(Q9,function(){return function($){var W={};function X(z){if(W[z])return W[z].exports;var M=W[z]={exports:{},id:z,loaded:!1};return $[z].call(M.exports,M,M.exports,X),M.loaded=!0,M.exports}return X.m=$,X.c=W,X.p="",X(0)}([function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(1),M=X(3),Y=X(8),H=X(15);function V(K,B,Q){var Z=null,J=function(E,b){if(Q)Q(E,b);if(Z)Z.visit(E,b)},D=typeof Q==="function"?J:null,j=!1;if(B){j=typeof B.comment==="boolean"&&B.comment;var C=typeof B.attachComment==="boolean"&&B.attachComment;if(j||C)Z=new z.CommentHandler,Z.attach=C,B.comment=!0,D=J}var I=!1;if(B&&typeof B.sourceType==="string")I=B.sourceType==="module";var O;if(B&&typeof B.jsx==="boolean"&&B.jsx)O=new M.JSXParser(K,B,D);else O=new Y.Parser(K,B,D);var R=I?O.parseModule():O.parseScript(),P=R;if(j&&Z)P.comments=Z.comments;if(O.config.tokens)P.tokens=O.tokens;if(O.config.tolerant)P.errors=O.errorHandler.errors;return P}W.parse=V;function G(K,B,Q){var Z=B||{};return Z.sourceType="module",V(K,Z,Q)}W.parseModule=G;function L(K,B,Q){var Z=B||{};return Z.sourceType="script",V(K,Z,Q)}W.parseScript=L;function U(K,B,Q){var Z=new H.Tokenizer(K,B),J;J=[];try{while(!0){var D=Z.getNextToken();if(!D)break;if(Q)D=Q(D);J.push(D)}}catch(j){Z.errorHandler.tolerate(j)}if(Z.errorHandler.tolerant)J.errors=Z.errors();return J}W.tokenize=U;var q=X(2);W.Syntax=q.Syntax,W.version="4.0.1"},function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(2),M=function(){function Y(){this.attach=!1,this.comments=[],this.stack=[],this.leading=[],this.trailing=[]}return Y.prototype.insertInnerComments=function(H,V){if(H.type===z.Syntax.BlockStatement&&H.body.length===0){var G=[];for(var L=this.leading.length-1;L>=0;--L){var U=this.leading[L];if(V.end.offset>=U.start)G.unshift(U.comment),this.leading.splice(L,1),this.trailing.splice(L,1)}if(G.length)H.innerComments=G}},Y.prototype.findTrailingComments=function(H){var V=[];if(this.trailing.length>0){for(var G=this.trailing.length-1;G>=0;--G){var L=this.trailing[G];if(L.start>=H.end.offset)V.unshift(L.comment)}return this.trailing.length=0,V}var U=this.stack[this.stack.length-1];if(U&&U.node.trailingComments){var q=U.node.trailingComments[0];if(q&&q.range[0]>=H.end.offset)V=U.node.trailingComments,delete U.node.trailingComments}return V},Y.prototype.findLeadingComments=function(H){var V=[],G;while(this.stack.length>0){var L=this.stack[this.stack.length-1];if(L&&L.start>=H.start.offset)G=L.node,this.stack.pop();else break}if(G){var U=G.leadingComments?G.leadingComments.length:0;for(var q=U-1;q>=0;--q){var K=G.leadingComments[q];if(K.range[1]<=H.start.offset)V.unshift(K),G.leadingComments.splice(q,1)}if(G.leadingComments&&G.leadingComments.length===0)delete G.leadingComments;return V}for(var q=this.leading.length-1;q>=0;--q){var L=this.leading[q];if(L.start<=H.start.offset)V.unshift(L.comment),this.leading.splice(q,1)}return V},Y.prototype.visitNode=function(H,V){if(H.type===z.Syntax.Program&&H.body.length>0)return;this.insertInnerComments(H,V);var G=this.findTrailingComments(V),L=this.findLeadingComments(V);if(L.length>0)H.leadingComments=L;if(G.length>0)H.trailingComments=G;this.stack.push({node:H,start:V.start.offset})},Y.prototype.visitComment=function(H,V){var G=H.type[0]==="L"?"Line":"Block",L={type:G,value:H.value};if(H.range)L.range=H.range;if(H.loc)L.loc=H.loc;if(this.comments.push(L),this.attach){var U={comment:{type:G,value:H.value,range:[V.start.offset,V.end.offset]},start:V.start.offset};if(H.loc)U.comment.loc=H.loc;H.type=G,this.leading.push(U),this.trailing.push(U)}},Y.prototype.visit=function(H,V){if(H.type==="LineComment")this.visitComment(H,V);else if(H.type==="BlockComment")this.visitComment(H,V);else if(this.attach)this.visitNode(H,V)},Y}();W.CommentHandler=M},function($,W){Object.defineProperty(W,"__esModule",{value:!0}),W.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function($,W,X){var z=this&&this.__extends||function(){var B=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Q,Z){Q.__proto__=Z}||function(Q,Z){for(var J in Z)if(Z.hasOwnProperty(J))Q[J]=Z[J]};return function(Q,Z){B(Q,Z);function J(){this.constructor=Q}Q.prototype=Z===null?Object.create(Z):(J.prototype=Z.prototype,new J)}}();Object.defineProperty(W,"__esModule",{value:!0});var M=X(4),Y=X(5),H=X(6),V=X(7),G=X(8),L=X(13),U=X(14);L.TokenName[100]="JSXIdentifier",L.TokenName[101]="JSXText";function q(B){var Q;switch(B.type){case H.JSXSyntax.JSXIdentifier:var Z=B;Q=Z.name;break;case H.JSXSyntax.JSXNamespacedName:var J=B;Q=q(J.namespace)+":"+q(J.name);break;case H.JSXSyntax.JSXMemberExpression:var D=B;Q=q(D.object)+"."+q(D.property);break;default:break}return Q}var K=function(B){z(Q,B);function Q(Z,J,D){return B.call(this,Z,J,D)||this}return Q.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():B.prototype.parsePrimaryExpression.call(this)},Q.prototype.startJSX=function(){this.scanner.index=this.startMarker.index,this.scanner.lineNumber=this.startMarker.line,this.scanner.lineStart=this.startMarker.index-this.startMarker.column},Q.prototype.finishJSX=function(){this.nextToken()},Q.prototype.reenterJSX=function(){if(this.startJSX(),this.expectJSX("}"),this.config.tokens)this.tokens.pop()},Q.prototype.createJSXNode=function(){return this.collectComments(),{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},Q.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},Q.prototype.scanXHTMLEntity=function(Z){var J="&",D=!0,j=!1,C=!1,I=!1;while(!this.scanner.eof()&&D&&!j){var O=this.scanner.source[this.scanner.index];if(O===Z)break;if(j=O===";",J+=O,++this.scanner.index,!j)switch(J.length){case 2:C=O==="#";break;case 3:if(C)I=O==="x",D=I||M.Character.isDecimalDigit(O.charCodeAt(0)),C=C&&!I;break;default:D=D&&!(C&&!M.Character.isDecimalDigit(O.charCodeAt(0))),D=D&&!(I&&!M.Character.isHexDigit(O.charCodeAt(0)));break}}if(D&&j&&J.length>2){var R=J.substr(1,J.length-2);if(C&&R.length>1)J=String.fromCharCode(parseInt(R.substr(1),10));else if(I&&R.length>2)J=String.fromCharCode(parseInt("0"+R.substr(1),16));else if(!C&&!I&&U.XHTMLEntities[R])J=U.XHTMLEntities[R]}return J},Q.prototype.lexJSX=function(){var Z=this.scanner.source.charCodeAt(this.scanner.index);if(Z===60||Z===62||Z===47||Z===58||Z===61||Z===123||Z===125){var J=this.scanner.source[this.scanner.index++];return{type:7,value:J,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index}}if(Z===34||Z===39){var D=this.scanner.index,j=this.scanner.source[this.scanner.index++],C="";while(!this.scanner.eof()){var I=this.scanner.source[this.scanner.index++];if(I===j)break;else if(I==="&")C+=this.scanXHTMLEntity(j);else C+=I}return{type:8,value:C,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:D,end:this.scanner.index}}if(Z===46){var O=this.scanner.source.charCodeAt(this.scanner.index+1),R=this.scanner.source.charCodeAt(this.scanner.index+2),J=O===46&&R===46?"...":".",D=this.scanner.index;return this.scanner.index+=J.length,{type:7,value:J,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:D,end:this.scanner.index}}if(Z===96)return{type:10,value:"",lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};if(M.Character.isIdentifierStart(Z)&&Z!==92){var D=this.scanner.index;++this.scanner.index;while(!this.scanner.eof()){var I=this.scanner.source.charCodeAt(this.scanner.index);if(M.Character.isIdentifierPart(I)&&I!==92)++this.scanner.index;else if(I===45)++this.scanner.index;else break}var P=this.scanner.source.slice(D,this.scanner.index);return{type:100,value:P,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:D,end:this.scanner.index}}return this.scanner.lex()},Q.prototype.nextJSXToken=function(){this.collectComments(),this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;var Z=this.lexJSX();if(this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.config.tokens)this.tokens.push(this.convertToken(Z));return Z},Q.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;var Z=this.scanner.index,J="";while(!this.scanner.eof()){var D=this.scanner.source[this.scanner.index];if(D==="{"||D==="<")break;if(++this.scanner.index,J+=D,M.Character.isLineTerminator(D.charCodeAt(0))){if(++this.scanner.lineNumber,D==="\r"&&this.scanner.source[this.scanner.index]===`
2
2
  `)++this.scanner.index;this.scanner.lineStart=this.scanner.index}}this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart;var j={type:101,value:J,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:Z,end:this.scanner.index};if(J.length>0&&this.config.tokens)this.tokens.push(this.convertToken(j));return j},Q.prototype.peekJSXToken=function(){var Z=this.scanner.saveState();this.scanner.scanComments();var J=this.lexJSX();return this.scanner.restoreState(Z),J},Q.prototype.expectJSX=function(Z){var J=this.nextJSXToken();if(J.type!==7||J.value!==Z)this.throwUnexpectedToken(J)},Q.prototype.matchJSX=function(Z){var J=this.peekJSXToken();return J.type===7&&J.value===Z},Q.prototype.parseJSXIdentifier=function(){var Z=this.createJSXNode(),J=this.nextJSXToken();if(J.type!==100)this.throwUnexpectedToken(J);return this.finalize(Z,new Y.JSXIdentifier(J.value))},Q.prototype.parseJSXElementName=function(){var Z=this.createJSXNode(),J=this.parseJSXIdentifier();if(this.matchJSX(":")){var D=J;this.expectJSX(":");var j=this.parseJSXIdentifier();J=this.finalize(Z,new Y.JSXNamespacedName(D,j))}else if(this.matchJSX("."))while(this.matchJSX(".")){var C=J;this.expectJSX(".");var I=this.parseJSXIdentifier();J=this.finalize(Z,new Y.JSXMemberExpression(C,I))}return J},Q.prototype.parseJSXAttributeName=function(){var Z=this.createJSXNode(),J,D=this.parseJSXIdentifier();if(this.matchJSX(":")){var j=D;this.expectJSX(":");var C=this.parseJSXIdentifier();J=this.finalize(Z,new Y.JSXNamespacedName(j,C))}else J=D;return J},Q.prototype.parseJSXStringLiteralAttribute=function(){var Z=this.createJSXNode(),J=this.nextJSXToken();if(J.type!==8)this.throwUnexpectedToken(J);var D=this.getTokenRaw(J);return this.finalize(Z,new V.Literal(J.value,D))},Q.prototype.parseJSXExpressionAttribute=function(){var Z=this.createJSXNode();if(this.expectJSX("{"),this.finishJSX(),this.match("}"))this.tolerateError("JSX attributes must only be assigned a non-empty expression");var J=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(Z,new Y.JSXExpressionContainer(J))},Q.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()},Q.prototype.parseJSXNameValueAttribute=function(){var Z=this.createJSXNode(),J=this.parseJSXAttributeName(),D=null;if(this.matchJSX("="))this.expectJSX("="),D=this.parseJSXAttributeValue();return this.finalize(Z,new Y.JSXAttribute(J,D))},Q.prototype.parseJSXSpreadAttribute=function(){var Z=this.createJSXNode();this.expectJSX("{"),this.expectJSX("..."),this.finishJSX();var J=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(Z,new Y.JSXSpreadAttribute(J))},Q.prototype.parseJSXAttributes=function(){var Z=[];while(!this.matchJSX("/")&&!this.matchJSX(">")){var J=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();Z.push(J)}return Z},Q.prototype.parseJSXOpeningElement=function(){var Z=this.createJSXNode();this.expectJSX("<");var J=this.parseJSXElementName(),D=this.parseJSXAttributes(),j=this.matchJSX("/");if(j)this.expectJSX("/");return this.expectJSX(">"),this.finalize(Z,new Y.JSXOpeningElement(J,j,D))},Q.prototype.parseJSXBoundaryElement=function(){var Z=this.createJSXNode();if(this.expectJSX("<"),this.matchJSX("/")){this.expectJSX("/");var J=this.parseJSXElementName();return this.expectJSX(">"),this.finalize(Z,new Y.JSXClosingElement(J))}var D=this.parseJSXElementName(),j=this.parseJSXAttributes(),C=this.matchJSX("/");if(C)this.expectJSX("/");return this.expectJSX(">"),this.finalize(Z,new Y.JSXOpeningElement(D,C,j))},Q.prototype.parseJSXEmptyExpression=function(){var Z=this.createJSXChildNode();return this.collectComments(),this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.finalize(Z,new Y.JSXEmptyExpression)},Q.prototype.parseJSXExpressionContainer=function(){var Z=this.createJSXNode();this.expectJSX("{");var J;if(this.matchJSX("}"))J=this.parseJSXEmptyExpression(),this.expectJSX("}");else this.finishJSX(),J=this.parseAssignmentExpression(),this.reenterJSX();return this.finalize(Z,new Y.JSXExpressionContainer(J))},Q.prototype.parseJSXChildren=function(){var Z=[];while(!this.scanner.eof()){var J=this.createJSXChildNode(),D=this.nextJSXText();if(D.start<D.end){var j=this.getTokenRaw(D),C=this.finalize(J,new Y.JSXText(D.value,j));Z.push(C)}if(this.scanner.source[this.scanner.index]==="{"){var I=this.parseJSXExpressionContainer();Z.push(I)}else break}return Z},Q.prototype.parseComplexJSXElement=function(Z){var J=[];while(!this.scanner.eof()){Z.children=Z.children.concat(this.parseJSXChildren());var D=this.createJSXChildNode(),j=this.parseJSXBoundaryElement();if(j.type===H.JSXSyntax.JSXOpeningElement){var C=j;if(C.selfClosing){var I=this.finalize(D,new Y.JSXElement(C,[],null));Z.children.push(I)}else J.push(Z),Z={node:D,opening:C,closing:null,children:[]}}if(j.type===H.JSXSyntax.JSXClosingElement){Z.closing=j;var O=q(Z.opening.name),R=q(Z.closing.name);if(O!==R)this.tolerateError("Expected corresponding JSX closing tag for %0",O);if(J.length>0){var I=this.finalize(Z.node,new Y.JSXElement(Z.opening,Z.children,Z.closing));Z=J[J.length-1],Z.children.push(I),J.pop()}else break}}return Z},Q.prototype.parseJSXElement=function(){var Z=this.createJSXNode(),J=this.parseJSXOpeningElement(),D=[],j=null;if(!J.selfClosing){var C=this.parseComplexJSXElement({node:Z,opening:J,closing:j,children:D});D=C.children,j=C.closing}return this.finalize(Z,new Y.JSXElement(J,D,j))},Q.prototype.parseJSXRoot=function(){if(this.config.tokens)this.tokens.pop();this.startJSX();var Z=this.parseJSXElement();return this.finishJSX(),Z},Q.prototype.isStartOfExpression=function(){return B.prototype.isStartOfExpression.call(this)||this.match("<")},Q}(G.Parser);W.JSXParser=K},function($,W){Object.defineProperty(W,"__esModule",{value:!0});var X={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};W.Character={fromCodePoint:function(z){return z<65536?String.fromCharCode(z):String.fromCharCode(55296+(z-65536>>10))+String.fromCharCode(56320+(z-65536&1023))},isWhiteSpace:function(z){return z===32||z===9||z===11||z===12||z===160||z>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(z)>=0},isLineTerminator:function(z){return z===10||z===13||z===8232||z===8233},isIdentifierStart:function(z){return z===36||z===95||z>=65&&z<=90||z>=97&&z<=122||z===92||z>=128&&X.NonAsciiIdentifierStart.test(W.Character.fromCodePoint(z))},isIdentifierPart:function(z){return z===36||z===95||z>=65&&z<=90||z>=97&&z<=122||z>=48&&z<=57||z===92||z>=128&&X.NonAsciiIdentifierPart.test(W.Character.fromCodePoint(z))},isDecimalDigit:function(z){return z>=48&&z<=57},isHexDigit:function(z){return z>=48&&z<=57||z>=65&&z<=70||z>=97&&z<=102},isOctalDigit:function(z){return z>=48&&z<=55}}},function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(6),M=function(){function Z(J){this.type=z.JSXSyntax.JSXClosingElement,this.name=J}return Z}();W.JSXClosingElement=M;var Y=function(){function Z(J,D,j){this.type=z.JSXSyntax.JSXElement,this.openingElement=J,this.children=D,this.closingElement=j}return Z}();W.JSXElement=Y;var H=function(){function Z(){this.type=z.JSXSyntax.JSXEmptyExpression}return Z}();W.JSXEmptyExpression=H;var V=function(){function Z(J){this.type=z.JSXSyntax.JSXExpressionContainer,this.expression=J}return Z}();W.JSXExpressionContainer=V;var G=function(){function Z(J){this.type=z.JSXSyntax.JSXIdentifier,this.name=J}return Z}();W.JSXIdentifier=G;var L=function(){function Z(J,D){this.type=z.JSXSyntax.JSXMemberExpression,this.object=J,this.property=D}return Z}();W.JSXMemberExpression=L;var U=function(){function Z(J,D){this.type=z.JSXSyntax.JSXAttribute,this.name=J,this.value=D}return Z}();W.JSXAttribute=U;var q=function(){function Z(J,D){this.type=z.JSXSyntax.JSXNamespacedName,this.namespace=J,this.name=D}return Z}();W.JSXNamespacedName=q;var K=function(){function Z(J,D,j){this.type=z.JSXSyntax.JSXOpeningElement,this.name=J,this.selfClosing=D,this.attributes=j}return Z}();W.JSXOpeningElement=K;var B=function(){function Z(J){this.type=z.JSXSyntax.JSXSpreadAttribute,this.argument=J}return Z}();W.JSXSpreadAttribute=B;var Q=function(){function Z(J,D){this.type=z.JSXSyntax.JSXText,this.value=J,this.raw=D}return Z}();W.JSXText=Q},function($,W){Object.defineProperty(W,"__esModule",{value:!0}),W.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(2),M=function(){function N(F){this.type=z.Syntax.ArrayExpression,this.elements=F}return N}();W.ArrayExpression=M;var Y=function(){function N(F){this.type=z.Syntax.ArrayPattern,this.elements=F}return N}();W.ArrayPattern=Y;var H=function(){function N(F,T,w){this.type=z.Syntax.ArrowFunctionExpression,this.id=null,this.params=F,this.body=T,this.generator=!1,this.expression=w,this.async=!1}return N}();W.ArrowFunctionExpression=H;var V=function(){function N(F,T,w){this.type=z.Syntax.AssignmentExpression,this.operator=F,this.left=T,this.right=w}return N}();W.AssignmentExpression=V;var G=function(){function N(F,T){this.type=z.Syntax.AssignmentPattern,this.left=F,this.right=T}return N}();W.AssignmentPattern=G;var L=function(){function N(F,T,w){this.type=z.Syntax.ArrowFunctionExpression,this.id=null,this.params=F,this.body=T,this.generator=!1,this.expression=w,this.async=!0}return N}();W.AsyncArrowFunctionExpression=L;var U=function(){function N(F,T,w){this.type=z.Syntax.FunctionDeclaration,this.id=F,this.params=T,this.body=w,this.generator=!1,this.expression=!1,this.async=!0}return N}();W.AsyncFunctionDeclaration=U;var q=function(){function N(F,T,w){this.type=z.Syntax.FunctionExpression,this.id=F,this.params=T,this.body=w,this.generator=!1,this.expression=!1,this.async=!0}return N}();W.AsyncFunctionExpression=q;var K=function(){function N(F){this.type=z.Syntax.AwaitExpression,this.argument=F}return N}();W.AwaitExpression=K;var B=function(){function N(F,T,w){var f=F==="||"||F==="&&";this.type=f?z.Syntax.LogicalExpression:z.Syntax.BinaryExpression,this.operator=F,this.left=T,this.right=w}return N}();W.BinaryExpression=B;var Q=function(){function N(F){this.type=z.Syntax.BlockStatement,this.body=F}return N}();W.BlockStatement=Q;var Z=function(){function N(F){this.type=z.Syntax.BreakStatement,this.label=F}return N}();W.BreakStatement=Z;var J=function(){function N(F,T){this.type=z.Syntax.CallExpression,this.callee=F,this.arguments=T}return N}();W.CallExpression=J;var D=function(){function N(F,T){this.type=z.Syntax.CatchClause,this.param=F,this.body=T}return N}();W.CatchClause=D;var j=function(){function N(F){this.type=z.Syntax.ClassBody,this.body=F}return N}();W.ClassBody=j;var C=function(){function N(F,T,w){this.type=z.Syntax.ClassDeclaration,this.id=F,this.superClass=T,this.body=w}return N}();W.ClassDeclaration=C;var I=function(){function N(F,T,w){this.type=z.Syntax.ClassExpression,this.id=F,this.superClass=T,this.body=w}return N}();W.ClassExpression=I;var O=function(){function N(F,T){this.type=z.Syntax.MemberExpression,this.computed=!0,this.object=F,this.property=T}return N}();W.ComputedMemberExpression=O;var R=function(){function N(F,T,w){this.type=z.Syntax.ConditionalExpression,this.test=F,this.consequent=T,this.alternate=w}return N}();W.ConditionalExpression=R;var P=function(){function N(F){this.type=z.Syntax.ContinueStatement,this.label=F}return N}();W.ContinueStatement=P;var E=function(){function N(){this.type=z.Syntax.DebuggerStatement}return N}();W.DebuggerStatement=E;var b=function(){function N(F,T){this.type=z.Syntax.ExpressionStatement,this.expression=F,this.directive=T}return N}();W.Directive=b;var y=function(){function N(F,T){this.type=z.Syntax.DoWhileStatement,this.body=F,this.test=T}return N}();W.DoWhileStatement=y;var g=function(){function N(){this.type=z.Syntax.EmptyStatement}return N}();W.EmptyStatement=g;var a=function(){function N(F){this.type=z.Syntax.ExportAllDeclaration,this.source=F}return N}();W.ExportAllDeclaration=a;var V9=function(){function N(F){this.type=z.Syntax.ExportDefaultDeclaration,this.declaration=F}return N}();W.ExportDefaultDeclaration=V9;var $1=function(){function N(F,T,w){this.type=z.Syntax.ExportNamedDeclaration,this.declaration=F,this.specifiers=T,this.source=w}return N}();W.ExportNamedDeclaration=$1;var z1=function(){function N(F,T){this.type=z.Syntax.ExportSpecifier,this.exported=T,this.local=F}return N}();W.ExportSpecifier=z1;var J1=function(){function N(F){this.type=z.Syntax.ExpressionStatement,this.expression=F}return N}();W.ExpressionStatement=J1;var U1=function(){function N(F,T,w){this.type=z.Syntax.ForInStatement,this.left=F,this.right=T,this.body=w,this.each=!1}return N}();W.ForInStatement=U1;var H1=function(){function N(F,T,w){this.type=z.Syntax.ForOfStatement,this.left=F,this.right=T,this.body=w}return N}();W.ForOfStatement=H1;var K1=function(){function N(F,T,w,f){this.type=z.Syntax.ForStatement,this.init=F,this.test=T,this.update=w,this.body=f}return N}();W.ForStatement=K1;var X1=function(){function N(F,T,w,f){this.type=z.Syntax.FunctionDeclaration,this.id=F,this.params=T,this.body=w,this.generator=f,this.expression=!1,this.async=!1}return N}();W.FunctionDeclaration=X1;var G1=function(){function N(F,T,w,f){this.type=z.Syntax.FunctionExpression,this.id=F,this.params=T,this.body=w,this.generator=f,this.expression=!1,this.async=!1}return N}();W.FunctionExpression=G1;var q1=function(){function N(F){this.type=z.Syntax.Identifier,this.name=F}return N}();W.Identifier=q1;var Y1=function(){function N(F,T,w){this.type=z.Syntax.IfStatement,this.test=F,this.consequent=T,this.alternate=w}return N}();W.IfStatement=Y1;var M1=function(){function N(F,T){this.type=z.Syntax.ImportDeclaration,this.specifiers=F,this.source=T}return N}();W.ImportDeclaration=M1;var D1=function(){function N(F){this.type=z.Syntax.ImportDefaultSpecifier,this.local=F}return N}();W.ImportDefaultSpecifier=D1;var j1=function(){function N(F){this.type=z.Syntax.ImportNamespaceSpecifier,this.local=F}return N}();W.ImportNamespaceSpecifier=j1;var L1=function(){function N(F,T){this.type=z.Syntax.ImportSpecifier,this.local=F,this.imported=T}return N}();W.ImportSpecifier=L1;var V1=function(){function N(F,T){this.type=z.Syntax.LabeledStatement,this.label=F,this.body=T}return N}();W.LabeledStatement=V1;var N1=function(){function N(F,T){this.type=z.Syntax.Literal,this.value=F,this.raw=T}return N}();W.Literal=N1;var F1=function(){function N(F,T){this.type=z.Syntax.MetaProperty,this.meta=F,this.property=T}return N}();W.MetaProperty=F1;var C1=function(){function N(F,T,w,f,N9){this.type=z.Syntax.MethodDefinition,this.key=F,this.computed=T,this.value=w,this.kind=f,this.static=N9}return N}();W.MethodDefinition=C1;var T1=function(){function N(F){this.type=z.Syntax.Program,this.body=F,this.sourceType="module"}return N}();W.Module=T1;var I1=function(){function N(F,T){this.type=z.Syntax.NewExpression,this.callee=F,this.arguments=T}return N}();W.NewExpression=I1;var O1=function(){function N(F){this.type=z.Syntax.ObjectExpression,this.properties=F}return N}();W.ObjectExpression=O1;var S1=function(){function N(F){this.type=z.Syntax.ObjectPattern,this.properties=F}return N}();W.ObjectPattern=S1;var R1=function(){function N(F,T,w,f,N9,s1){this.type=z.Syntax.Property,this.key=T,this.computed=w,this.value=f,this.kind=F,this.method=N9,this.shorthand=s1}return N}();W.Property=R1;var P1=function(){function N(F,T,w,f){this.type=z.Syntax.Literal,this.value=F,this.raw=T,this.regex={pattern:w,flags:f}}return N}();W.RegexLiteral=P1;var w1=function(){function N(F){this.type=z.Syntax.RestElement,this.argument=F}return N}();W.RestElement=w1;var A1=function(){function N(F){this.type=z.Syntax.ReturnStatement,this.argument=F}return N}();W.ReturnStatement=A1;var E1=function(){function N(F){this.type=z.Syntax.Program,this.body=F,this.sourceType="script"}return N}();W.Script=E1;var b1=function(){function N(F){this.type=z.Syntax.SequenceExpression,this.expressions=F}return N}();W.SequenceExpression=b1;var v1=function(){function N(F){this.type=z.Syntax.SpreadElement,this.argument=F}return N}();W.SpreadElement=v1;var y1=function(){function N(F,T){this.type=z.Syntax.MemberExpression,this.computed=!1,this.object=F,this.property=T}return N}();W.StaticMemberExpression=y1;var x1=function(){function N(){this.type=z.Syntax.Super}return N}();W.Super=x1;var g1=function(){function N(F,T){this.type=z.Syntax.SwitchCase,this.test=F,this.consequent=T}return N}();W.SwitchCase=g1;var f1=function(){function N(F,T){this.type=z.Syntax.SwitchStatement,this.discriminant=F,this.cases=T}return N}();W.SwitchStatement=f1;var k1=function(){function N(F,T){this.type=z.Syntax.TaggedTemplateExpression,this.tag=F,this.quasi=T}return N}();W.TaggedTemplateExpression=k1;var _1=function(){function N(F,T){this.type=z.Syntax.TemplateElement,this.value=F,this.tail=T}return N}();W.TemplateElement=_1;var h1=function(){function N(F,T){this.type=z.Syntax.TemplateLiteral,this.quasis=F,this.expressions=T}return N}();W.TemplateLiteral=h1;var u1=function(){function N(){this.type=z.Syntax.ThisExpression}return N}();W.ThisExpression=u1;var d1=function(){function N(F){this.type=z.Syntax.ThrowStatement,this.argument=F}return N}();W.ThrowStatement=d1;var l1=function(){function N(F,T,w){this.type=z.Syntax.TryStatement,this.block=F,this.handler=T,this.finalizer=w}return N}();W.TryStatement=l1;var m1=function(){function N(F,T){this.type=z.Syntax.UnaryExpression,this.operator=F,this.argument=T,this.prefix=!0}return N}();W.UnaryExpression=m1;var p1=function(){function N(F,T,w){this.type=z.Syntax.UpdateExpression,this.operator=F,this.argument=T,this.prefix=w}return N}();W.UpdateExpression=p1;var c1=function(){function N(F,T){this.type=z.Syntax.VariableDeclaration,this.declarations=F,this.kind=T}return N}();W.VariableDeclaration=c1;var i1=function(){function N(F,T){this.type=z.Syntax.VariableDeclarator,this.id=F,this.init=T}return N}();W.VariableDeclarator=i1;var n1=function(){function N(F,T){this.type=z.Syntax.WhileStatement,this.test=F,this.body=T}return N}();W.WhileStatement=n1;var o1=function(){function N(F,T){this.type=z.Syntax.WithStatement,this.object=F,this.body=T}return N}();W.WithStatement=o1;var a1=function(){function N(F,T){this.type=z.Syntax.YieldExpression,this.argument=F,this.delegate=T}return N}();W.YieldExpression=a1},function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(9),M=X(10),Y=X(11),H=X(7),V=X(12),G=X(2),L=X(13),U="ArrowParameterPlaceHolder",q=function(){function K(B,Q,Z){if(Q===void 0)Q={};if(this.config={range:typeof Q.range==="boolean"&&Q.range,loc:typeof Q.loc==="boolean"&&Q.loc,source:null,tokens:typeof Q.tokens==="boolean"&&Q.tokens,comment:typeof Q.comment==="boolean"&&Q.comment,tolerant:typeof Q.tolerant==="boolean"&&Q.tolerant},this.config.loc&&Q.source&&Q.source!==null)this.config.source=String(Q.source);this.delegate=Z,this.errorHandler=new M.ErrorHandler,this.errorHandler.tolerant=this.config.tolerant,this.scanner=new V.Scanner(B,this.errorHandler),this.scanner.trackComment=this.config.comment,this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11},this.lookahead={type:2,value:"",lineNumber:this.scanner.lineNumber,lineStart:0,start:0,end:0},this.hasLineTerminator=!1,this.context={isModule:!1,await:!1,allowIn:!0,allowStrictDirective:!0,allowYield:!0,firstCoverInitializedNameError:null,isAssignmentTarget:!1,isBindingElement:!1,inFunctionBody:!1,inIteration:!1,inSwitch:!1,labelSet:{},strict:!1},this.tokens=[],this.startMarker={index:0,line:this.scanner.lineNumber,column:0},this.lastMarker={index:0,line:this.scanner.lineNumber,column:0},this.nextToken(),this.lastMarker={index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}}return K.prototype.throwError=function(B){var Q=[];for(var Z=1;Z<arguments.length;Z++)Q[Z-1]=arguments[Z];var J=Array.prototype.slice.call(arguments,1),D=B.replace(/%(\d)/g,function(O,R){return z.assert(R<J.length,"Message reference must be in range"),J[R]}),j=this.lastMarker.index,C=this.lastMarker.line,I=this.lastMarker.column+1;throw this.errorHandler.createError(j,C,I,D)},K.prototype.tolerateError=function(B){var Q=[];for(var Z=1;Z<arguments.length;Z++)Q[Z-1]=arguments[Z];var J=Array.prototype.slice.call(arguments,1),D=B.replace(/%(\d)/g,function(O,R){return z.assert(R<J.length,"Message reference must be in range"),J[R]}),j=this.lastMarker.index,C=this.scanner.lineNumber,I=this.lastMarker.column+1;this.errorHandler.tolerateError(j,C,I,D)},K.prototype.unexpectedTokenError=function(B,Q){var Z=Q||Y.Messages.UnexpectedToken,J;if(B){if(!Q){if(Z=B.type===2?Y.Messages.UnexpectedEOS:B.type===3?Y.Messages.UnexpectedIdentifier:B.type===6?Y.Messages.UnexpectedNumber:B.type===8?Y.Messages.UnexpectedString:B.type===10?Y.Messages.UnexpectedTemplate:Y.Messages.UnexpectedToken,B.type===4){if(this.scanner.isFutureReservedWord(B.value))Z=Y.Messages.UnexpectedReserved;else if(this.context.strict&&this.scanner.isStrictModeReservedWord(B.value))Z=Y.Messages.StrictReservedWord}}J=B.value}else J="ILLEGAL";if(Z=Z.replace("%0",J),B&&typeof B.lineNumber==="number"){var{start:D,lineNumber:j}=B,C=this.lastMarker.index-this.lastMarker.column,I=B.start-C+1;return this.errorHandler.createError(D,j,I,Z)}else{var D=this.lastMarker.index,j=this.lastMarker.line,I=this.lastMarker.column+1;return this.errorHandler.createError(D,j,I,Z)}},K.prototype.throwUnexpectedToken=function(B,Q){throw this.unexpectedTokenError(B,Q)},K.prototype.tolerateUnexpectedToken=function(B,Q){this.errorHandler.tolerate(this.unexpectedTokenError(B,Q))},K.prototype.collectComments=function(){if(!this.config.comment)this.scanner.scanComments();else{var B=this.scanner.scanComments();if(B.length>0&&this.delegate)for(var Q=0;Q<B.length;++Q){var Z=B[Q],J=void 0;if(J={type:Z.multiLine?"BlockComment":"LineComment",value:this.scanner.source.slice(Z.slice[0],Z.slice[1])},this.config.range)J.range=Z.range;if(this.config.loc)J.loc=Z.loc;var D={start:{line:Z.loc.start.line,column:Z.loc.start.column,offset:Z.range[0]},end:{line:Z.loc.end.line,column:Z.loc.end.column,offset:Z.range[1]}};this.delegate(J,D)}}},K.prototype.getTokenRaw=function(B){return this.scanner.source.slice(B.start,B.end)},K.prototype.convertToken=function(B){var Q={type:L.TokenName[B.type],value:this.getTokenRaw(B)};if(this.config.range)Q.range=[B.start,B.end];if(this.config.loc)Q.loc={start:{line:this.startMarker.line,column:this.startMarker.column},end:{line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}};if(B.type===9){var{pattern:Z,flags:J}=B;Q.regex={pattern:Z,flags:J}}return Q},K.prototype.nextToken=function(){var B=this.lookahead;if(this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.collectComments(),this.scanner.index!==this.startMarker.index)this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;var Q=this.scanner.lex();if(this.hasLineTerminator=B.lineNumber!==Q.lineNumber,Q&&this.context.strict&&Q.type===3){if(this.scanner.isStrictModeReservedWord(Q.value))Q.type=4}if(this.lookahead=Q,this.config.tokens&&Q.type!==2)this.tokens.push(this.convertToken(Q));return B},K.prototype.nextRegexToken=function(){this.collectComments();var B=this.scanner.scanRegExp();if(this.config.tokens)this.tokens.pop(),this.tokens.push(this.convertToken(B));return this.lookahead=B,this.nextToken(),B},K.prototype.createNode=function(){return{index:this.startMarker.index,line:this.startMarker.line,column:this.startMarker.column}},K.prototype.startNode=function(B,Q){if(Q===void 0)Q=0;var Z=B.start-B.lineStart,J=B.lineNumber;if(Z<0)Z+=Q,J--;return{index:B.start,line:J,column:Z}},K.prototype.finalize=function(B,Q){if(this.config.range)Q.range=[B.index,this.lastMarker.index];if(this.config.loc){if(Q.loc={start:{line:B.line,column:B.column},end:{line:this.lastMarker.line,column:this.lastMarker.column}},this.config.source)Q.loc.source=this.config.source}if(this.delegate){var Z={start:{line:B.line,column:B.column,offset:B.index},end:{line:this.lastMarker.line,column:this.lastMarker.column,offset:this.lastMarker.index}};this.delegate(Q,Z)}return Q},K.prototype.expect=function(B){var Q=this.nextToken();if(Q.type!==7||Q.value!==B)this.throwUnexpectedToken(Q)},K.prototype.expectCommaSeparator=function(){if(this.config.tolerant){var B=this.lookahead;if(B.type===7&&B.value===",")this.nextToken();else if(B.type===7&&B.value===";")this.nextToken(),this.tolerateUnexpectedToken(B);else this.tolerateUnexpectedToken(B,Y.Messages.UnexpectedToken)}else this.expect(",")},K.prototype.expectKeyword=function(B){var Q=this.nextToken();if(Q.type!==4||Q.value!==B)this.throwUnexpectedToken(Q)},K.prototype.match=function(B){return this.lookahead.type===7&&this.lookahead.value===B},K.prototype.matchKeyword=function(B){return this.lookahead.type===4&&this.lookahead.value===B},K.prototype.matchContextualKeyword=function(B){return this.lookahead.type===3&&this.lookahead.value===B},K.prototype.matchAssign=function(){if(this.lookahead.type!==7)return!1;var B=this.lookahead.value;return B==="="||B==="*="||B==="**="||B==="/="||B==="%="||B==="+="||B==="-="||B==="<<="||B===">>="||B===">>>="||B==="&="||B==="^="||B==="|="},K.prototype.isolateCoverGrammar=function(B){var Q=this.context.isBindingElement,Z=this.context.isAssignmentTarget,J=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var D=B.call(this);if(this.context.firstCoverInitializedNameError!==null)this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);return this.context.isBindingElement=Q,this.context.isAssignmentTarget=Z,this.context.firstCoverInitializedNameError=J,D},K.prototype.inheritCoverGrammar=function(B){var Q=this.context.isBindingElement,Z=this.context.isAssignmentTarget,J=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var D=B.call(this);return this.context.isBindingElement=this.context.isBindingElement&&Q,this.context.isAssignmentTarget=this.context.isAssignmentTarget&&Z,this.context.firstCoverInitializedNameError=J||this.context.firstCoverInitializedNameError,D},K.prototype.consumeSemicolon=function(){if(this.match(";"))this.nextToken();else if(!this.hasLineTerminator){if(this.lookahead.type!==2&&!this.match("}"))this.throwUnexpectedToken(this.lookahead);this.lastMarker.index=this.startMarker.index,this.lastMarker.line=this.startMarker.line,this.lastMarker.column=this.startMarker.column}},K.prototype.parsePrimaryExpression=function(){var B=this.createNode(),Q,Z,J;switch(this.lookahead.type){case 3:if((this.context.isModule||this.context.await)&&this.lookahead.value==="await")this.tolerateUnexpectedToken(this.lookahead);Q=this.matchAsyncFunction()?this.parseFunctionExpression():this.finalize(B,new H.Identifier(this.nextToken().value));break;case 6:case 8:if(this.context.strict&&this.lookahead.octal)this.tolerateUnexpectedToken(this.lookahead,Y.Messages.StrictOctalLiteral);this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,Z=this.nextToken(),J=this.getTokenRaw(Z),Q=this.finalize(B,new H.Literal(Z.value,J));break;case 1:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,Z=this.nextToken(),J=this.getTokenRaw(Z),Q=this.finalize(B,new H.Literal(Z.value==="true",J));break;case 5:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,Z=this.nextToken(),J=this.getTokenRaw(Z),Q=this.finalize(B,new H.Literal(null,J));break;case 10:Q=this.parseTemplateLiteral();break;case 7:switch(this.lookahead.value){case"(":this.context.isBindingElement=!1,Q=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":Q=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":Q=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.scanner.index=this.startMarker.index,Z=this.nextRegexToken(),J=this.getTokenRaw(Z),Q=this.finalize(B,new H.RegexLiteral(Z.regex,J,Z.pattern,Z.flags));break;default:Q=this.throwUnexpectedToken(this.nextToken())}break;case 4:if(!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield"))Q=this.parseIdentifierName();else if(!this.context.strict&&this.matchKeyword("let"))Q=this.finalize(B,new H.Identifier(this.nextToken().value));else if(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.matchKeyword("function"))Q=this.parseFunctionExpression();else if(this.matchKeyword("this"))this.nextToken(),Q=this.finalize(B,new H.ThisExpression);else if(this.matchKeyword("class"))Q=this.parseClassExpression();else Q=this.throwUnexpectedToken(this.nextToken());break;default:Q=this.throwUnexpectedToken(this.nextToken())}return Q},K.prototype.parseSpreadElement=function(){var B=this.createNode();this.expect("...");var Q=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(B,new H.SpreadElement(Q))},K.prototype.parseArrayInitializer=function(){var B=this.createNode(),Q=[];this.expect("[");while(!this.match("]"))if(this.match(","))this.nextToken(),Q.push(null);else if(this.match("...")){var Z=this.parseSpreadElement();if(!this.match("]"))this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.expect(",");Q.push(Z)}else if(Q.push(this.inheritCoverGrammar(this.parseAssignmentExpression)),!this.match("]"))this.expect(",");return this.expect("]"),this.finalize(B,new H.ArrayExpression(Q))},K.prototype.parsePropertyMethod=function(B){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var Q=this.context.strict,Z=this.context.allowStrictDirective;this.context.allowStrictDirective=B.simple;var J=this.isolateCoverGrammar(this.parseFunctionSourceElements);if(this.context.strict&&B.firstRestricted)this.tolerateUnexpectedToken(B.firstRestricted,B.message);if(this.context.strict&&B.stricted)this.tolerateUnexpectedToken(B.stricted,B.message);return this.context.strict=Q,this.context.allowStrictDirective=Z,J},K.prototype.parsePropertyMethodFunction=function(){var B=!1,Q=this.createNode(),Z=this.context.allowYield;this.context.allowYield=!0;var J=this.parseFormalParameters(),D=this.parsePropertyMethod(J);return this.context.allowYield=Z,this.finalize(Q,new H.FunctionExpression(null,J.params,D,B))},K.prototype.parsePropertyMethodAsyncFunction=function(){var B=this.createNode(),Q=this.context.allowYield,Z=this.context.await;this.context.allowYield=!1,this.context.await=!0;var J=this.parseFormalParameters(),D=this.parsePropertyMethod(J);return this.context.allowYield=Q,this.context.await=Z,this.finalize(B,new H.AsyncFunctionExpression(null,J.params,D))},K.prototype.parseObjectPropertyKey=function(){var B=this.createNode(),Q=this.nextToken(),Z;switch(Q.type){case 8:case 6:if(this.context.strict&&Q.octal)this.tolerateUnexpectedToken(Q,Y.Messages.StrictOctalLiteral);var J=this.getTokenRaw(Q);Z=this.finalize(B,new H.Literal(Q.value,J));break;case 3:case 1:case 5:case 4:Z=this.finalize(B,new H.Identifier(Q.value));break;case 7:if(Q.value==="[")Z=this.isolateCoverGrammar(this.parseAssignmentExpression),this.expect("]");else Z=this.throwUnexpectedToken(Q);break;default:Z=this.throwUnexpectedToken(Q)}return Z},K.prototype.isPropertyKey=function(B,Q){return B.type===G.Syntax.Identifier&&B.name===Q||B.type===G.Syntax.Literal&&B.value===Q},K.prototype.parseObjectProperty=function(B){var Q=this.createNode(),Z=this.lookahead,J,D=null,j=null,C=!1,I=!1,O=!1,R=!1;if(Z.type===3){var P=Z.value;this.nextToken(),C=this.match("["),R=!this.hasLineTerminator&&P==="async"&&!this.match(":")&&!this.match("(")&&!this.match("*")&&!this.match(","),D=R?this.parseObjectPropertyKey():this.finalize(Q,new H.Identifier(P))}else if(this.match("*"))this.nextToken();else C=this.match("["),D=this.parseObjectPropertyKey();var E=this.qualifiedPropertyName(this.lookahead);if(Z.type===3&&!R&&Z.value==="get"&&E)J="get",C=this.match("["),D=this.parseObjectPropertyKey(),this.context.allowYield=!1,j=this.parseGetterMethod();else if(Z.type===3&&!R&&Z.value==="set"&&E)J="set",C=this.match("["),D=this.parseObjectPropertyKey(),j=this.parseSetterMethod();else if(Z.type===7&&Z.value==="*"&&E)J="init",C=this.match("["),D=this.parseObjectPropertyKey(),j=this.parseGeneratorMethod(),I=!0;else{if(!D)this.throwUnexpectedToken(this.lookahead);if(J="init",this.match(":")&&!R){if(!C&&this.isPropertyKey(D,"__proto__")){if(B.value)this.tolerateError(Y.Messages.DuplicateProtoProperty);B.value=!0}this.nextToken(),j=this.inheritCoverGrammar(this.parseAssignmentExpression)}else if(this.match("("))j=R?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction(),I=!0;else if(Z.type===3){var P=this.finalize(Q,new H.Identifier(Z.value));if(this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead,this.nextToken(),O=!0;var b=this.isolateCoverGrammar(this.parseAssignmentExpression);j=this.finalize(Q,new H.AssignmentPattern(P,b))}else O=!0,j=P}else this.throwUnexpectedToken(this.nextToken())}return this.finalize(Q,new H.Property(J,D,C,j,I,O))},K.prototype.parseObjectInitializer=function(){var B=this.createNode();this.expect("{");var Q=[],Z={value:!1};while(!this.match("}"))if(Q.push(this.parseObjectProperty(Z)),!this.match("}"))this.expectCommaSeparator();return this.expect("}"),this.finalize(B,new H.ObjectExpression(Q))},K.prototype.parseTemplateHead=function(){z.assert(this.lookahead.head,"Template literal must start with a template head");var B=this.createNode(),Q=this.nextToken(),Z=Q.value,J=Q.cooked;return this.finalize(B,new H.TemplateElement({raw:Z,cooked:J},Q.tail))},K.prototype.parseTemplateElement=function(){if(this.lookahead.type!==10)this.throwUnexpectedToken();var B=this.createNode(),Q=this.nextToken(),Z=Q.value,J=Q.cooked;return this.finalize(B,new H.TemplateElement({raw:Z,cooked:J},Q.tail))},K.prototype.parseTemplateLiteral=function(){var B=this.createNode(),Q=[],Z=[],J=this.parseTemplateHead();Z.push(J);while(!J.tail)Q.push(this.parseExpression()),J=this.parseTemplateElement(),Z.push(J);return this.finalize(B,new H.TemplateLiteral(Z,Q))},K.prototype.reinterpretExpressionAsPattern=function(B){switch(B.type){case G.Syntax.Identifier:case G.Syntax.MemberExpression:case G.Syntax.RestElement:case G.Syntax.AssignmentPattern:break;case G.Syntax.SpreadElement:B.type=G.Syntax.RestElement,this.reinterpretExpressionAsPattern(B.argument);break;case G.Syntax.ArrayExpression:B.type=G.Syntax.ArrayPattern;for(var Q=0;Q<B.elements.length;Q++)if(B.elements[Q]!==null)this.reinterpretExpressionAsPattern(B.elements[Q]);break;case G.Syntax.ObjectExpression:B.type=G.Syntax.ObjectPattern;for(var Q=0;Q<B.properties.length;Q++)this.reinterpretExpressionAsPattern(B.properties[Q].value);break;case G.Syntax.AssignmentExpression:B.type=G.Syntax.AssignmentPattern,delete B.operator,this.reinterpretExpressionAsPattern(B.left);break;default:break}},K.prototype.parseGroupExpression=function(){var B;if(this.expect("("),this.match(")")){if(this.nextToken(),!this.match("=>"))this.expect("=>");B={type:U,params:[],async:!1}}else{var Q=this.lookahead,Z=[];if(this.match("...")){if(B=this.parseRestElement(Z),this.expect(")"),!this.match("=>"))this.expect("=>");B={type:U,params:[B],async:!1}}else{var J=!1;if(this.context.isBindingElement=!0,B=this.inheritCoverGrammar(this.parseAssignmentExpression),this.match(",")){var D=[];this.context.isAssignmentTarget=!1,D.push(B);while(this.lookahead.type!==2){if(!this.match(","))break;if(this.nextToken(),this.match(")")){this.nextToken();for(var j=0;j<D.length;j++)this.reinterpretExpressionAsPattern(D[j]);J=!0,B={type:U,params:D,async:!1}}else if(this.match("...")){if(!this.context.isBindingElement)this.throwUnexpectedToken(this.lookahead);if(D.push(this.parseRestElement(Z)),this.expect(")"),!this.match("=>"))this.expect("=>");this.context.isBindingElement=!1;for(var j=0;j<D.length;j++)this.reinterpretExpressionAsPattern(D[j]);J=!0,B={type:U,params:D,async:!1}}else D.push(this.inheritCoverGrammar(this.parseAssignmentExpression));if(J)break}if(!J)B=this.finalize(this.startNode(Q),new H.SequenceExpression(D))}if(!J){if(this.expect(")"),this.match("=>")){if(B.type===G.Syntax.Identifier&&B.name==="yield")J=!0,B={type:U,params:[B],async:!1};if(!J){if(!this.context.isBindingElement)this.throwUnexpectedToken(this.lookahead);if(B.type===G.Syntax.SequenceExpression)for(var j=0;j<B.expressions.length;j++)this.reinterpretExpressionAsPattern(B.expressions[j]);else this.reinterpretExpressionAsPattern(B);var C=B.type===G.Syntax.SequenceExpression?B.expressions:[B];B={type:U,params:C,async:!1}}}this.context.isBindingElement=!1}}}return B},K.prototype.parseArguments=function(){this.expect("(");var B=[];if(!this.match(")"))while(!0){var Q=this.match("...")?this.parseSpreadElement():this.isolateCoverGrammar(this.parseAssignmentExpression);if(B.push(Q),this.match(")"))break;if(this.expectCommaSeparator(),this.match(")"))break}return this.expect(")"),B},K.prototype.isIdentifierName=function(B){return B.type===3||B.type===4||B.type===1||B.type===5},K.prototype.parseIdentifierName=function(){var B=this.createNode(),Q=this.nextToken();if(!this.isIdentifierName(Q))this.throwUnexpectedToken(Q);return this.finalize(B,new H.Identifier(Q.value))},K.prototype.parseNewExpression=function(){var B=this.createNode(),Q=this.parseIdentifierName();z.assert(Q.name==="new","New expression must start with `new`");var Z;if(this.match("."))if(this.nextToken(),this.lookahead.type===3&&this.context.inFunctionBody&&this.lookahead.value==="target"){var J=this.parseIdentifierName();Z=new H.MetaProperty(Q,J)}else this.throwUnexpectedToken(this.lookahead);else{var D=this.isolateCoverGrammar(this.parseLeftHandSideExpression),j=this.match("(")?this.parseArguments():[];Z=new H.NewExpression(D,j),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}return this.finalize(B,Z)},K.prototype.parseAsyncArgument=function(){var B=this.parseAssignmentExpression();return this.context.firstCoverInitializedNameError=null,B},K.prototype.parseAsyncArguments=function(){this.expect("(");var B=[];if(!this.match(")"))while(!0){var Q=this.match("...")?this.parseSpreadElement():this.isolateCoverGrammar(this.parseAsyncArgument);if(B.push(Q),this.match(")"))break;if(this.expectCommaSeparator(),this.match(")"))break}return this.expect(")"),B},K.prototype.parseLeftHandSideExpressionAllowCall=function(){var B=this.lookahead,Q=this.matchContextualKeyword("async"),Z=this.context.allowIn;this.context.allowIn=!0;var J;if(this.matchKeyword("super")&&this.context.inFunctionBody){if(J=this.createNode(),this.nextToken(),J=this.finalize(J,new H.Super),!this.match("(")&&!this.match(".")&&!this.match("["))this.throwUnexpectedToken(this.lookahead)}else J=this.inheritCoverGrammar(this.matchKeyword("new")?this.parseNewExpression:this.parsePrimaryExpression);while(!0)if(this.match(".")){this.context.isBindingElement=!1,this.context.isAssignmentTarget=!0,this.expect(".");var D=this.parseIdentifierName();J=this.finalize(this.startNode(B),new H.StaticMemberExpression(J,D))}else if(this.match("(")){var j=Q&&B.lineNumber===this.lookahead.lineNumber;this.context.isBindingElement=!1,this.context.isAssignmentTarget=!1;var C=j?this.parseAsyncArguments():this.parseArguments();if(J=this.finalize(this.startNode(B),new H.CallExpression(J,C)),j&&this.match("=>")){for(var I=0;I<C.length;++I)this.reinterpretExpressionAsPattern(C[I]);J={type:U,params:C,async:!0}}}else if(this.match("[")){this.context.isBindingElement=!1,this.context.isAssignmentTarget=!0,this.expect("[");var D=this.isolateCoverGrammar(this.parseExpression);this.expect("]"),J=this.finalize(this.startNode(B),new H.ComputedMemberExpression(J,D))}else if(this.lookahead.type===10&&this.lookahead.head){var O=this.parseTemplateLiteral();J=this.finalize(this.startNode(B),new H.TaggedTemplateExpression(J,O))}else break;return this.context.allowIn=Z,J},K.prototype.parseSuper=function(){var B=this.createNode();if(this.expectKeyword("super"),!this.match("[")&&!this.match("."))this.throwUnexpectedToken(this.lookahead);return this.finalize(B,new H.Super)},K.prototype.parseLeftHandSideExpression=function(){z.assert(this.context.allowIn,"callee of new expression always allow in keyword.");var B=this.startNode(this.lookahead),Q=this.matchKeyword("super")&&this.context.inFunctionBody?this.parseSuper():this.inheritCoverGrammar(this.matchKeyword("new")?this.parseNewExpression:this.parsePrimaryExpression);while(!0)if(this.match("[")){this.context.isBindingElement=!1,this.context.isAssignmentTarget=!0,this.expect("[");var Z=this.isolateCoverGrammar(this.parseExpression);this.expect("]"),Q=this.finalize(B,new H.ComputedMemberExpression(Q,Z))}else if(this.match(".")){this.context.isBindingElement=!1,this.context.isAssignmentTarget=!0,this.expect(".");var Z=this.parseIdentifierName();Q=this.finalize(B,new H.StaticMemberExpression(Q,Z))}else if(this.lookahead.type===10&&this.lookahead.head){var J=this.parseTemplateLiteral();Q=this.finalize(B,new H.TaggedTemplateExpression(Q,J))}else break;return Q},K.prototype.parseUpdateExpression=function(){var B,Q=this.lookahead;if(this.match("++")||this.match("--")){var Z=this.startNode(Q),J=this.nextToken();if(B=this.inheritCoverGrammar(this.parseUnaryExpression),this.context.strict&&B.type===G.Syntax.Identifier&&this.scanner.isRestrictedWord(B.name))this.tolerateError(Y.Messages.StrictLHSPrefix);if(!this.context.isAssignmentTarget)this.tolerateError(Y.Messages.InvalidLHSInAssignment);var D=!0;B=this.finalize(Z,new H.UpdateExpression(J.value,B,D)),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}else if(B=this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall),!this.hasLineTerminator&&this.lookahead.type===7){if(this.match("++")||this.match("--")){if(this.context.strict&&B.type===G.Syntax.Identifier&&this.scanner.isRestrictedWord(B.name))this.tolerateError(Y.Messages.StrictLHSPostfix);if(!this.context.isAssignmentTarget)this.tolerateError(Y.Messages.InvalidLHSInAssignment);this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var j=this.nextToken().value,D=!1;B=this.finalize(this.startNode(Q),new H.UpdateExpression(j,B,D))}}return B},K.prototype.parseAwaitExpression=function(){var B=this.createNode();this.nextToken();var Q=this.parseUnaryExpression();return this.finalize(B,new H.AwaitExpression(Q))},K.prototype.parseUnaryExpression=function(){var B;if(this.match("+")||this.match("-")||this.match("~")||this.match("!")||this.matchKeyword("delete")||this.matchKeyword("void")||this.matchKeyword("typeof")){var Q=this.startNode(this.lookahead),Z=this.nextToken();if(B=this.inheritCoverGrammar(this.parseUnaryExpression),B=this.finalize(Q,new H.UnaryExpression(Z.value,B)),this.context.strict&&B.operator==="delete"&&B.argument.type===G.Syntax.Identifier)this.tolerateError(Y.Messages.StrictDelete);this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}else if(this.context.await&&this.matchContextualKeyword("await"))B=this.parseAwaitExpression();else B=this.parseUpdateExpression();return B},K.prototype.parseExponentiationExpression=function(){var B=this.lookahead,Q=this.inheritCoverGrammar(this.parseUnaryExpression);if(Q.type!==G.Syntax.UnaryExpression&&this.match("**")){this.nextToken(),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var Z=Q,J=this.isolateCoverGrammar(this.parseExponentiationExpression);Q=this.finalize(this.startNode(B),new H.BinaryExpression("**",Z,J))}return Q},K.prototype.binaryPrecedence=function(B){var Q=B.value,Z;if(B.type===7)Z=this.operatorPrecedence[Q]||0;else if(B.type===4)Z=Q==="instanceof"||this.context.allowIn&&Q==="in"?7:0;else Z=0;return Z},K.prototype.parseBinaryExpression=function(){var B=this.lookahead,Q=this.inheritCoverGrammar(this.parseExponentiationExpression),Z=this.lookahead,J=this.binaryPrecedence(Z);if(J>0){this.nextToken(),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var D=[B,this.lookahead],j=Q,C=this.isolateCoverGrammar(this.parseExponentiationExpression),I=[j,Z.value,C],O=[J];while(!0){if(J=this.binaryPrecedence(this.lookahead),J<=0)break;while(I.length>2&&J<=O[O.length-1]){C=I.pop();var R=I.pop();O.pop(),j=I.pop(),D.pop();var P=this.startNode(D[D.length-1]);I.push(this.finalize(P,new H.BinaryExpression(R,j,C)))}I.push(this.nextToken().value),O.push(J),D.push(this.lookahead),I.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var E=I.length-1;Q=I[E];var b=D.pop();while(E>1){var y=D.pop(),g=b&&b.lineStart,P=this.startNode(y,g),R=I[E-1];Q=this.finalize(P,new H.BinaryExpression(R,I[E-2],Q)),E-=2,b=y}}return Q},K.prototype.parseConditionalExpression=function(){var B=this.lookahead,Q=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var Z=this.context.allowIn;this.context.allowIn=!0;var J=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=Z,this.expect(":");var D=this.isolateCoverGrammar(this.parseAssignmentExpression);Q=this.finalize(this.startNode(B),new H.ConditionalExpression(Q,J,D)),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}return Q},K.prototype.checkPatternParam=function(B,Q){switch(Q.type){case G.Syntax.Identifier:this.validateParam(B,Q,Q.name);break;case G.Syntax.RestElement:this.checkPatternParam(B,Q.argument);break;case G.Syntax.AssignmentPattern:this.checkPatternParam(B,Q.left);break;case G.Syntax.ArrayPattern:for(var Z=0;Z<Q.elements.length;Z++)if(Q.elements[Z]!==null)this.checkPatternParam(B,Q.elements[Z]);break;case G.Syntax.ObjectPattern:for(var Z=0;Z<Q.properties.length;Z++)this.checkPatternParam(B,Q.properties[Z].value);break;default:break}B.simple=B.simple&&Q instanceof H.Identifier},K.prototype.reinterpretAsCoverFormalsList=function(B){var Q=[B],Z,J=!1;switch(B.type){case G.Syntax.Identifier:break;case U:Q=B.params,J=B.async;break;default:return null}Z={simple:!0,paramSet:{}};for(var D=0;D<Q.length;++D){var j=Q[D];if(j.type===G.Syntax.AssignmentPattern){if(j.right.type===G.Syntax.YieldExpression){if(j.right.argument)this.throwUnexpectedToken(this.lookahead);j.right.type=G.Syntax.Identifier,j.right.name="yield",delete j.right.argument,delete j.right.delegate}}else if(J&&j.type===G.Syntax.Identifier&&j.name==="await")this.throwUnexpectedToken(this.lookahead);this.checkPatternParam(Z,j),Q[D]=j}if(this.context.strict||!this.context.allowYield)for(var D=0;D<Q.length;++D){var j=Q[D];if(j.type===G.Syntax.YieldExpression)this.throwUnexpectedToken(this.lookahead)}if(Z.message===Y.Messages.StrictParamDupe){var C=this.context.strict?Z.stricted:Z.firstRestricted;this.throwUnexpectedToken(C,Z.message)}return{simple:Z.simple,params:Q,stricted:Z.stricted,firstRestricted:Z.firstRestricted,message:Z.message}},K.prototype.parseAssignmentExpression=function(){var B;if(!this.context.allowYield&&this.matchKeyword("yield"))B=this.parseYieldExpression();else{var Q=this.lookahead,Z=Q;if(B=this.parseConditionalExpression(),Z.type===3&&Z.lineNumber===this.lookahead.lineNumber&&Z.value==="async"){if(this.lookahead.type===3||this.matchKeyword("yield")){var J=this.parsePrimaryExpression();this.reinterpretExpressionAsPattern(J),B={type:U,params:[J],async:!0}}}if(B.type===U||this.match("=>")){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var D=B.async,j=this.reinterpretAsCoverFormalsList(B);if(j){if(this.hasLineTerminator)this.tolerateUnexpectedToken(this.lookahead);this.context.firstCoverInitializedNameError=null;var C=this.context.strict,I=this.context.allowStrictDirective;this.context.allowStrictDirective=j.simple;var O=this.context.allowYield,R=this.context.await;this.context.allowYield=!0,this.context.await=D;var P=this.startNode(Q);this.expect("=>");var E=void 0;if(this.match("{")){var b=this.context.allowIn;this.context.allowIn=!0,E=this.parseFunctionSourceElements(),this.context.allowIn=b}else E=this.isolateCoverGrammar(this.parseAssignmentExpression);var y=E.type!==G.Syntax.BlockStatement;if(this.context.strict&&j.firstRestricted)this.throwUnexpectedToken(j.firstRestricted,j.message);if(this.context.strict&&j.stricted)this.tolerateUnexpectedToken(j.stricted,j.message);B=D?this.finalize(P,new H.AsyncArrowFunctionExpression(j.params,E,y)):this.finalize(P,new H.ArrowFunctionExpression(j.params,E,y)),this.context.strict=C,this.context.allowStrictDirective=I,this.context.allowYield=O,this.context.await=R}}else if(this.matchAssign()){if(!this.context.isAssignmentTarget)this.tolerateError(Y.Messages.InvalidLHSInAssignment);if(this.context.strict&&B.type===G.Syntax.Identifier){var g=B;if(this.scanner.isRestrictedWord(g.name))this.tolerateUnexpectedToken(Z,Y.Messages.StrictLHSAssignment);if(this.scanner.isStrictModeReservedWord(g.name))this.tolerateUnexpectedToken(Z,Y.Messages.StrictReservedWord)}if(!this.match("="))this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;else this.reinterpretExpressionAsPattern(B);Z=this.nextToken();var a=Z.value,V9=this.isolateCoverGrammar(this.parseAssignmentExpression);B=this.finalize(this.startNode(Q),new H.AssignmentExpression(a,B,V9)),this.context.firstCoverInitializedNameError=null}}return B},K.prototype.parseExpression=function(){var B=this.lookahead,Q=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var Z=[];Z.push(Q);while(this.lookahead.type!==2){if(!this.match(","))break;this.nextToken(),Z.push(this.isolateCoverGrammar(this.parseAssignmentExpression))}Q=this.finalize(this.startNode(B),new H.SequenceExpression(Z))}return Q},K.prototype.parseStatementListItem=function(){var B;if(this.context.isAssignmentTarget=!0,this.context.isBindingElement=!0,this.lookahead.type===4)switch(this.lookahead.value){case"export":if(!this.context.isModule)this.tolerateUnexpectedToken(this.lookahead,Y.Messages.IllegalExportDeclaration);B=this.parseExportDeclaration();break;case"import":if(!this.context.isModule)this.tolerateUnexpectedToken(this.lookahead,Y.Messages.IllegalImportDeclaration);B=this.parseImportDeclaration();break;case"const":B=this.parseLexicalDeclaration({inFor:!1});break;case"function":B=this.parseFunctionDeclaration();break;case"class":B=this.parseClassDeclaration();break;case"let":B=this.isLexicalDeclaration()?this.parseLexicalDeclaration({inFor:!1}):this.parseStatement();break;default:B=this.parseStatement();break}else B=this.parseStatement();return B},K.prototype.parseBlock=function(){var B=this.createNode();this.expect("{");var Q=[];while(!0){if(this.match("}"))break;Q.push(this.parseStatementListItem())}return this.expect("}"),this.finalize(B,new H.BlockStatement(Q))},K.prototype.parseLexicalBinding=function(B,Q){var Z=this.createNode(),J=[],D=this.parsePattern(J,B);if(this.context.strict&&D.type===G.Syntax.Identifier){if(this.scanner.isRestrictedWord(D.name))this.tolerateError(Y.Messages.StrictVarName)}var j=null;if(B==="const"){if(!this.matchKeyword("in")&&!this.matchContextualKeyword("of"))if(this.match("="))this.nextToken(),j=this.isolateCoverGrammar(this.parseAssignmentExpression);else this.throwError(Y.Messages.DeclarationMissingInitializer,"const")}else if(!Q.inFor&&D.type!==G.Syntax.Identifier||this.match("="))this.expect("="),j=this.isolateCoverGrammar(this.parseAssignmentExpression);return this.finalize(Z,new H.VariableDeclarator(D,j))},K.prototype.parseBindingList=function(B,Q){var Z=[this.parseLexicalBinding(B,Q)];while(this.match(","))this.nextToken(),Z.push(this.parseLexicalBinding(B,Q));return Z},K.prototype.isLexicalDeclaration=function(){var B=this.scanner.saveState();this.scanner.scanComments();var Q=this.scanner.lex();return this.scanner.restoreState(B),Q.type===3||Q.type===7&&Q.value==="["||Q.type===7&&Q.value==="{"||Q.type===4&&Q.value==="let"||Q.type===4&&Q.value==="yield"},K.prototype.parseLexicalDeclaration=function(B){var Q=this.createNode(),Z=this.nextToken().value;z.assert(Z==="let"||Z==="const","Lexical declaration must be either let or const");var J=this.parseBindingList(Z,B);return this.consumeSemicolon(),this.finalize(Q,new H.VariableDeclaration(J,Z))},K.prototype.parseBindingRestElement=function(B,Q){var Z=this.createNode();this.expect("...");var J=this.parsePattern(B,Q);return this.finalize(Z,new H.RestElement(J))},K.prototype.parseArrayPattern=function(B,Q){var Z=this.createNode();this.expect("[");var J=[];while(!this.match("]"))if(this.match(","))this.nextToken(),J.push(null);else{if(this.match("...")){J.push(this.parseBindingRestElement(B,Q));break}else J.push(this.parsePatternWithDefault(B,Q));if(!this.match("]"))this.expect(",")}return this.expect("]"),this.finalize(Z,new H.ArrayPattern(J))},K.prototype.parsePropertyPattern=function(B,Q){var Z=this.createNode(),J=!1,D=!1,j=!1,C,I;if(this.lookahead.type===3){var O=this.lookahead;C=this.parseVariableIdentifier();var R=this.finalize(Z,new H.Identifier(O.value));if(this.match("=")){B.push(O),D=!0,this.nextToken();var P=this.parseAssignmentExpression();I=this.finalize(this.startNode(O),new H.AssignmentPattern(R,P))}else if(!this.match(":"))B.push(O),D=!0,I=R;else this.expect(":"),I=this.parsePatternWithDefault(B,Q)}else J=this.match("["),C=this.parseObjectPropertyKey(),this.expect(":"),I=this.parsePatternWithDefault(B,Q);return this.finalize(Z,new H.Property("init",C,J,I,j,D))},K.prototype.parseObjectPattern=function(B,Q){var Z=this.createNode(),J=[];this.expect("{");while(!this.match("}"))if(J.push(this.parsePropertyPattern(B,Q)),!this.match("}"))this.expect(",");return this.expect("}"),this.finalize(Z,new H.ObjectPattern(J))},K.prototype.parsePattern=function(B,Q){var Z;if(this.match("["))Z=this.parseArrayPattern(B,Q);else if(this.match("{"))Z=this.parseObjectPattern(B,Q);else{if(this.matchKeyword("let")&&(Q==="const"||Q==="let"))this.tolerateUnexpectedToken(this.lookahead,Y.Messages.LetInLexicalBinding);B.push(this.lookahead),Z=this.parseVariableIdentifier(Q)}return Z},K.prototype.parsePatternWithDefault=function(B,Q){var Z=this.lookahead,J=this.parsePattern(B,Q);if(this.match("=")){this.nextToken();var D=this.context.allowYield;this.context.allowYield=!0;var j=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowYield=D,J=this.finalize(this.startNode(Z),new H.AssignmentPattern(J,j))}return J},K.prototype.parseVariableIdentifier=function(B){var Q=this.createNode(),Z=this.nextToken();if(Z.type===4&&Z.value==="yield"){if(this.context.strict)this.tolerateUnexpectedToken(Z,Y.Messages.StrictReservedWord);else if(!this.context.allowYield)this.throwUnexpectedToken(Z)}else if(Z.type!==3){if(this.context.strict&&Z.type===4&&this.scanner.isStrictModeReservedWord(Z.value))this.tolerateUnexpectedToken(Z,Y.Messages.StrictReservedWord);else if(this.context.strict||Z.value!=="let"||B!=="var")this.throwUnexpectedToken(Z)}else if((this.context.isModule||this.context.await)&&Z.type===3&&Z.value==="await")this.tolerateUnexpectedToken(Z);return this.finalize(Q,new H.Identifier(Z.value))},K.prototype.parseVariableDeclaration=function(B){var Q=this.createNode(),Z=[],J=this.parsePattern(Z,"var");if(this.context.strict&&J.type===G.Syntax.Identifier){if(this.scanner.isRestrictedWord(J.name))this.tolerateError(Y.Messages.StrictVarName)}var D=null;if(this.match("="))this.nextToken(),D=this.isolateCoverGrammar(this.parseAssignmentExpression);else if(J.type!==G.Syntax.Identifier&&!B.inFor)this.expect("=");return this.finalize(Q,new H.VariableDeclarator(J,D))},K.prototype.parseVariableDeclarationList=function(B){var Q={inFor:B.inFor},Z=[];Z.push(this.parseVariableDeclaration(Q));while(this.match(","))this.nextToken(),Z.push(this.parseVariableDeclaration(Q));return Z},K.prototype.parseVariableStatement=function(){var B=this.createNode();this.expectKeyword("var");var Q=this.parseVariableDeclarationList({inFor:!1});return this.consumeSemicolon(),this.finalize(B,new H.VariableDeclaration(Q,"var"))},K.prototype.parseEmptyStatement=function(){var B=this.createNode();return this.expect(";"),this.finalize(B,new H.EmptyStatement)},K.prototype.parseExpressionStatement=function(){var B=this.createNode(),Q=this.parseExpression();return this.consumeSemicolon(),this.finalize(B,new H.ExpressionStatement(Q))},K.prototype.parseIfClause=function(){if(this.context.strict&&this.matchKeyword("function"))this.tolerateError(Y.Messages.StrictFunction);return this.parseStatement()},K.prototype.parseIfStatement=function(){var B=this.createNode(),Q,Z=null;this.expectKeyword("if"),this.expect("(");var J=this.parseExpression();if(!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),Q=this.finalize(this.createNode(),new H.EmptyStatement);else if(this.expect(")"),Q=this.parseIfClause(),this.matchKeyword("else"))this.nextToken(),Z=this.parseIfClause();return this.finalize(B,new H.IfStatement(J,Q,Z))},K.prototype.parseDoWhileStatement=function(){var B=this.createNode();this.expectKeyword("do");var Q=this.context.inIteration;this.context.inIteration=!0;var Z=this.parseStatement();this.context.inIteration=Q,this.expectKeyword("while"),this.expect("(");var J=this.parseExpression();if(!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken());else if(this.expect(")"),this.match(";"))this.nextToken();return this.finalize(B,new H.DoWhileStatement(Z,J))},K.prototype.parseWhileStatement=function(){var B=this.createNode(),Q;this.expectKeyword("while"),this.expect("(");var Z=this.parseExpression();if(!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),Q=this.finalize(this.createNode(),new H.EmptyStatement);else{this.expect(")");var J=this.context.inIteration;this.context.inIteration=!0,Q=this.parseStatement(),this.context.inIteration=J}return this.finalize(B,new H.WhileStatement(Z,Q))},K.prototype.parseForStatement=function(){var B=null,Q=null,Z=null,J=!0,D,j,C=this.createNode();if(this.expectKeyword("for"),this.expect("("),this.match(";"))this.nextToken();else if(this.matchKeyword("var")){B=this.createNode(),this.nextToken();var I=this.context.allowIn;this.context.allowIn=!1;var O=this.parseVariableDeclarationList({inFor:!0});if(this.context.allowIn=I,O.length===1&&this.matchKeyword("in")){var R=O[0];if(R.init&&(R.id.type===G.Syntax.ArrayPattern||R.id.type===G.Syntax.ObjectPattern||this.context.strict))this.tolerateError(Y.Messages.ForInOfLoopInitializer,"for-in");B=this.finalize(B,new H.VariableDeclaration(O,"var")),this.nextToken(),D=B,j=this.parseExpression(),B=null}else if(O.length===1&&O[0].init===null&&this.matchContextualKeyword("of"))B=this.finalize(B,new H.VariableDeclaration(O,"var")),this.nextToken(),D=B,j=this.parseAssignmentExpression(),B=null,J=!1;else B=this.finalize(B,new H.VariableDeclaration(O,"var")),this.expect(";")}else if(this.matchKeyword("const")||this.matchKeyword("let")){B=this.createNode();var P=this.nextToken().value;if(!this.context.strict&&this.lookahead.value==="in")B=this.finalize(B,new H.Identifier(P)),this.nextToken(),D=B,j=this.parseExpression(),B=null;else{var I=this.context.allowIn;this.context.allowIn=!1;var O=this.parseBindingList(P,{inFor:!0});if(this.context.allowIn=I,O.length===1&&O[0].init===null&&this.matchKeyword("in"))B=this.finalize(B,new H.VariableDeclaration(O,P)),this.nextToken(),D=B,j=this.parseExpression(),B=null;else if(O.length===1&&O[0].init===null&&this.matchContextualKeyword("of"))B=this.finalize(B,new H.VariableDeclaration(O,P)),this.nextToken(),D=B,j=this.parseAssignmentExpression(),B=null,J=!1;else this.consumeSemicolon(),B=this.finalize(B,new H.VariableDeclaration(O,P))}}else{var E=this.lookahead,I=this.context.allowIn;if(this.context.allowIn=!1,B=this.inheritCoverGrammar(this.parseAssignmentExpression),this.context.allowIn=I,this.matchKeyword("in")){if(!this.context.isAssignmentTarget||B.type===G.Syntax.AssignmentExpression)this.tolerateError(Y.Messages.InvalidLHSInForIn);this.nextToken(),this.reinterpretExpressionAsPattern(B),D=B,j=this.parseExpression(),B=null}else if(this.matchContextualKeyword("of")){if(!this.context.isAssignmentTarget||B.type===G.Syntax.AssignmentExpression)this.tolerateError(Y.Messages.InvalidLHSInForLoop);this.nextToken(),this.reinterpretExpressionAsPattern(B),D=B,j=this.parseAssignmentExpression(),B=null,J=!1}else{if(this.match(",")){var b=[B];while(this.match(","))this.nextToken(),b.push(this.isolateCoverGrammar(this.parseAssignmentExpression));B=this.finalize(this.startNode(E),new H.SequenceExpression(b))}this.expect(";")}}if(typeof D>"u"){if(!this.match(";"))Q=this.parseExpression();if(this.expect(";"),!this.match(")"))Z=this.parseExpression()}var y;if(!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),y=this.finalize(this.createNode(),new H.EmptyStatement);else{this.expect(")");var g=this.context.inIteration;this.context.inIteration=!0,y=this.isolateCoverGrammar(this.parseStatement),this.context.inIteration=g}return typeof D>"u"?this.finalize(C,new H.ForStatement(B,Q,Z,y)):J?this.finalize(C,new H.ForInStatement(D,j,y)):this.finalize(C,new H.ForOfStatement(D,j,y))},K.prototype.parseContinueStatement=function(){var B=this.createNode();this.expectKeyword("continue");var Q=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var Z=this.parseVariableIdentifier();Q=Z;var J="$"+Z.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,J))this.throwError(Y.Messages.UnknownLabel,Z.name)}if(this.consumeSemicolon(),Q===null&&!this.context.inIteration)this.throwError(Y.Messages.IllegalContinue);return this.finalize(B,new H.ContinueStatement(Q))},K.prototype.parseBreakStatement=function(){var B=this.createNode();this.expectKeyword("break");var Q=null;if(this.lookahead.type===3&&!this.hasLineTerminator){var Z=this.parseVariableIdentifier(),J="$"+Z.name;if(!Object.prototype.hasOwnProperty.call(this.context.labelSet,J))this.throwError(Y.Messages.UnknownLabel,Z.name);Q=Z}if(this.consumeSemicolon(),Q===null&&!this.context.inIteration&&!this.context.inSwitch)this.throwError(Y.Messages.IllegalBreak);return this.finalize(B,new H.BreakStatement(Q))},K.prototype.parseReturnStatement=function(){if(!this.context.inFunctionBody)this.tolerateError(Y.Messages.IllegalReturn);var B=this.createNode();this.expectKeyword("return");var Q=!this.match(";")&&!this.match("}")&&!this.hasLineTerminator&&this.lookahead.type!==2||this.lookahead.type===8||this.lookahead.type===10,Z=Q?this.parseExpression():null;return this.consumeSemicolon(),this.finalize(B,new H.ReturnStatement(Z))},K.prototype.parseWithStatement=function(){if(this.context.strict)this.tolerateError(Y.Messages.StrictModeWith);var B=this.createNode(),Q;this.expectKeyword("with"),this.expect("(");var Z=this.parseExpression();if(!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),Q=this.finalize(this.createNode(),new H.EmptyStatement);else this.expect(")"),Q=this.parseStatement();return this.finalize(B,new H.WithStatement(Z,Q))},K.prototype.parseSwitchCase=function(){var B=this.createNode(),Q;if(this.matchKeyword("default"))this.nextToken(),Q=null;else this.expectKeyword("case"),Q=this.parseExpression();this.expect(":");var Z=[];while(!0){if(this.match("}")||this.matchKeyword("default")||this.matchKeyword("case"))break;Z.push(this.parseStatementListItem())}return this.finalize(B,new H.SwitchCase(Q,Z))},K.prototype.parseSwitchStatement=function(){var B=this.createNode();this.expectKeyword("switch"),this.expect("(");var Q=this.parseExpression();this.expect(")");var Z=this.context.inSwitch;this.context.inSwitch=!0;var J=[],D=!1;this.expect("{");while(!0){if(this.match("}"))break;var j=this.parseSwitchCase();if(j.test===null){if(D)this.throwError(Y.Messages.MultipleDefaultsInSwitch);D=!0}J.push(j)}return this.expect("}"),this.context.inSwitch=Z,this.finalize(B,new H.SwitchStatement(Q,J))},K.prototype.parseLabelledStatement=function(){var B=this.createNode(),Q=this.parseExpression(),Z;if(Q.type===G.Syntax.Identifier&&this.match(":")){this.nextToken();var J=Q,D="$"+J.name;if(Object.prototype.hasOwnProperty.call(this.context.labelSet,D))this.throwError(Y.Messages.Redeclaration,"Label",J.name);this.context.labelSet[D]=!0;var j=void 0;if(this.matchKeyword("class"))this.tolerateUnexpectedToken(this.lookahead),j=this.parseClassDeclaration();else if(this.matchKeyword("function")){var C=this.lookahead,I=this.parseFunctionDeclaration();if(this.context.strict)this.tolerateUnexpectedToken(C,Y.Messages.StrictFunction);else if(I.generator)this.tolerateUnexpectedToken(C,Y.Messages.GeneratorInLegacyContext);j=I}else j=this.parseStatement();delete this.context.labelSet[D],Z=new H.LabeledStatement(J,j)}else this.consumeSemicolon(),Z=new H.ExpressionStatement(Q);return this.finalize(B,Z)},K.prototype.parseThrowStatement=function(){var B=this.createNode();if(this.expectKeyword("throw"),this.hasLineTerminator)this.throwError(Y.Messages.NewlineAfterThrow);var Q=this.parseExpression();return this.consumeSemicolon(),this.finalize(B,new H.ThrowStatement(Q))},K.prototype.parseCatchClause=function(){var B=this.createNode();if(this.expectKeyword("catch"),this.expect("("),this.match(")"))this.throwUnexpectedToken(this.lookahead);var Q=[],Z=this.parsePattern(Q),J={};for(var D=0;D<Q.length;D++){var j="$"+Q[D].value;if(Object.prototype.hasOwnProperty.call(J,j))this.tolerateError(Y.Messages.DuplicateBinding,Q[D].value);J[j]=!0}if(this.context.strict&&Z.type===G.Syntax.Identifier){if(this.scanner.isRestrictedWord(Z.name))this.tolerateError(Y.Messages.StrictCatchVariable)}this.expect(")");var C=this.parseBlock();return this.finalize(B,new H.CatchClause(Z,C))},K.prototype.parseFinallyClause=function(){return this.expectKeyword("finally"),this.parseBlock()},K.prototype.parseTryStatement=function(){var B=this.createNode();this.expectKeyword("try");var Q=this.parseBlock(),Z=this.matchKeyword("catch")?this.parseCatchClause():null,J=this.matchKeyword("finally")?this.parseFinallyClause():null;if(!Z&&!J)this.throwError(Y.Messages.NoCatchOrFinally);return this.finalize(B,new H.TryStatement(Q,Z,J))},K.prototype.parseDebuggerStatement=function(){var B=this.createNode();return this.expectKeyword("debugger"),this.consumeSemicolon(),this.finalize(B,new H.DebuggerStatement)},K.prototype.parseStatement=function(){var B;switch(this.lookahead.type){case 1:case 5:case 6:case 8:case 10:case 9:B=this.parseExpressionStatement();break;case 7:var Q=this.lookahead.value;if(Q==="{")B=this.parseBlock();else if(Q==="(")B=this.parseExpressionStatement();else if(Q===";")B=this.parseEmptyStatement();else B=this.parseExpressionStatement();break;case 3:B=this.matchAsyncFunction()?this.parseFunctionDeclaration():this.parseLabelledStatement();break;case 4:switch(this.lookahead.value){case"break":B=this.parseBreakStatement();break;case"continue":B=this.parseContinueStatement();break;case"debugger":B=this.parseDebuggerStatement();break;case"do":B=this.parseDoWhileStatement();break;case"for":B=this.parseForStatement();break;case"function":B=this.parseFunctionDeclaration();break;case"if":B=this.parseIfStatement();break;case"return":B=this.parseReturnStatement();break;case"switch":B=this.parseSwitchStatement();break;case"throw":B=this.parseThrowStatement();break;case"try":B=this.parseTryStatement();break;case"var":B=this.parseVariableStatement();break;case"while":B=this.parseWhileStatement();break;case"with":B=this.parseWithStatement();break;default:B=this.parseExpressionStatement();break}break;default:B=this.throwUnexpectedToken(this.lookahead)}return B},K.prototype.parseFunctionSourceElements=function(){var B=this.createNode();this.expect("{");var Q=this.parseDirectivePrologues(),Z=this.context.labelSet,J=this.context.inIteration,D=this.context.inSwitch,j=this.context.inFunctionBody;this.context.labelSet={},this.context.inIteration=!1,this.context.inSwitch=!1,this.context.inFunctionBody=!0;while(this.lookahead.type!==2){if(this.match("}"))break;Q.push(this.parseStatementListItem())}return this.expect("}"),this.context.labelSet=Z,this.context.inIteration=J,this.context.inSwitch=D,this.context.inFunctionBody=j,this.finalize(B,new H.BlockStatement(Q))},K.prototype.validateParam=function(B,Q,Z){var J="$"+Z;if(this.context.strict){if(this.scanner.isRestrictedWord(Z))B.stricted=Q,B.message=Y.Messages.StrictParamName;if(Object.prototype.hasOwnProperty.call(B.paramSet,J))B.stricted=Q,B.message=Y.Messages.StrictParamDupe}else if(!B.firstRestricted){if(this.scanner.isRestrictedWord(Z))B.firstRestricted=Q,B.message=Y.Messages.StrictParamName;else if(this.scanner.isStrictModeReservedWord(Z))B.firstRestricted=Q,B.message=Y.Messages.StrictReservedWord;else if(Object.prototype.hasOwnProperty.call(B.paramSet,J))B.stricted=Q,B.message=Y.Messages.StrictParamDupe}if(typeof Object.defineProperty==="function")Object.defineProperty(B.paramSet,J,{value:!0,enumerable:!0,writable:!0,configurable:!0});else B.paramSet[J]=!0},K.prototype.parseRestElement=function(B){var Q=this.createNode();this.expect("...");var Z=this.parsePattern(B);if(this.match("="))this.throwError(Y.Messages.DefaultRestParameter);if(!this.match(")"))this.throwError(Y.Messages.ParameterAfterRestParameter);return this.finalize(Q,new H.RestElement(Z))},K.prototype.parseFormalParameter=function(B){var Q=[],Z=this.match("...")?this.parseRestElement(Q):this.parsePatternWithDefault(Q);for(var J=0;J<Q.length;J++)this.validateParam(B,Q[J],Q[J].value);B.simple=B.simple&&Z instanceof H.Identifier,B.params.push(Z)},K.prototype.parseFormalParameters=function(B){var Q={simple:!0,params:[],firstRestricted:B};if(this.expect("("),!this.match(")")){Q.paramSet={};while(this.lookahead.type!==2){if(this.parseFormalParameter(Q),this.match(")"))break;if(this.expect(","),this.match(")"))break}}return this.expect(")"),{simple:Q.simple,params:Q.params,stricted:Q.stricted,firstRestricted:Q.firstRestricted,message:Q.message}},K.prototype.matchAsyncFunction=function(){var B=this.matchContextualKeyword("async");if(B){var Q=this.scanner.saveState();this.scanner.scanComments();var Z=this.scanner.lex();this.scanner.restoreState(Q),B=Q.lineNumber===Z.lineNumber&&Z.type===4&&Z.value==="function"}return B},K.prototype.parseFunctionDeclaration=function(B){var Q=this.createNode(),Z=this.matchContextualKeyword("async");if(Z)this.nextToken();this.expectKeyword("function");var J=Z?!1:this.match("*");if(J)this.nextToken();var D,j=null,C=null;if(!B||!this.match("(")){var I=this.lookahead;if(j=this.parseVariableIdentifier(),this.context.strict){if(this.scanner.isRestrictedWord(I.value))this.tolerateUnexpectedToken(I,Y.Messages.StrictFunctionName)}else if(this.scanner.isRestrictedWord(I.value))C=I,D=Y.Messages.StrictFunctionName;else if(this.scanner.isStrictModeReservedWord(I.value))C=I,D=Y.Messages.StrictReservedWord}var O=this.context.await,R=this.context.allowYield;this.context.await=Z,this.context.allowYield=!J;var P=this.parseFormalParameters(C),E=P.params,b=P.stricted;if(C=P.firstRestricted,P.message)D=P.message;var y=this.context.strict,g=this.context.allowStrictDirective;this.context.allowStrictDirective=P.simple;var a=this.parseFunctionSourceElements();if(this.context.strict&&C)this.throwUnexpectedToken(C,D);if(this.context.strict&&b)this.tolerateUnexpectedToken(b,D);return this.context.strict=y,this.context.allowStrictDirective=g,this.context.await=O,this.context.allowYield=R,Z?this.finalize(Q,new H.AsyncFunctionDeclaration(j,E,a)):this.finalize(Q,new H.FunctionDeclaration(j,E,a,J))},K.prototype.parseFunctionExpression=function(){var B=this.createNode(),Q=this.matchContextualKeyword("async");if(Q)this.nextToken();this.expectKeyword("function");var Z=Q?!1:this.match("*");if(Z)this.nextToken();var J,D=null,j,C=this.context.await,I=this.context.allowYield;if(this.context.await=Q,this.context.allowYield=!Z,!this.match("(")){var O=this.lookahead;if(D=!this.context.strict&&!Z&&this.matchKeyword("yield")?this.parseIdentifierName():this.parseVariableIdentifier(),this.context.strict){if(this.scanner.isRestrictedWord(O.value))this.tolerateUnexpectedToken(O,Y.Messages.StrictFunctionName)}else if(this.scanner.isRestrictedWord(O.value))j=O,J=Y.Messages.StrictFunctionName;else if(this.scanner.isStrictModeReservedWord(O.value))j=O,J=Y.Messages.StrictReservedWord}var R=this.parseFormalParameters(j),P=R.params,E=R.stricted;if(j=R.firstRestricted,R.message)J=R.message;var b=this.context.strict,y=this.context.allowStrictDirective;this.context.allowStrictDirective=R.simple;var g=this.parseFunctionSourceElements();if(this.context.strict&&j)this.throwUnexpectedToken(j,J);if(this.context.strict&&E)this.tolerateUnexpectedToken(E,J);return this.context.strict=b,this.context.allowStrictDirective=y,this.context.await=C,this.context.allowYield=I,Q?this.finalize(B,new H.AsyncFunctionExpression(D,P,g)):this.finalize(B,new H.FunctionExpression(D,P,g,Z))},K.prototype.parseDirective=function(){var B=this.lookahead,Q=this.createNode(),Z=this.parseExpression(),J=Z.type===G.Syntax.Literal?this.getTokenRaw(B).slice(1,-1):null;return this.consumeSemicolon(),this.finalize(Q,J?new H.Directive(Z,J):new H.ExpressionStatement(Z))},K.prototype.parseDirectivePrologues=function(){var B=null,Q=[];while(!0){var Z=this.lookahead;if(Z.type!==8)break;var J=this.parseDirective();Q.push(J);var D=J.directive;if(typeof D!=="string")break;if(D==="use strict"){if(this.context.strict=!0,B)this.tolerateUnexpectedToken(B,Y.Messages.StrictOctalLiteral);if(!this.context.allowStrictDirective)this.tolerateUnexpectedToken(Z,Y.Messages.IllegalLanguageModeDirective)}else if(!B&&Z.octal)B=Z}return Q},K.prototype.qualifiedPropertyName=function(B){switch(B.type){case 3:case 8:case 1:case 5:case 6:case 4:return!0;case 7:return B.value==="[";default:break}return!1},K.prototype.parseGetterMethod=function(){var B=this.createNode(),Q=!1,Z=this.context.allowYield;this.context.allowYield=!Q;var J=this.parseFormalParameters();if(J.params.length>0)this.tolerateError(Y.Messages.BadGetterArity);var D=this.parsePropertyMethod(J);return this.context.allowYield=Z,this.finalize(B,new H.FunctionExpression(null,J.params,D,Q))},K.prototype.parseSetterMethod=function(){var B=this.createNode(),Q=!1,Z=this.context.allowYield;this.context.allowYield=!Q;var J=this.parseFormalParameters();if(J.params.length!==1)this.tolerateError(Y.Messages.BadSetterArity);else if(J.params[0]instanceof H.RestElement)this.tolerateError(Y.Messages.BadSetterRestParameter);var D=this.parsePropertyMethod(J);return this.context.allowYield=Z,this.finalize(B,new H.FunctionExpression(null,J.params,D,Q))},K.prototype.parseGeneratorMethod=function(){var B=this.createNode(),Q=!0,Z=this.context.allowYield;this.context.allowYield=!0;var J=this.parseFormalParameters();this.context.allowYield=!1;var D=this.parsePropertyMethod(J);return this.context.allowYield=Z,this.finalize(B,new H.FunctionExpression(null,J.params,D,Q))},K.prototype.isStartOfExpression=function(){var B=!0,Q=this.lookahead.value;switch(this.lookahead.type){case 7:B=Q==="["||Q==="("||Q==="{"||Q==="+"||Q==="-"||Q==="!"||Q==="~"||Q==="++"||Q==="--"||Q==="/"||Q==="/=";break;case 4:B=Q==="class"||Q==="delete"||Q==="function"||Q==="let"||Q==="new"||Q==="super"||Q==="this"||Q==="typeof"||Q==="void"||Q==="yield";break;default:break}return B},K.prototype.parseYieldExpression=function(){var B=this.createNode();this.expectKeyword("yield");var Q=null,Z=!1;if(!this.hasLineTerminator){var J=this.context.allowYield;if(this.context.allowYield=!1,Z=this.match("*"),Z)this.nextToken(),Q=this.parseAssignmentExpression();else if(this.isStartOfExpression())Q=this.parseAssignmentExpression();this.context.allowYield=J}return this.finalize(B,new H.YieldExpression(Q,Z))},K.prototype.parseClassElement=function(B){var Q=this.lookahead,Z=this.createNode(),J="",D=null,j=null,C=!1,I=!1,O=!1,R=!1;if(this.match("*"))this.nextToken();else{C=this.match("["),D=this.parseObjectPropertyKey();var P=D;if(P.name==="static"&&(this.qualifiedPropertyName(this.lookahead)||this.match("*")))if(Q=this.lookahead,O=!0,C=this.match("["),this.match("*"))this.nextToken();else D=this.parseObjectPropertyKey();if(Q.type===3&&!this.hasLineTerminator&&Q.value==="async"){var E=this.lookahead.value;if(E!==":"&&E!=="("&&E!=="*"){if(R=!0,Q=this.lookahead,D=this.parseObjectPropertyKey(),Q.type===3&&Q.value==="constructor")this.tolerateUnexpectedToken(Q,Y.Messages.ConstructorIsAsync)}}}var b=this.qualifiedPropertyName(this.lookahead);if(Q.type===3){if(Q.value==="get"&&b)J="get",C=this.match("["),D=this.parseObjectPropertyKey(),this.context.allowYield=!1,j=this.parseGetterMethod();else if(Q.value==="set"&&b)J="set",C=this.match("["),D=this.parseObjectPropertyKey(),j=this.parseSetterMethod()}else if(Q.type===7&&Q.value==="*"&&b)J="init",C=this.match("["),D=this.parseObjectPropertyKey(),j=this.parseGeneratorMethod(),I=!0;if(!J&&D&&this.match("("))J="init",j=R?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction(),I=!0;if(!J)this.throwUnexpectedToken(this.lookahead);if(J==="init")J="method";if(!C){if(O&&this.isPropertyKey(D,"prototype"))this.throwUnexpectedToken(Q,Y.Messages.StaticPrototype);if(!O&&this.isPropertyKey(D,"constructor")){if(J!=="method"||!I||j&&j.generator)this.throwUnexpectedToken(Q,Y.Messages.ConstructorSpecialMethod);if(B.value)this.throwUnexpectedToken(Q,Y.Messages.DuplicateConstructor);else B.value=!0;J="constructor"}}return this.finalize(Z,new H.MethodDefinition(D,C,j,J,O))},K.prototype.parseClassElementList=function(){var B=[],Q={value:!1};this.expect("{");while(!this.match("}"))if(this.match(";"))this.nextToken();else B.push(this.parseClassElement(Q));return this.expect("}"),B},K.prototype.parseClassBody=function(){var B=this.createNode(),Q=this.parseClassElementList();return this.finalize(B,new H.ClassBody(Q))},K.prototype.parseClassDeclaration=function(B){var Q=this.createNode(),Z=this.context.strict;this.context.strict=!0,this.expectKeyword("class");var J=B&&this.lookahead.type!==3?null:this.parseVariableIdentifier(),D=null;if(this.matchKeyword("extends"))this.nextToken(),D=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);var j=this.parseClassBody();return this.context.strict=Z,this.finalize(Q,new H.ClassDeclaration(J,D,j))},K.prototype.parseClassExpression=function(){var B=this.createNode(),Q=this.context.strict;this.context.strict=!0,this.expectKeyword("class");var Z=this.lookahead.type===3?this.parseVariableIdentifier():null,J=null;if(this.matchKeyword("extends"))this.nextToken(),J=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);var D=this.parseClassBody();return this.context.strict=Q,this.finalize(B,new H.ClassExpression(Z,J,D))},K.prototype.parseModule=function(){this.context.strict=!0,this.context.isModule=!0,this.scanner.isModule=!0;var B=this.createNode(),Q=this.parseDirectivePrologues();while(this.lookahead.type!==2)Q.push(this.parseStatementListItem());return this.finalize(B,new H.Module(Q))},K.prototype.parseScript=function(){var B=this.createNode(),Q=this.parseDirectivePrologues();while(this.lookahead.type!==2)Q.push(this.parseStatementListItem());return this.finalize(B,new H.Script(Q))},K.prototype.parseModuleSpecifier=function(){var B=this.createNode();if(this.lookahead.type!==8)this.throwError(Y.Messages.InvalidModuleSpecifier);var Q=this.nextToken(),Z=this.getTokenRaw(Q);return this.finalize(B,new H.Literal(Q.value,Z))},K.prototype.parseImportSpecifier=function(){var B=this.createNode(),Q,Z;if(this.lookahead.type===3){if(Q=this.parseVariableIdentifier(),Z=Q,this.matchContextualKeyword("as"))this.nextToken(),Z=this.parseVariableIdentifier()}else if(Q=this.parseIdentifierName(),Z=Q,this.matchContextualKeyword("as"))this.nextToken(),Z=this.parseVariableIdentifier();else this.throwUnexpectedToken(this.nextToken());return this.finalize(B,new H.ImportSpecifier(Z,Q))},K.prototype.parseNamedImports=function(){this.expect("{");var B=[];while(!this.match("}"))if(B.push(this.parseImportSpecifier()),!this.match("}"))this.expect(",");return this.expect("}"),B},K.prototype.parseImportDefaultSpecifier=function(){var B=this.createNode(),Q=this.parseIdentifierName();return this.finalize(B,new H.ImportDefaultSpecifier(Q))},K.prototype.parseImportNamespaceSpecifier=function(){var B=this.createNode();if(this.expect("*"),!this.matchContextualKeyword("as"))this.throwError(Y.Messages.NoAsAfterImportNamespace);this.nextToken();var Q=this.parseIdentifierName();return this.finalize(B,new H.ImportNamespaceSpecifier(Q))},K.prototype.parseImportDeclaration=function(){if(this.context.inFunctionBody)this.throwError(Y.Messages.IllegalImportDeclaration);var B=this.createNode();this.expectKeyword("import");var Q,Z=[];if(this.lookahead.type===8)Q=this.parseModuleSpecifier();else{if(this.match("{"))Z=Z.concat(this.parseNamedImports());else if(this.match("*"))Z.push(this.parseImportNamespaceSpecifier());else if(this.isIdentifierName(this.lookahead)&&!this.matchKeyword("default")){if(Z.push(this.parseImportDefaultSpecifier()),this.match(","))if(this.nextToken(),this.match("*"))Z.push(this.parseImportNamespaceSpecifier());else if(this.match("{"))Z=Z.concat(this.parseNamedImports());else this.throwUnexpectedToken(this.lookahead)}else this.throwUnexpectedToken(this.nextToken());if(!this.matchContextualKeyword("from")){var J=this.lookahead.value?Y.Messages.UnexpectedToken:Y.Messages.MissingFromClause;this.throwError(J,this.lookahead.value)}this.nextToken(),Q=this.parseModuleSpecifier()}return this.consumeSemicolon(),this.finalize(B,new H.ImportDeclaration(Z,Q))},K.prototype.parseExportSpecifier=function(){var B=this.createNode(),Q=this.parseIdentifierName(),Z=Q;if(this.matchContextualKeyword("as"))this.nextToken(),Z=this.parseIdentifierName();return this.finalize(B,new H.ExportSpecifier(Q,Z))},K.prototype.parseExportDeclaration=function(){if(this.context.inFunctionBody)this.throwError(Y.Messages.IllegalExportDeclaration);var B=this.createNode();this.expectKeyword("export");var Q;if(this.matchKeyword("default"))if(this.nextToken(),this.matchKeyword("function")){var Z=this.parseFunctionDeclaration(!0);Q=this.finalize(B,new H.ExportDefaultDeclaration(Z))}else if(this.matchKeyword("class")){var Z=this.parseClassDeclaration(!0);Q=this.finalize(B,new H.ExportDefaultDeclaration(Z))}else if(this.matchContextualKeyword("async")){var Z=this.matchAsyncFunction()?this.parseFunctionDeclaration(!0):this.parseAssignmentExpression();Q=this.finalize(B,new H.ExportDefaultDeclaration(Z))}else{if(this.matchContextualKeyword("from"))this.throwError(Y.Messages.UnexpectedToken,this.lookahead.value);var Z=this.match("{")?this.parseObjectInitializer():this.match("[")?this.parseArrayInitializer():this.parseAssignmentExpression();this.consumeSemicolon(),Q=this.finalize(B,new H.ExportDefaultDeclaration(Z))}else if(this.match("*")){if(this.nextToken(),!this.matchContextualKeyword("from")){var J=this.lookahead.value?Y.Messages.UnexpectedToken:Y.Messages.MissingFromClause;this.throwError(J,this.lookahead.value)}this.nextToken();var D=this.parseModuleSpecifier();this.consumeSemicolon(),Q=this.finalize(B,new H.ExportAllDeclaration(D))}else if(this.lookahead.type===4){var Z=void 0;switch(this.lookahead.value){case"let":case"const":Z=this.parseLexicalDeclaration({inFor:!1});break;case"var":case"class":case"function":Z=this.parseStatementListItem();break;default:this.throwUnexpectedToken(this.lookahead)}Q=this.finalize(B,new H.ExportNamedDeclaration(Z,[],null))}else if(this.matchAsyncFunction()){var Z=this.parseFunctionDeclaration();Q=this.finalize(B,new H.ExportNamedDeclaration(Z,[],null))}else{var j=[],C=null,I=!1;this.expect("{");while(!this.match("}"))if(I=I||this.matchKeyword("default"),j.push(this.parseExportSpecifier()),!this.match("}"))this.expect(",");if(this.expect("}"),this.matchContextualKeyword("from"))this.nextToken(),C=this.parseModuleSpecifier(),this.consumeSemicolon();else if(I){var J=this.lookahead.value?Y.Messages.UnexpectedToken:Y.Messages.MissingFromClause;this.throwError(J,this.lookahead.value)}else this.consumeSemicolon();Q=this.finalize(B,new H.ExportNamedDeclaration(null,j,C))}return Q},K}();W.Parser=q},function($,W){Object.defineProperty(W,"__esModule",{value:!0});function X(z,M){if(!z)throw Error("ASSERT: "+M)}W.assert=X},function($,W){Object.defineProperty(W,"__esModule",{value:!0});var X=function(){function z(){this.errors=[],this.tolerant=!1}return z.prototype.recordError=function(M){this.errors.push(M)},z.prototype.tolerate=function(M){if(this.tolerant)this.recordError(M);else throw M},z.prototype.constructError=function(M,Y){var H=Error(M);try{throw H}catch(V){if(Object.create&&Object.defineProperty)H=Object.create(V),Object.defineProperty(H,"column",{value:Y})}return H},z.prototype.createError=function(M,Y,H,V){var G="Line "+Y+": "+V,L=this.constructError(G,H);return L.index=M,L.lineNumber=Y,L.description=V,L},z.prototype.throwError=function(M,Y,H,V){throw this.createError(M,Y,H,V)},z.prototype.tolerateError=function(M,Y,H,V){var G=this.createError(M,Y,H,V);if(this.tolerant)this.recordError(G);else throw G},z}();W.ErrorHandler=X},function($,W){Object.defineProperty(W,"__esModule",{value:!0}),W.Messages={BadGetterArity:"Getter must not have any formal parameters",BadSetterArity:"Setter must have exactly one formal parameter",BadSetterRestParameter:"Setter function argument must not be a rest parameter",ConstructorIsAsync:"Class constructor may not be an async method",ConstructorSpecialMethod:"Class constructor may not be an accessor",DeclarationMissingInitializer:"Missing initializer in %0 declaration",DefaultRestParameter:"Unexpected token =",DuplicateBinding:"Duplicate binding %0",DuplicateConstructor:"A class may only have one constructor",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ForInOfLoopInitializer:"%0 loop variable declaration may not have an initializer",GeneratorInLegacyContext:"Generator declarations are not allowed in legacy contexts",IllegalBreak:"Illegal break statement",IllegalContinue:"Illegal continue statement",IllegalExportDeclaration:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalLanguageModeDirective:"Illegal 'use strict' directive in function with non-simple parameter list",IllegalReturn:"Illegal return statement",InvalidEscapedReservedWord:"Keyword must not contain escaped characters",InvalidHexEscapeSequence:"Invalid hexadecimal escape sequence",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",InvalidModuleSpecifier:"Unexpected token",InvalidRegExp:"Invalid regular expression",LetInLexicalBinding:"let is disallowed as a lexically bound name",MissingFromClause:"Unexpected token",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NewlineAfterThrow:"Illegal newline after throw",NoAsAfterImportNamespace:"Unexpected token",NoCatchOrFinally:"Missing catch or finally after try",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",Redeclaration:"%0 '%1' has already been declared",StaticPrototype:"Classes may not have static property named prototype",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictFunction:"In strict mode code, functions can only be declared at top level or inside a block",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictModeWith:"Strict mode code may not include a with statement",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",UnexpectedEOS:"Unexpected end of input",UnexpectedIdentifier:"Unexpected identifier",UnexpectedNumber:"Unexpected number",UnexpectedReserved:"Unexpected reserved word",UnexpectedString:"Unexpected string",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedToken:"Unexpected token %0",UnexpectedTokenIllegal:"Unexpected token ILLEGAL",UnknownLabel:"Undefined label '%0'",UnterminatedRegExp:"Invalid regular expression: missing /"}},function($,W,X){Object.defineProperty(W,"__esModule",{value:!0});var z=X(9),M=X(4),Y=X(11);function H(L){return"0123456789abcdef".indexOf(L.toLowerCase())}function V(L){return"01234567".indexOf(L)}var G=function(){function L(U,q){this.source=U,this.errorHandler=q,this.trackComment=!1,this.isModule=!1,this.length=U.length,this.index=0,this.lineNumber=U.length>0?1:0,this.lineStart=0,this.curlyStack=[]}return L.prototype.saveState=function(){return{index:this.index,lineNumber:this.lineNumber,lineStart:this.lineStart}},L.prototype.restoreState=function(U){this.index=U.index,this.lineNumber=U.lineNumber,this.lineStart=U.lineStart},L.prototype.eof=function(){return this.index>=this.length},L.prototype.throwUnexpectedToken=function(U){if(U===void 0)U=Y.Messages.UnexpectedTokenIllegal;return this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,U)},L.prototype.tolerateUnexpectedToken=function(U){if(U===void 0)U=Y.Messages.UnexpectedTokenIllegal;this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,U)},L.prototype.skipSingleLineComment=function(U){var q=[],K,B;if(this.trackComment)q=[],K=this.index-U,B={start:{line:this.lineNumber,column:this.index-this.lineStart-U},end:{}};while(!this.eof()){var Q=this.source.charCodeAt(this.index);if(++this.index,M.Character.isLineTerminator(Q)){if(this.trackComment){B.end={line:this.lineNumber,column:this.index-this.lineStart-1};var Z={multiLine:!1,slice:[K+U,this.index-1],range:[K,this.index-1],loc:B};q.push(Z)}if(Q===13&&this.source.charCodeAt(this.index)===10)++this.index;return++this.lineNumber,this.lineStart=this.index,q}}if(this.trackComment){B.end={line:this.lineNumber,column:this.index-this.lineStart};var Z={multiLine:!1,slice:[K+U,this.index],range:[K,this.index],loc:B};q.push(Z)}return q},L.prototype.skipMultiLineComment=function(){var U=[],q,K;if(this.trackComment)U=[],q=this.index-2,K={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}};while(!this.eof()){var B=this.source.charCodeAt(this.index);if(M.Character.isLineTerminator(B)){if(B===13&&this.source.charCodeAt(this.index+1)===10)++this.index;++this.lineNumber,++this.index,this.lineStart=this.index}else if(B===42){if(this.source.charCodeAt(this.index+1)===47){if(this.index+=2,this.trackComment){K.end={line:this.lineNumber,column:this.index-this.lineStart};var Q={multiLine:!0,slice:[q+2,this.index-2],range:[q,this.index],loc:K};U.push(Q)}return U}++this.index}else++this.index}if(this.trackComment){K.end={line:this.lineNumber,column:this.index-this.lineStart};var Q={multiLine:!0,slice:[q+2,this.index],range:[q,this.index],loc:K};U.push(Q)}return this.tolerateUnexpectedToken(),U},L.prototype.scanComments=function(){var U;if(this.trackComment)U=[];var q=this.index===0;while(!this.eof()){var K=this.source.charCodeAt(this.index);if(M.Character.isWhiteSpace(K))++this.index;else if(M.Character.isLineTerminator(K)){if(++this.index,K===13&&this.source.charCodeAt(this.index)===10)++this.index;++this.lineNumber,this.lineStart=this.index,q=!0}else if(K===47)if(K=this.source.charCodeAt(this.index+1),K===47){this.index+=2;var B=this.skipSingleLineComment(2);if(this.trackComment)U=U.concat(B);q=!0}else if(K===42){this.index+=2;var B=this.skipMultiLineComment();if(this.trackComment)U=U.concat(B)}else break;else if(q&&K===45)if(this.source.charCodeAt(this.index+1)===45&&this.source.charCodeAt(this.index+2)===62){this.index+=3;var B=this.skipSingleLineComment(3);if(this.trackComment)U=U.concat(B)}else break;else if(K===60&&!this.isModule)if(this.source.slice(this.index+1,this.index+4)==="!--"){this.index+=4;var B=this.skipSingleLineComment(4);if(this.trackComment)U=U.concat(B)}else break;else break}return U},L.prototype.isFutureReservedWord=function(U){switch(U){case"enum":case"export":case"import":case"super":return!0;default:return!1}},L.prototype.isStrictModeReservedWord=function(U){switch(U){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}},L.prototype.isRestrictedWord=function(U){return U==="eval"||U==="arguments"},L.prototype.isKeyword=function(U){switch(U.length){case 2:return U==="if"||U==="in"||U==="do";case 3:return U==="var"||U==="for"||U==="new"||U==="try"||U==="let";case 4:return U==="this"||U==="else"||U==="case"||U==="void"||U==="with"||U==="enum";case 5:return U==="while"||U==="break"||U==="catch"||U==="throw"||U==="const"||U==="yield"||U==="class"||U==="super";case 6:return U==="return"||U==="typeof"||U==="delete"||U==="switch"||U==="export"||U==="import";case 7:return U==="default"||U==="finally"||U==="extends";case 8:return U==="function"||U==="continue"||U==="debugger";case 10:return U==="instanceof";default:return!1}},L.prototype.codePointAt=function(U){var q=this.source.charCodeAt(U);if(q>=55296&&q<=56319){var K=this.source.charCodeAt(U+1);if(K>=56320&&K<=57343){var B=q;q=(B-55296)*1024+K-56320+65536}}return q},L.prototype.scanHexEscape=function(U){var q=U==="u"?4:2,K=0;for(var B=0;B<q;++B)if(!this.eof()&&M.Character.isHexDigit(this.source.charCodeAt(this.index)))K=K*16+H(this.source[this.index++]);else return null;return String.fromCharCode(K)},L.prototype.scanUnicodeCodePointEscape=function(){var U=this.source[this.index],q=0;if(U==="}")this.throwUnexpectedToken();while(!this.eof()){if(U=this.source[this.index++],!M.Character.isHexDigit(U.charCodeAt(0)))break;q=q*16+H(U)}if(q>1114111||U!=="}")this.throwUnexpectedToken();return M.Character.fromCodePoint(q)},L.prototype.getIdentifier=function(){var U=this.index++;while(!this.eof()){var q=this.source.charCodeAt(this.index);if(q===92)return this.index=U,this.getComplexIdentifier();else if(q>=55296&&q<57343)return this.index=U,this.getComplexIdentifier();if(M.Character.isIdentifierPart(q))++this.index;else break}return this.source.slice(U,this.index)},L.prototype.getComplexIdentifier=function(){var U=this.codePointAt(this.index),q=M.Character.fromCodePoint(U);this.index+=q.length;var K;if(U===92){if(this.source.charCodeAt(this.index)!==117)this.throwUnexpectedToken();if(++this.index,this.source[this.index]==="{")++this.index,K=this.scanUnicodeCodePointEscape();else if(K=this.scanHexEscape("u"),K===null||K==="\\"||!M.Character.isIdentifierStart(K.charCodeAt(0)))this.throwUnexpectedToken();q=K}while(!this.eof()){if(U=this.codePointAt(this.index),!M.Character.isIdentifierPart(U))break;if(K=M.Character.fromCodePoint(U),q+=K,this.index+=K.length,U===92){if(q=q.substr(0,q.length-1),this.source.charCodeAt(this.index)!==117)this.throwUnexpectedToken();if(++this.index,this.source[this.index]==="{")++this.index,K=this.scanUnicodeCodePointEscape();else if(K=this.scanHexEscape("u"),K===null||K==="\\"||!M.Character.isIdentifierPart(K.charCodeAt(0)))this.throwUnexpectedToken();q+=K}}return q},L.prototype.octalToDecimal=function(U){var q=U!=="0",K=V(U);if(!this.eof()&&M.Character.isOctalDigit(this.source.charCodeAt(this.index))){if(q=!0,K=K*8+V(this.source[this.index++]),"0123".indexOf(U)>=0&&!this.eof()&&M.Character.isOctalDigit(this.source.charCodeAt(this.index)))K=K*8+V(this.source[this.index++])}return{code:K,octal:q}},L.prototype.scanIdentifier=function(){var U,q=this.index,K=this.source.charCodeAt(q)===92?this.getComplexIdentifier():this.getIdentifier();if(K.length===1)U=3;else if(this.isKeyword(K))U=4;else if(K==="null")U=5;else if(K==="true"||K==="false")U=1;else U=3;if(U!==3&&q+K.length!==this.index){var B=this.index;this.index=q,this.tolerateUnexpectedToken(Y.Messages.InvalidEscapedReservedWord),this.index=B}return{type:U,value:K,lineNumber:this.lineNumber,lineStart:this.lineStart,start:q,end:this.index}},L.prototype.scanPunctuator=function(){var U=this.index,q=this.source[this.index];switch(q){case"(":case"{":if(q==="{")this.curlyStack.push("{");++this.index;break;case".":if(++this.index,this.source[this.index]==="."&&this.source[this.index+1]===".")this.index+=2,q="...";break;case"}":++this.index,this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:if(q=this.source.substr(this.index,4),q===">>>=")this.index+=4;else if(q=q.substr(0,3),q==="==="||q==="!=="||q===">>>"||q==="<<="||q===">>="||q==="**=")this.index+=3;else if(q=q.substr(0,2),q==="&&"||q==="||"||q==="=="||q==="!="||q==="+="||q==="-="||q==="*="||q==="/="||q==="++"||q==="--"||q==="<<"||q===">>"||q==="&="||q==="|="||q==="^="||q==="%="||q==="<="||q===">="||q==="=>"||q==="**")this.index+=2;else if(q=this.source[this.index],"<>=!+-*%&|^/".indexOf(q)>=0)++this.index}if(this.index===U)this.throwUnexpectedToken();return{type:7,value:q,lineNumber:this.lineNumber,lineStart:this.lineStart,start:U,end:this.index}},L.prototype.scanHexLiteral=function(U){var q="";while(!this.eof()){if(!M.Character.isHexDigit(this.source.charCodeAt(this.index)))break;q+=this.source[this.index++]}if(q.length===0)this.throwUnexpectedToken();if(M.Character.isIdentifierStart(this.source.charCodeAt(this.index)))this.throwUnexpectedToken();return{type:6,value:parseInt("0x"+q,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:U,end:this.index}},L.prototype.scanBinaryLiteral=function(U){var q="",K;while(!this.eof()){if(K=this.source[this.index],K!=="0"&&K!=="1")break;q+=this.source[this.index++]}if(q.length===0)this.throwUnexpectedToken();if(!this.eof()){if(K=this.source.charCodeAt(this.index),M.Character.isIdentifierStart(K)||M.Character.isDecimalDigit(K))this.throwUnexpectedToken()}return{type:6,value:parseInt(q,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:U,end:this.index}},L.prototype.scanOctalLiteral=function(U,q){var K="",B=!1;if(M.Character.isOctalDigit(U.charCodeAt(0)))B=!0,K="0"+this.source[this.index++];else++this.index;while(!this.eof()){if(!M.Character.isOctalDigit(this.source.charCodeAt(this.index)))break;K+=this.source[this.index++]}if(!B&&K.length===0)this.throwUnexpectedToken();if(M.Character.isIdentifierStart(this.source.charCodeAt(this.index))||M.Character.isDecimalDigit(this.source.charCodeAt(this.index)))this.throwUnexpectedToken();return{type:6,value:parseInt(K,8),octal:B,lineNumber:this.lineNumber,lineStart:this.lineStart,start:q,end:this.index}},L.prototype.isImplicitOctalLiteral=function(){for(var U=this.index+1;U<this.length;++U){var q=this.source[U];if(q==="8"||q==="9")return!1;if(!M.Character.isOctalDigit(q.charCodeAt(0)))return!0}return!0},L.prototype.scanNumericLiteral=function(){var U=this.index,q=this.source[U];z.assert(M.Character.isDecimalDigit(q.charCodeAt(0))||q===".","Numeric literal must start with a decimal digit or a decimal point");var K="";if(q!=="."){if(K=this.source[this.index++],q=this.source[this.index],K==="0"){if(q==="x"||q==="X")return++this.index,this.scanHexLiteral(U);if(q==="b"||q==="B")return++this.index,this.scanBinaryLiteral(U);if(q==="o"||q==="O")return this.scanOctalLiteral(q,U);if(q&&M.Character.isOctalDigit(q.charCodeAt(0))){if(this.isImplicitOctalLiteral())return this.scanOctalLiteral(q,U)}}while(M.Character.isDecimalDigit(this.source.charCodeAt(this.index)))K+=this.source[this.index++];q=this.source[this.index]}if(q==="."){K+=this.source[this.index++];while(M.Character.isDecimalDigit(this.source.charCodeAt(this.index)))K+=this.source[this.index++];q=this.source[this.index]}if(q==="e"||q==="E"){if(K+=this.source[this.index++],q=this.source[this.index],q==="+"||q==="-")K+=this.source[this.index++];if(M.Character.isDecimalDigit(this.source.charCodeAt(this.index)))while(M.Character.isDecimalDigit(this.source.charCodeAt(this.index)))K+=this.source[this.index++];else this.throwUnexpectedToken()}if(M.Character.isIdentifierStart(this.source.charCodeAt(this.index)))this.throwUnexpectedToken();return{type:6,value:parseFloat(K),lineNumber:this.lineNumber,lineStart:this.lineStart,start:U,end:this.index}},L.prototype.scanStringLiteral=function(){var U=this.index,q=this.source[U];z.assert(q==="'"||q==='"',"String literal must starts with a quote"),++this.index;var K=!1,B="";while(!this.eof()){var Q=this.source[this.index++];if(Q===q){q="";break}else if(Q==="\\")if(Q=this.source[this.index++],!Q||!M.Character.isLineTerminator(Q.charCodeAt(0)))switch(Q){case"u":if(this.source[this.index]==="{")++this.index,B+=this.scanUnicodeCodePointEscape();else{var Z=this.scanHexEscape(Q);if(Z===null)this.throwUnexpectedToken();B+=Z}break;case"x":var J=this.scanHexEscape(Q);if(J===null)this.throwUnexpectedToken(Y.Messages.InvalidHexEscapeSequence);B+=J;break;case"n":B+=`
3
3
  `;break;case"r":B+="\r";break;case"t":B+="\t";break;case"b":B+="\b";break;case"f":B+="\f";break;case"v":B+="\v";break;case"8":case"9":B+=Q,this.tolerateUnexpectedToken();break;default:if(Q&&M.Character.isOctalDigit(Q.charCodeAt(0))){var D=this.octalToDecimal(Q);K=D.octal||K,B+=String.fromCharCode(D.code)}else B+=Q;break}else{if(++this.lineNumber,Q==="\r"&&this.source[this.index]===`
4
4
  `)++this.index;this.lineStart=this.index}else if(M.Character.isLineTerminator(Q.charCodeAt(0)))break;else B+=Q}if(q!=="")this.index=U,this.throwUnexpectedToken();return{type:8,value:B,octal:K,lineNumber:this.lineNumber,lineStart:this.lineStart,start:U,end:this.index}},L.prototype.scanTemplate=function(){var U="",q=!1,K=this.index,B=this.source[K]==="`",Q=!1,Z=2;++this.index;while(!this.eof()){var J=this.source[this.index++];if(J==="`"){Z=1,Q=!0,q=!0;break}else if(J==="$"){if(this.source[this.index]==="{"){this.curlyStack.push("${"),++this.index,q=!0;break}U+=J}else if(J==="\\")if(J=this.source[this.index++],!M.Character.isLineTerminator(J.charCodeAt(0)))switch(J){case"n":U+=`
@@ -0,0 +1 @@
1
+ import{z as q}from"zod/v4";import{z as X}from"zod/v4";var v_=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,V=X.string().min(1).regex(v_,"must be a valid ISO 8601 datetime"),M=X.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/,"must be a valid ISO 8601 date (YYYY-MM-DD)"),_=X.string().trim().min(1),L=X.enum(["Reading","Language","Vocabulary","Social Studies","Writing","Science","FastMath","Math","None","Other"]).meta({id:"TimebackSubject",description:"Subject area"}),G=X.union([X.literal(-1),X.literal(0),X.literal(1),X.literal(2),X.literal(3),X.literal(4),X.literal(5),X.literal(6),X.literal(7),X.literal(8),X.literal(9),X.literal(10),X.literal(11),X.literal(12),X.literal(13)]).meta({id:"TimebackGrade",description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}),N=X.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),E=X.enum(["department","school","district","local","state","national"]),f=X.enum(["administrator","aide","guardian","parent","proctor","relative","student","teacher"]),o=X.enum(["administrator","proctor","student","teacher"]),g=X.enum(["qti","text","audio","video","interactive","visual","course-material","assessment-bank"]),m=X.enum(["qti-test","qti-question","qti-stimulus","qti-test-bank"]),S=X.enum(["unit","course","resource-collection"]),a=X.enum(["choice","order","associate","match","hotspot","hottext","select-point","graphic-order","graphic-associate","graphic-gap-match","text-entry","extended-text","inline-choice","upload","slider","drawing","media","custom"]),r=X.enum(["easy","medium","hard"]),i=X.array(X.object({source:X.string(),learningObjectiveIds:X.array(X.string())})),e=X.object({consecutive_failures:X.number().int().min(1).optional(),stagnation_limit:X.number().int().min(1).optional()}).optional(),pZ=X.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]).nullable(),yZ=X.object({imsx_codeMajor:X.enum(["failure","success"]),imsx_severity:X.enum(["error","warning","status"]),imsx_description:X.string(),imsx_CodeMinor:X.object({imsx_codeMinorField:X.array(X.object({imsx_codeMinorFieldName:X.string(),imsx_codeMinorFieldValue:X.string()}))}).optional()});var f_=q.object({staging:q.string().meta({description:"Course ID in staging environment"}).optional(),production:q.string().meta({description:"Course ID in production environment"}).optional()}).meta({id:"CourseIds",description:"Environment-specific course IDs (populated by sync)"}),D_=q.enum(["base","hole-filling","optional"]).meta({id:"CourseType",description:"Course classification type"}),u_=q.enum(["draft","testing","published","deactivated"]).meta({id:"PublishStatus",description:"Course publication status"}),T_=q.object({dailyXp:q.number().int().positive().meta({description:"Target XP to earn per day"}).optional(),dailyLessons:q.number().int().positive().meta({description:"Target lessons to complete per day"}).optional(),dailyActiveMinutes:q.number().int().positive().meta({description:"Target active learning minutes per day"}).optional(),dailyAccuracy:q.number().int().min(0).max(100).meta({description:"Target accuracy percentage (0-100)"}).optional(),dailyMasteredUnits:q.number().int().positive().meta({description:"Target units to master per day"}).optional()}).meta({id:"CourseGoals",description:"Daily learning goals for a course"}),C_=q.object({totalXp:q.number().int().positive().meta({description:"Total XP available in the course"}).optional(),totalLessons:q.number().int().positive().meta({description:"Total number of lessons/activities"}).optional(),totalGrades:q.number().int().positive().meta({description:"Total grade levels covered"}).optional()}).meta({id:"CourseMetrics",description:"Aggregate metrics for a course"}),z=q.object({courseType:D_.optional(),isSupplemental:q.boolean().meta({description:"Whether this is supplemental to a base course"}).optional(),isCustom:q.boolean().meta({description:"Whether this is a custom course for an individual student"}).optional(),publishStatus:u_.optional(),contactEmail:q.email().meta({description:"Contact email for course issues"}).optional(),primaryApp:q.string().meta({description:"Primary application identifier"}).optional(),goals:T_.optional(),metrics:C_.optional()}).meta({id:"CourseMetadata",description:"Course metadata (matches API metadata object)"}),t=q.object({courseCode:q.string().meta({description:"Course code (e.g., 'MATH101')"}).optional(),level:q.string().meta({description:"Course level (e.g., 'AP', 'Honors')"}).optional(),metadata:z.optional()}).meta({id:"CourseDefaults",description:"Default properties that apply to all courses unless overridden"}),n=q.object({level:q.string().meta({description:"Course level for this environment"}).optional(),sensor:q.url().meta({description:"Caliper sensor endpoint URL for this environment"}).optional(),launchUrl:q.url().meta({description:"LTI launch URL for this environment"}).optional(),metadata:z.optional()}).meta({id:"CourseEnvOverrides",description:"Environment-specific course overrides (non-identity fields)"}),d_=q.object({staging:n.meta({description:"Overrides for staging environment"}).optional(),production:n.meta({description:"Overrides for production environment"}).optional()}).meta({id:"CourseOverrides",description:"Per-environment course overrides"}),R_=t.extend({subject:L.meta({description:"Subject area for this course"}),grade:G.meta({description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}).optional(),ids:f_.nullable().optional(),sensor:q.url().meta({description:"Caliper sensor endpoint URL for this course"}).optional(),launchUrl:q.url().meta({description:"LTI launch URL for this course"}).optional(),overrides:d_.optional()}).meta({id:"CourseConfig",description:"Configuration for a single course. Must have either grade or courseCode (or both)."}),gZ=q.object({$schema:q.string().meta({description:"JSON Schema reference for editor support"}).optional(),name:q.string().min(1,"App name is required").meta({description:"Display name for your app"}),defaults:t.meta({description:"Default properties applied to all courses"}).optional(),courses:q.array(R_).min(1,"At least one course is required").meta({description:"Courses available in this app"}),sensor:q.url().meta({description:"Default Caliper sensor endpoint URL for all courses"}).optional(),launchUrl:q.url().meta({description:"Default LTI launch URL for all courses"}).optional(),studio:q.object({telemetry:q.boolean().meta({description:"Enable anonymous usage telemetry for Studio (default: true)"}).optional().default(!0)}).meta({description:"Studio-specific configuration"}).optional()}).meta({id:"TimebackConfig",title:"Timeback Config",description:"Configuration schema for timeback.config.json files"}).refine((J)=>{return J.courses.every((W)=>W.grade!==void 0||W.courseCode!==void 0)},{message:"Each course must have either a grade or a courseCode",path:["courses"]}).refine((J)=>{let F=J.courses.filter((A)=>A.grade!==void 0).map((A)=>`${A.subject}:${A.grade}`);return new Set(F).size===F.length},{message:"Duplicate (subject, grade) pair found; each must be unique",path:["courses"]}).refine((J)=>{let F=J.courses.filter((A)=>A.courseCode!==void 0).map((A)=>A.courseCode);return new Set(F).size===F.length},{message:"Duplicate courseCode found; each must be unique",path:["courses"]}).refine((J)=>{return J.courses.every((W)=>{if(W.sensor!==void 0||J.sensor!==void 0)return!0;return[W.launchUrl,J.launchUrl,W.overrides?.staging?.launchUrl,W.overrides?.production?.launchUrl].filter(Boolean).length>0})},{message:"Each course must have an effective sensor. Either set `sensor` explicitly (top-level or per-course), or provide a `launchUrl` so sensor can be derived from its origin.",path:["courses"]});import{z as Z}from"zod/v4";var l_=Z.union([Z.url(),Z.string().regex(/^urn:/,"Must be a URL or URN")]),I=Z.object({id:Z.url(),type:Z.literal("TimebackUser"),email:Z.string()}),C=Z.object({id:Z.url(),type:Z.literal("TimebackActivityContext"),subject:L,app:Z.object({name:Z.string()}),activity:Z.object({id:Z.url().optional(),name:Z.string()}).strict().optional(),course:Z.object({id:Z.url().optional(),name:Z.string().optional()}).strict(),process:Z.boolean().optional()}),__=Z.object({"@context":Z.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),id:Z.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Z.string(),eventTime:V,profile:Z.literal("TimebackProfile"),actor:I,action:Z.string(),object:C,edApp:Z.object({id:Z.string(),name:Z.string().optional()}).optional()}),Z_=Z.object({type:Z.enum(["totalQuestions","correctQuestions","xpEarned","masteredUnits"]),value:Z.number()}),c_=Z.object({id:Z.url(),type:Z.literal("TimebackActivityMetricsCollection"),attempt:Z.number().optional(),items:Z.array(Z_),extensions:Z.record(Z.string(),Z.unknown()).optional()}),p_=__.extend({type:Z.literal("ActivityEvent"),action:Z.literal("Completed"),generated:c_}),x_=Z.object({type:Z.enum(["active","inactive","waste","unknown","anti-pattern"]),value:Z.number(),subType:Z.string().optional()}),y_=Z.object({id:Z.url(),type:Z.literal("TimebackTimeSpentMetricsCollection"),items:Z.array(x_)}),N_=__.extend({type:Z.literal("TimeSpentEvent"),action:Z.literal("SpentTime"),generated:y_}),rZ=Z.object({actor:I,object:C,metrics:Z.array(Z_).min(1,"metrics must contain at least one metric"),eventTime:V.optional(),metricsId:Z.string().optional(),id:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional(),edApp:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),session:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),attempt:Z.number().int().min(1).optional(),generatedExtensions:Z.object({pctCompleteApp:Z.number().optional()}).loose().optional()}).strict(),iZ=Z.object({actor:I,object:C,metrics:Z.array(x_).min(1,"metrics must contain at least one metric"),eventTime:V.optional(),metricsId:Z.string().optional(),id:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional(),edApp:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),session:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional()}).strict(),E_=Z.union([p_,N_]),eZ=Z.object({sensor:Z.string(),sendTime:V,dataVersion:Z.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Z.array(E_)}),o_=Z.enum(["AnnotationProfile","AssessmentProfile","ToolUseProfile","GeneralProfile","FeedbackProfile","MediaProfile","SurveyProfile","ResourceManagementProfile","ForumProfile","AssignableProfile","GradingProfile","ReadingProfile","SessionProfile","SearchProfile","ToolLaunchProfile","TimebackProfile"]),B=Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]),D=Z.object({id:l_,type:Z.string(),name:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),H_=Z.object({"@context":Z.string().optional(),id:Z.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Z.string(),actor:Z.union([Z.string(),D,I]),action:Z.string(),object:B,eventTime:V,profile:o_,edApp:B.optional(),generated:B.optional(),target:B.optional(),referrer:B.optional(),group:B.optional(),membership:B.optional(),session:B.optional(),federatedSession:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),nZ=Z.object({sensor:_,sendTime:V,dataVersion:Z.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Z.array(H_).min(1,"data must contain at least one event")}),zZ=Z.object({sensor:_,events:Z.array(H_).min(1,"events must contain at least one event")}),tZ=Z.object({limit:Z.number().int().positive().optional(),offset:Z.number().int().min(0).optional(),sensor:_.optional(),startDate:V.optional(),endDate:V.optional(),actorId:_.optional(),actorEmail:Z.email().optional()}).strict(),K_=Z.object({id:Z.string(),name:Z.string().optional(),isPartOf:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}),g_=Z.object({id:Z.string(),attempt:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),startedAtTime:V.optional(),endedAtTime:V.optional(),duration:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}),m_=Z.object({id:Z.string().optional(),scoreGiven:Z.number(),maxScore:Z.number().optional(),attempt:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),comment:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}),_x=Z.object({actor:Z.union([Z.string(),D,I]),object:K_,edApp:B,id:Z.string().optional(),eventTime:V.optional(),session:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),Zx=Z.object({actor:Z.union([Z.string(),D,I]),object:K_,edApp:B,generated:g_.optional(),id:Z.string().optional(),eventTime:V.optional(),session:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),xx=Z.object({actor:Z.union([Z.string(),D,I]),object:Z.string(),generated:m_,edApp:B,id:Z.string().optional(),eventTime:V.optional(),session:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict();import{z as U}from"zod/v4";var $x=U.object({name:_,targetUrl:U.url("targetUrl must be a valid URL"),secret:_,active:U.boolean(),sensor:U.string().nullable().optional(),description:U.string().nullable().optional()}).strict();var S_=U.enum(["string","number","boolean"]),a_=U.enum(["eq","neq","gt","gte","lt","lte","contains","notContains","in","notIn","startsWith","endsWith","regexp"]),jx=U.object({webhookId:_,filterKey:_,filterValue:_,filterType:S_,filterOperator:a_,active:U.boolean()}).strict();import{z as j}from"zod/v4";var u=j.string().uuid(),Y_=j.object({title:_,identifier:u,uri:_}),r_=j.object({identifier:u,uri:_,lastChangeDateTime:_,title:_,creator:_,officialSourceURL:j.string().optional(),publisher:j.string().optional(),description:j.string().optional(),language:j.string().optional(),version:j.string().optional(),caseVersion:j.string().optional(),adoptionStatus:j.string().optional(),statusStartDate:j.string().optional(),statusEndDate:j.string().optional(),licenseUri:j.string().optional(),notes:j.string().optional(),subject:j.array(j.string()).optional(),extensions:j.unknown().optional()}),i_=j.object({identifier:u,uri:_,lastChangeDateTime:_,fullStatement:_,alternativeLabel:j.string().optional(),CFItemType:j.string().optional(),cfItemType:j.string().optional(),humanCodingScheme:j.string().optional(),listEnumeration:j.string().optional(),abbreviatedStatement:j.string().optional(),conceptKeywords:j.array(j.string()).optional(),notes:j.string().optional(),subject:j.array(j.string()).optional(),language:j.string().optional(),educationLevel:j.array(j.string()).optional(),CFItemTypeURI:j.unknown().optional(),licenseURI:j.unknown().optional(),statusStartDate:j.string().optional(),statusEndDate:j.string().optional(),extensions:j.unknown().optional()}),e_=j.object({identifier:u,uri:_,lastChangeDateTime:_,associationType:_,originNodeURI:Y_,destinationNodeURI:Y_,sequenceNumber:j.number().optional(),extensions:j.unknown().optional()}),n_=j.object({CFItemTypes:j.array(j.unknown()).optional(),CFSubjects:j.array(j.unknown()).optional(),CFConcepts:j.array(j.unknown()).optional(),CFLicenses:j.array(j.unknown()).optional(),CFAssociationGroupings:j.array(j.unknown()).optional(),extensions:j.unknown().optional()}),wx=j.object({CFDocument:r_,CFItems:j.array(i_),CFAssociations:j.array(e_),CFDefinitions:n_.optional(),extensions:j.unknown().optional()});import{z as $}from"zod/v4";var $_="https://www.w3.org/ns/credentials/v2",z_=$.array($.url()).min(3,"@context must include W3C, CLR, and OB context URLs").refine((J)=>J[0]===$_,`First @context entry must be "${$_}"`),j_=$.object({id:$.url(),type:$.literal("Image"),caption:$.string().optional()}),d=$.object({id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("Profile"),'type must include "Profile"'),name:$.string().optional(),url:$.string().url().optional(),phone:$.string().optional(),description:$.string().optional(),image:j_.optional(),email:$.string().email().optional()}),J_=$.object({type:_,proofPurpose:_,verificationMethod:_,created:$.iso.datetime(),proofValue:_,cryptosuite:$.string().optional()}),t_=$.object({id:_,type:$.literal("1EdTechJsonSchemaValidator2019")}),_Z=$.object({id:$.string().url().optional(),narrative:$.string().optional()}),ZZ=$.object({id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("Achievement"),'type must include "Achievement"'),name:_,description:_,criteria:_Z,image:j_.optional(),achievementType:$.string().optional(),creator:d.optional()}),xZ=$.object({type:$.literal("IdentityObject"),identityHash:_,identityType:_,hashed:$.boolean(),salt:$.string().optional()}),HZ=$.enum(["exactMatchOf","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy"]),KZ=$.object({type:$.literal("Association"),associationType:HZ,sourceId:$.url(),targetId:$.url()}),YZ=$.object({"@context":$.array($.string()).min(1),id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("VerifiableCredential"),'type must include "VerifiableCredential"'),issuer:d,validFrom:$.iso.datetime(),validUntil:$.string().datetime().optional(),credentialSubject:$.object({id:$.string().optional()}),proof:$.array(J_).optional()}),$Z=$.object({id:$.string().url().optional(),type:$.array($.string()).min(1).refine((J)=>J.includes("ClrSubject"),'type must include "ClrSubject"'),identifier:$.array(xZ).optional(),achievement:$.array(ZZ).optional(),verifiableCredential:$.array(YZ).min(1),association:$.array(KZ).optional()}),kx=$.object({"@context":z_,id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("VerifiableCredential")&&J.includes("ClrCredential"),'type must include "VerifiableCredential" and "ClrCredential"'),issuer:d,name:_,description:$.string().optional(),validFrom:$.iso.datetime(),validUntil:$.iso.datetime().optional(),credentialSubject:$Z,proof:$.array(J_).optional(),credentialSchema:$.array(t_).optional()});import{z as Y}from"zod/v4";var O=Y.union([V,M]),Ax=Y.object({id:Y.string(),role:Y.string(),beginDate:O.nullable(),endDate:O.nullable(),metadata:Y.object({goals:Y.object({dailyXp:Y.number().optional()}).optional(),metrics:Y.object({totalXp:Y.number().optional(),totalLessons:Y.number().optional()}).optional()}).optional(),course:Y.object({id:Y.string(),title:Y.string(),subjects:Y.array(Y.string()).nullable(),grades:Y.array(Y.string()).nullable()}),school:Y.object({id:Y.string(),name:Y.string()}),testOutSupported:Y.boolean(),testOutEligible:Y.boolean()}),jZ=Y.object({activityMetrics:Y.object({xpEarned:Y.number(),totalQuestions:Y.number(),correctQuestions:Y.number(),masteredUnits:Y.number()}),timeSpentMetrics:Y.object({activeSeconds:Y.number(),inactiveSeconds:Y.number(),wasteSeconds:Y.number()}),apps:Y.array(Y.string())}),JZ=Y.record(Y.string(),Y.record(Y.string(),jZ)),Lx=Y.object({message:Y.string(),enrollmentId:Y.string(),startDate:O,endDate:O,facts:JZ,factsByApp:Y.unknown()}),X_=Y.object({email:Y.email().optional(),studentId:_.optional()}).superRefine((J,W)=>{if(!J.email&&!J.studentId)W.addIssue({code:Y.ZodIssueCode.custom,message:"must provide either email or studentId",path:["email"]}),W.addIssue({code:Y.ZodIssueCode.custom,message:"must provide either email or studentId",path:["studentId"]})}),Fx=Y.object({subject:_,grade:_,courseId:_,orgSourcedId:_.optional()});var Ux=Y.object({userId:_}),Ox=Y.object({sourcedId:_.optional(),role:o.optional(),beginDate:V.optional(),metadata:Y.record(Y.string(),Y.unknown()).optional()}),Mx=Y.object({fields:Y.string().optional(),limit:Y.number().int().positive().optional(),offset:Y.number().int().nonnegative().optional(),sort:Y.string().optional(),orderBy:Y.enum(["asc","desc"]).optional(),filter:Y.string().optional(),search:Y.string().optional(),roles:Y.array(f).min(1),orgSourcedIds:Y.array(_).optional()}),sx=X_.extend({startDate:O,endDate:O,timezone:Y.string().optional()}),bx=X_.extend({weekDate:O,timezone:Y.string().optional()}),Ix=Y.object({enrollmentId:_,startDate:O.optional(),endDate:O.optional(),timezone:Y.string().optional()});import{z as k}from"zod/v4";var Dx=k.object({email:k.email()}),ux=k.object({name:_.optional(),timeback_id:_.optional(),grade:_.optional(),subject:_.optional(),all:k.boolean().optional()}),Tx=k.object({student_email:k.email(),timeback_id:_.optional(),subject:_.optional(),grade_rank:k.number().int().min(0).max(12).optional(),assessment_line_item_sourced_id:_.optional(),assessment_result_sourced_id:_.optional()}).superRefine((J,W)=>{let F=!!J.timeback_id,A=!!J.subject,T=J.grade_rank!==void 0;if(!F&&!A)W.addIssue({code:k.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["timeback_id"]}),W.addIssue({code:k.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["subject"]});if(T&&!A)W.addIssue({code:k.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]});let y=!!J.assessment_line_item_sourced_id,h_=!!J.assessment_result_sourced_id;if(y!==h_)W.addIssue({code:k.ZodIssueCode.custom,message:"assessment_line_item_sourced_id and assessment_result_sourced_id must be provided together",path:y?["assessment_result_sourced_id"]:["assessment_line_item_sourced_id"]})}),Cx=k.object({student_email:k.email(),assignment_id:k.number().int().positive().optional(),timeback_id:_.optional(),subject:_.optional(),grade_rank:k.number().int().min(0).max(12).optional()}).superRefine((J,W)=>{let F=J.assignment_id!==void 0,A=!!J.timeback_id,T=!!J.subject&&J.grade_rank!==void 0;if(!F&&!A&&!T)W.addIssue({code:k.ZodIssueCode.custom,message:"Either assignment_id, timeback_id, or (subject and grade_rank) is required",path:["assignment_id"]});if(J.grade_rank!==void 0&&!J.subject)W.addIssue({code:k.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]})});import{z as H}from"zod/v4";var P=H.enum(["active","tobedeleted"]),Q=H.record(H.string(),H.unknown()).nullable().optional(),w=H.object({sourcedId:_,type:H.string().optional(),href:H.string().optional()}).strict(),s=H.union([M,V]).transform((J)=>J.includes("T")?J:`${J}T00:00:00Z`),XZ=H.object({roleType:H.enum(["primary","secondary"]),role:f,org:w,userProfile:H.string().optional(),metadata:Q,beginDate:s.optional(),endDate:s.optional()}).strict(),cx=H.object({sourcedId:_.describe("sourcedId must be a non-empty string"),status:P.optional(),enabledUser:H.boolean(),givenName:_.describe("givenName must be a non-empty string"),familyName:_.describe("familyName must be a non-empty string"),middleName:_.optional(),username:_.optional(),email:H.email(),roles:H.array(XZ).min(1,"roles must include at least one role"),userIds:H.array(H.object({type:_,identifier:_}).strict()).optional(),agents:H.array(w).optional(),grades:H.array(G).optional(),identifier:_.optional(),sms:_.optional(),phone:_.optional(),pronouns:_.optional(),password:_.optional(),metadata:Q}).strict(),px=H.object({sourcedId:_.describe("sourcedId must be a non-empty string").optional(),status:P.optional(),title:_.describe("title must be a non-empty string"),org:w,courseCode:_.optional(),subjects:H.array(L).optional(),grades:H.array(G).optional(),level:_.optional(),metadata:Q}).strict(),yx=H.object({sourcedId:_.describe("sourcedId must be a non-empty string").optional(),status:P.optional(),title:_.describe("title must be a non-empty string"),terms:H.array(w).min(1,"terms must have at least one item"),course:w,org:w,classCode:_.optional(),classType:H.enum(["homeroom","scheduled"]).optional(),location:_.optional(),grades:H.array(G).optional(),subjects:H.array(L).optional(),subjectCodes:H.array(_).optional(),periods:H.array(_).optional(),metadata:Q}).strict(),q_=H.enum(["true","false"]),Nx=H.object({sourcedId:_.describe("sourcedId must be a non-empty string").optional(),status:P.optional(),user:w,class:w,school:w.optional(),role:H.enum(["administrator","proctor","student","teacher"]),primary:q_.optional(),beginDate:M.optional(),endDate:M.optional(),metadata:Q}).strict(),Ex=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),status:P,weight:H.number().nullable().optional(),metadata:Q}).strict(),ox=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),class:w,school:w,category:w,assignDate:s,dueDate:s,status:P,description:H.string().optional(),resultValueMin:H.number().nullable().optional(),resultValueMax:H.number().nullable().optional(),scoreScale:w.optional(),metadata:Q}).strict(),gx=H.object({sourcedId:_.optional(),lineItem:w,student:w,class:w.optional(),scoreDate:s,scoreStatus:H.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),score:H.number().nullable().optional(),textScore:H.string().nullable().optional(),status:P,comment:H.string().nullable().optional(),metadata:Q}).strict(),mx=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),status:P.optional(),type:H.string(),class:w,course:w.nullable().optional(),scoreScaleValue:H.array(H.object({itemValueLHS:_,itemValueRHS:_,value:H.string().optional(),description:H.string().optional()}).strict()),minScore:H.number().optional(),maxScore:H.number().optional(),metadata:Q}).strict(),Sx=H.object({sourcedId:_.optional(),status:P.optional(),dateLastModified:V.optional(),title:_.describe("title must be a non-empty string"),description:H.string().nullable().optional(),class:w.nullable().optional(),parentAssessmentLineItem:w.nullable().optional(),scoreScale:w.nullable().optional(),resultValueMin:H.number().nullable().optional(),resultValueMax:H.number().nullable().optional(),component:w.nullable().optional(),componentResource:w.nullable().optional(),learningObjectiveSet:H.array(H.object({source:H.string(),learningObjectiveIds:H.array(H.string())})).optional().nullable(),course:w.nullable().optional(),metadata:Q}).strict(),qZ=H.object({learningObjectiveId:H.string(),score:H.number().optional(),textScore:H.string().optional()}),wZ=H.array(H.object({source:H.string(),learningObjectiveResults:H.array(qZ)})),ax=H.object({sourcedId:_.optional(),status:P.optional(),dateLastModified:V.optional(),metadata:Q,assessmentLineItem:w,student:w,score:H.number().nullable().optional(),textScore:H.string().nullable().optional(),scoreDate:s,scoreScale:w.nullable().optional(),scorePercentile:H.number().nullable().optional(),scoreStatus:H.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),comment:H.string().nullable().optional(),learningObjectiveSet:wZ.nullable().optional(),inProgress:H.string().nullable().optional(),incomplete:H.string().nullable().optional(),late:H.string().nullable().optional(),missing:H.string().nullable().optional()}).strict(),rx=H.object({sourcedId:_.optional(),status:P.optional(),name:_.describe("name must be a non-empty string"),type:E,identifier:_.optional(),parent:w.optional(),metadata:Q}).strict(),ix=H.object({sourcedId:_.optional(),status:P.optional(),name:_.describe("name must be a non-empty string"),type:H.literal("school").optional(),identifier:_.optional(),parent:w.optional(),metadata:Q}).strict(),ex=H.object({sourcedId:_.describe("sourcedId must be a non-empty string"),status:P,title:_.describe("title must be a non-empty string"),startDate:s,endDate:s,type:H.enum(["gradingPeriod","semester","schoolYear","term"]),schoolYear:_.describe("schoolYear must be a non-empty string"),org:w,parent:w.optional(),children:H.array(w).optional(),metadata:Q}).strict(),nx=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),courseComponent:w,resource:w,status:P,metadata:Q}).strict(),zx=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),course:w,status:P,metadata:Q}).strict(),tx=H.object({sourcedId:_.describe("sourcedId must be a non-empty string"),role:H.enum(["student","teacher"]),primary:q_.optional(),beginDate:M.optional(),endDate:M.optional(),metadata:Q}).strict(),_2=H.object({agentSourcedId:_.describe("agentSourcedId must be a non-empty string")}).strict(),Z2=H.object({applicationName:_.describe("applicationName must be a non-empty string"),credentials:H.object({username:_.describe("username must be a non-empty string"),password:_.describe("password must be a non-empty string")})}).strict(),x2=H.object({sourcedId:_.describe("sourcedId must be a non-empty string")}).loose(),b=H.object({type:g,subject:L.nullish(),grades:H.array(G).nullish(),language:H.string().nullish(),xp:H.number().nullish(),url:H.url().nullish(),keywords:H.array(H.string()).nullish(),learningObjectiveSet:i.nullish(),lessonType:H.string().nullish()}).passthrough(),VZ=b.extend({type:H.literal("qti"),subType:m,questionType:a.optional(),difficulty:r.optional()}),WZ=b.extend({type:H.literal("text"),format:H.string(),author:H.string().optional(),pageCount:H.number().optional()}),QZ=b.extend({type:H.literal("audio"),duration:H.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),format:H.string(),speaker:H.string().optional()}),kZ=b.extend({type:H.literal("video"),duration:H.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),captionsAvailable:H.boolean().optional(),format:H.string()}),PZ=b.extend({type:H.literal("interactive"),launchUrl:H.url().optional(),toolProvider:H.string().optional(),instructionalMethod:H.string().optional(),courseIdOnFail:H.string().nullable().optional(),fail_fast:e}),BZ=b.extend({type:H.literal("visual"),format:H.string(),resolution:H.string().optional()}),GZ=b.extend({type:H.literal("course-material"),subType:S,author:H.string().optional(),format:H.string(),instructionalMethod:H.string().optional()}),AZ=b.extend({type:H.literal("assessment-bank"),resources:H.array(H.string())}),LZ=H.discriminatedUnion("type",[VZ,WZ,QZ,kZ,PZ,BZ,GZ,AZ]),H2=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),vendorResourceId:_.describe("vendorResourceId must be a non-empty string"),roles:H.array(H.enum(["primary","secondary"])).optional(),importance:H.enum(["primary","secondary"]).optional(),vendorId:H.string().optional(),applicationId:H.string().optional(),status:P.optional(),metadata:LZ.nullable().optional()}).strict(),FZ=H.object({url:_.describe("courseStructure.url must be a non-empty string"),skillCode:_.describe("courseStructure.skillCode must be a non-empty string"),lessonCode:_.describe("courseStructure.lessonCode must be a non-empty string"),title:_.describe("courseStructure.title must be a non-empty string"),"unit-title":_.describe("courseStructure.unit-title must be a non-empty string"),status:_.describe("courseStructure.status must be a non-empty string"),xp:H.number()}).loose(),K2=H.object({course:H.object({sourcedId:_.describe("course.sourcedId must be a non-empty string").optional(),title:_.describe("course.title must be a non-empty string"),org:w,status:P,metadata:Q}).strict(),courseStructure:H.record(H.string(),FZ)}).strict(),UZ=H.object({student:w}).loose(),Y2=H.array(UZ).min(1,"results must have at least one item");import{z as K}from"zod/v4";var OZ=K.enum(["edulastic","mastery-track"]),MZ=K.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]),V_=K.array(G),W_=K.record(K.string(),K.unknown()).optional(),Q_=K.object({courseId:_,lessonTitle:_.optional(),launchUrl:_.optional(),toolProvider:OZ,unitTitle:_.optional(),courseComponentSourcedId:_.optional(),vendorId:_.optional(),description:_.optional(),resourceMetadata:W_.nullable().optional(),grades:V_}),X2=Q_.extend({lessonType:K.literal("test-out"),xp:K.number()}),q2=Q_.extend({lessonType:K.literal("placement"),courseIdOnFail:_.nullable().optional(),xp:K.number().optional()});var w_=K.object({courseId:_,lessonType:MZ,lessonTitle:_.optional(),unitTitle:_.optional(),courseComponentSourcedId:_.optional(),resourceMetadata:W_.nullable().optional(),xp:K.number().optional(),grades:V_.optional(),courseIdOnFail:_.nullable().optional()}),w2=K.discriminatedUnion("testType",[w_.extend({testType:K.literal("qti"),qti:K.object({url:K.url(),title:_.optional(),metadata:K.record(K.string(),K.unknown()).optional()})}),w_.extend({testType:K.literal("assessment-bank"),assessmentBank:K.object({resources:K.array(K.object({url:K.url(),title:_.optional(),metadata:K.record(K.string(),K.unknown()).optional()})).min(1)})})]),V2=K.object({student:_,lesson:_}),W2=K.object({student:_,lesson:_}),Q2=K.object({courseId:_,userId:_,classId:_.optional()}),h=K.object({type:K.enum(["component","resource"]),id:_}),sZ=K.union([K.object({type:K.literal("set-skipped"),payload:K.object({target:h,value:K.boolean()})}),K.object({type:K.literal("add-custom-resource"),payload:K.object({resource_id:_,parent_component_id:_,skipped:K.boolean().optional()})}),K.object({type:K.literal("move-item-before"),payload:K.object({target:h,reference_id:_})}),K.object({type:K.literal("move-item-after"),payload:K.object({target:h,reference_id:_})}),K.object({type:K.literal("move-item-to-start"),payload:K.object({target:h})}),K.object({type:K.literal("move-item-to-end"),payload:K.object({target:h})}),K.object({type:K.literal("change-item-parent"),payload:K.object({target:h,new_parent_id:_,position:K.enum(["start","end"]).optional()})})]),k2=K.object({operation:sZ,reason:_.optional()}),P2=K.object({studentId:_,componentResourceId:_,result:K.object({status:K.enum(["active","tobedeleted"]),metadata:K.record(K.string(),K.unknown()).optional(),score:K.number().optional(),textScore:_.optional(),scoreDate:K.string().datetime(),scorePercentile:K.number().optional(),scoreStatus:N,comment:_.optional(),learningObjectiveSet:K.array(K.object({source:_,learningObjectiveResults:K.array(K.object({learningObjectiveId:_,score:K.number().optional(),textScore:_.optional()}))})).optional(),inProgress:_.optional(),incomplete:_.optional(),late:_.optional(),missing:_.optional()})}),B2=K.object({student:_,lesson:_,applicationName:_.optional(),testId:_.optional(),skipCourseEnrollment:K.boolean().optional()}),G2=K.object({student:_,subject:L}),A2=K.object({student:_,lesson:_}),L2=K.object({userId:_}),F2=K.object({userId:_,subject:K.enum(["Math","Reading","Language","Science"])}),U2=K.object({student:_,subject:L,grade:G,testName:_.optional()}),O2=K.object({testName:_}),bZ=K.object({student:_,subject:L,grade:G,testName:_.optional()}),M2=K.object({items:K.array(bZ)}),s2=K.object({spreadsheetUrl:K.url(),sheet:_}),b2=K.object({student:_,status:K.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:_.optional(),grade:G.optional(),limit:K.number().int().positive().max(3000).optional(),offset:K.number().int().nonnegative().optional()}),I2=K.object({student:_.optional(),status:K.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:_.optional(),grade:G.optional(),limit:K.number().int().positive().max(3000).optional(),offset:K.number().int().nonnegative().optional()}),h2=K.object({student:_,question:_,response:K.union([_,K.array(_)]).optional(),responses:K.record(K.string(),K.union([_,K.array(_)])).optional(),lesson:_,rendererOutcomes:K.object({score:K.number(),maxScore:K.number().min(0),isCorrect:K.boolean()}).optional(),playerState:K.string().optional()}).refine((J)=>J.response!==void 0||J.responses!==void 0,{message:"Either 'response' or 'responses' must be provided",path:["response","responses"]}).transform((J)=>{if(J.response!==void 0&&J.responses===void 0)return{...J,responses:{RESPONSE:J.response}};return J}),v2=K.object({student:_,lesson:_,attempt:K.number().int().positive().optional()}),f2=K.object({student:_,lesson:_}),D2=K.object({student:_,lesson:_}),u2=K.object({student:_,course:_}),T2=K.object({student:_,lesson:_,applicationName:_.optional()}),C2=K.object({student:_,subject:L}),d2=K.object({oneRosterSourcedId:_,subject:_}),R2=K.object({courseIds:K.array(_).min(1),rendererId:_,rendererUrl:K.url(),rendererVersion:_.optional(),suppressFeedback:K.boolean().optional(),suppressCorrectResponse:K.boolean().optional()}),l2=K.object({status:K.enum(["active","tobedeleted"]).optional()});import{z as x}from"zod/v4";var k_=x.enum(["choice","text-entry","extended-text","inline-choice","match","order","associate","select-point","graphic-order","graphic-associate","graphic-gap-match","hotspot","hottext","slider","drawing","media","upload"]),R=x.enum(["single","multiple","ordered","record"]),l=x.enum(["identifier","boolean","integer","float","string","point","pair","directedPair","duration","file","uri"]),IZ=x.enum(["easy","medium","hard"]),hZ=x.enum(["linear","nonlinear"]),vZ=x.enum(["individual","simultaneous"]),c=x.enum(["show","hide"]),P_=x.enum(["test","item","stimulus"]),N2=x.enum(["QUESTION","LESSON"]),fZ=x.object({value:x.array(x.string())}).strict(),B_=x.object({identifier:_,cardinality:R,baseType:l.optional(),correctResponse:fZ}).strict(),G_=x.object({identifier:_,cardinality:R,baseType:l.optional()}).strict(),A_=x.object({identifier:_,cardinality:R.optional(),baseType:l,normalMaximum:x.number().optional(),normalMinimum:x.number().optional(),defaultValue:x.object({value:x.unknown().optional()}).strict().optional()}).strict(),DZ=x.object({outcomeIdentifier:_,variableIdentifier:_}).strict(),L_=x.object({templateType:x.enum(["match_correct","map_response"]),responseDeclarationIdentifier:_,outcomeIdentifier:_,correctResponseIdentifier:_,incorrectResponseIdentifier:_,inlineFeedback:DZ.optional()}).strict(),uZ=x.object({source:_,learningObjectiveIds:x.array(x.string())}).strict(),p=x.object({subject:x.string().optional(),grade:G.optional(),difficulty:IZ.optional(),learningObjectiveSet:x.array(uZ).optional()}).loose(),F_=x.object({outcomeIdentifier:_,identifier:_,showHide:c,content:x.string(),title:x.string()}).strict(),U_=x.object({outcomeIdentifier:_,identifier:_,showHide:c,content:x.string(),class:x.array(x.string())}).strict(),O_=x.object({outcomeIdentifier:_,identifier:_,showHide:c,content:x.string(),class:x.array(x.string())}).strict(),M_=x.object({href:_,type:_}).strict(),s_=x.object({id:_,support:x.string(),content:x.string()}).strict(),E2=x.object({page:x.number().int().positive().optional(),limit:x.number().int().positive().optional(),sort:x.string().optional(),order:x.enum(["asc","desc"]).optional()}).strict(),TZ=x.object({format:x.string().pipe(x.literal("xml")),xml:_,metadata:p.optional()}).strict(),CZ=x.object({identifier:_,title:_,type:k_,qtiVersion:x.string().optional(),timeDependent:x.boolean().optional(),adaptive:x.boolean().optional(),responseDeclarations:x.array(B_).optional(),outcomeDeclarations:x.array(G_).optional(),responseProcessing:L_.optional(),metadata:p.optional(),modalFeedback:x.array(F_).optional(),feedbackInline:x.array(U_).optional(),feedbackBlock:x.array(O_).optional()}).strict(),o2=x.union([TZ,CZ]),g2=x.object({identifier:_.optional(),title:_,type:k_,qtiVersion:x.string().optional(),timeDependent:x.boolean().optional(),adaptive:x.boolean().optional(),responseDeclarations:x.array(B_).optional(),outcomeDeclarations:x.array(G_).optional(),responseProcessing:L_.optional(),metadata:p.optional(),modalFeedback:x.array(F_).optional(),feedbackInline:x.array(U_).optional(),feedbackBlock:x.array(O_).optional(),rawXml:x.string(),content:x.record(x.string(),x.unknown())}).strict(),m2=x.object({identifier:_,response:x.union([x.string(),x.array(x.string())])}).strict(),b_=x.object({identifier:_,href:_,sequence:x.number().int().positive().optional()}).strict(),dZ=x.object({identifier:_,title:_,visible:x.boolean(),required:x.boolean().optional(),fixed:x.boolean().optional(),sequence:x.number().int().positive(),"qti-assessment-item-ref":x.array(b_).optional()}).strict(),I_=x.object({identifier:_,navigationMode:x.string().pipe(hZ),submissionMode:x.string().pipe(vZ),"qti-assessment-section":x.array(dZ)}).strict(),S2=x.object({items:x.array(b_).min(1)}).strict(),a2=x.object({metadata:x.record(x.string(),x.unknown()).optional()}).strict(),r2=x.object({identifier:_,title:_,qtiVersion:x.string().optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),timeLimit:x.number().optional(),maxAttempts:x.number().optional(),toolsEnabled:x.record(x.string(),x.boolean()).optional(),metadata:x.record(x.string(),x.unknown()).optional(),"qti-test-part":x.array(I_),"qti-outcome-declaration":x.array(A_).optional()}).strict(),i2=x.object({identifier:_.optional(),title:_,qtiVersion:x.string().optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),timeLimit:x.number().optional(),maxAttempts:x.number().optional(),toolsEnabled:x.record(x.string(),x.boolean()).optional(),metadata:x.record(x.string(),x.unknown()).optional(),"qti-test-part":x.array(I_),"qti-outcome-declaration":x.array(A_).optional()}).strict(),e2=x.object({identifier:_,title:_,label:x.string().optional(),language:x.string().optional(),stylesheet:M_.optional(),content:x.string(),catalogInfo:x.array(s_).optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),metadata:x.record(x.string(),x.unknown()).optional()}).strict(),n2=x.object({identifier:_.optional(),title:_,label:x.string().optional(),language:x.string().optional(),stylesheet:M_.optional(),content:x.string(),catalogInfo:x.array(s_).optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),metadata:x.record(x.string(),x.unknown()).optional()}).strict(),z2=x.object({xml:x.string().optional(),schema:P_,entityId:x.string().optional()}).strict(),t2=x.object({xml:x.array(x.string()),schema:P_,entityIds:x.array(x.string())}).strict(),_H=x.object({questionId:x.string().optional(),userId:_,feedback:_,lessonId:_,humanApproved:x.boolean().optional()}).strict();import{z as v}from"zod/v4";var RZ=v.enum(["creator_only","same_org","all_orgs"]),lZ=v.string().uuid(),KH=v.email(),YH=v.object({sql:_}),$H=v.object({endpointName:_,sql:_,authMode:RZ,description:_.optional()}),jH=v.object({endpointId:lZ});export{_ as a,L as b,G as c,gZ as d};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import"./chunk-ae6bkfs5.js";import{a as E,b as B$,c as _$}from"./chunk-5qkmnsbm.js";import{e as P$,f as T$,g as R$,h as N$,i as I$,j as b$,k as OJ}from"./chunk-6nybr8hs.js";import{l as r0}from"./server/adapters/native.js";import{m as d,n as B2,o as _2,p as G2,q as n2,r as S2,s as _J}from"./chunk-bh0ewh45.js";import{t as GJ,u as R,v as M2,w as C$,y as A$,z as z$}from"./chunk-nw6brg34.js";import"./chunk-3pf3cpfk.js";import{G as g8,H as U$,I as E2,J as u,K as BJ,L as P,M,N as J8,Q as n0}from"./chunk-dbcsf5tk.js";import{R as L8,U as j8}from"./chunk-1s709w5e.js";import{TimebackClient as i0}from"@timeback/core";import{getServiceUrlsForEnv as M0}from"@timeback/core";class s extends Error{statusCode;response;name="ApiError";constructor($,J,Z){super($);this.statusCode=J,this.response=Z}get minorCodes(){let $=this.response;if(!$?.imsx_CodeMinor?.imsx_codeMinorField)return[];return $.imsx_CodeMinor.imsx_codeMinorField.map((J)=>({field:J.imsx_codeMinorFieldName,value:J.imsx_codeMinorFieldValue}))}get details(){return this.response?.imsx_error_details??[]}}class $9 extends s{name="UnauthorizedError";constructor($="Unauthorized",J){super($,401,J)}}class J9 extends s{name="ForbiddenError";constructor($="Forbidden",J){super($,403,J)}}class Z9 extends s{name="NotFoundError";constructor($="Not Found",J){super($,404,J)}}class K9 extends s{name="ValidationError";constructor($="Validation Error",J){super($,422,J)}}class H9 extends s{name="InputValidationError";issues;constructor($,J){let Z={imsx_codeMajor:"failure",imsx_severity:"error",imsx_description:$,imsx_error_details:J.map((K)=>({path:K.path,message:K.message}))};super($,400,Z);this.issues=J}}function R2($,J){return new H9($,J)}function DJ($){if(!($ instanceof Error))return!1;return"statusCode"in $&&"response"in $}var wJ="BEYOND_AI",X9="LEARNWITH_AI",W9=wJ,UJ={staging:"https://staging-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/token",production:"https://prod-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/token"},MJ={staging:"https://api.staging.alpha-1edtech.ai",production:"https://api.alpha-1edtech.ai"},LJ={staging:"https://caliper.staging.alpha-1edtech.ai",production:"https://caliper.alpha-1edtech.ai"},jJ={staging:"https://qti.alpha-1edtech.ai/api",production:"https://qti.alpha-1edtech.ai/api"},VJ={staging:"https://platform.dev.timeback.com/auth/1.0/token",production:"https://platform.timeback.com/auth/1.0/token"},kJ={staging:"https://platform.dev.timeback.com",production:"https://platform.timeback.com"},qJ={staging:"https://platform.dev.timeback.com",production:"https://platform.timeback.com"},CJ={staging:"https://platform.dev.timeback.com",production:"https://platform.timeback.com"},AJ={BEYOND_AI:{token:UJ,tokenScope:void 0,api:MJ,caliper:LJ,qti:jJ},LEARNWITH_AI:{token:VJ,tokenScope:"https://purl.imsglobal.org/spec/caliper/v1p2/scope/events.write",api:kJ,caliper:qJ,qti:CJ}},zJ={tsc:"tsc",nativePreview:"@typescript/native-preview"},J1={package:zJ.nativePreview,bin:"tsgo"},e=null,V8=!1,k8=!1;function o8($){let Z=$.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${Z}$`)}function PJ(){if(e!==null)return;if(e=[],typeof process>"u"||!process.env?.DEBUG){k8=!1;return}k8=!0;let $=process.env.DEBUG.trim();if($==="1"||$==="true"||$==="*"){V8=!0;return}let J=$.split(",").map((K)=>K.trim()).filter(Boolean);for(let K of J)if(K.startsWith("-"))e.push({regex:o8(K.slice(1)),exclude:!0});else e.push({regex:o8(K),exclude:!1});if(!e.some((K)=>!K.exclude)&&e.length>0)V8=!0}function TJ($){if(PJ(),!k8)return!0;if(V8){if($){for(let J of e)if(J.exclude&&J.regex.test($))return!1}return!0}if(!$)return!1;for(let J of e)if(J.exclude&&J.regex.test($))return!1;for(let J of e)if(!J.exclude&&J.regex.test($))return!0;return!1}function Y9(){return typeof globalThis<"u"&&"window"in globalThis}function RJ(){if(Y9())return"browser";if(typeof process<"u"&&process.env){if(process.env.CI||process.env.GITHUB_ACTIONS||process.env.GITLAB_CI||process.env.CIRCLECI||process.env.JENKINS_URL||process.env.BUILDKITE)return"ci"}return"terminal"}var q8;if(!Y9())try{q8=(await import("./chunk-kkajswjx.js")).inspect}catch{}var $2={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"};function NJ($){switch($){case"debug":return $2.blue;case"info":return $2.cyan;case"warn":return $2.yellow;case"error":return $2.red}}function IJ($){switch($){case"debug":return console.debug;case"info":return console.info;case"warn":return console.warn;case"error":return console.error}}function bJ($){if(q8)return q8($,{depth:null,colors:!0,breakLength:80,compact:!1});return JSON.stringify($,null,2)}var hJ=($)=>{let J=NJ($.level),Z=IJ($.level),K=$.level.toUpperCase().padEnd(5),H=$.timestamp.toISOString().replace(/\.\d{3}Z$/,""),W=`${$2.dim}[${H}]${$2.reset}`,F=`${J}${K}${$2.reset}`,_=$.scope?`${$2.bold}[${$.scope}]${$2.reset} `:"",O=`${W} ${F} ${_}${$.message}`;if($.context&&Object.keys($.context).length>0)Z(O,bJ($.context));else Z(O)},SJ={debug:"[DEBUG]",info:"[INFO]",warn:"[WARN]",error:"[ERROR]"};function EJ($){return Object.entries($).map(([J,Z])=>`${J}=${vJ(Z)}`).join(" ")}function vJ($){if(typeof $==="string")return $;if(typeof $==="number")return String($);if(typeof $==="boolean")return String($);if($===null)return"null";if($===void 0)return"undefined";return JSON.stringify($)}var yJ=($)=>{let J=[];if(J.push($.timestamp.toISOString()),J.push(SJ[$.level]),$.scope)J.push(`[${$.scope}]`);if(J.push($.message),$.context&&Object.keys($.context).length>0)J.push(EJ($.context));console.log(J.join(" "))},fJ=($)=>{let J={timestamp:$.timestamp.toISOString(),level:$.level,...$.scope&&{scope:$.scope},msg:$.message};if($.context&&Object.keys($.context).length>0)Object.assign(J,$.context);console.log(JSON.stringify(J))},gJ={debug:"color: gray",info:"color: #0ea5e9",warn:"color: #f59e0b",error:"color: #ef4444; font-weight: bold"},dJ={debug:"log",info:"info",warn:"warn",error:"error"},mJ=($)=>{let J=dJ[$.level],Z=gJ[$.level],H=`%c${$.scope?`[${$.scope}]`:""} ${$.message}`;if($.context&&Object.keys($.context).length>0)console[J](H,Z,$.context);else console[J](H,Z)},n8=["debug","info","warn","error"];function lJ($){switch($){case"terminal":return hJ;case"ci":return yJ;case"production":return fJ;case"browser":return mJ;case"test":return()=>{}}}function uJ(){if(typeof process<"u"&&process.env?.DEBUG)return"debug";return"info"}function cJ($,J){return n8.indexOf($)>=n8.indexOf(J)}class d2{scope;minLevel;environment;formatter;defaultContext;constructor($={}){this.scope=$.scope,this.minLevel=$.minLevel??uJ(),this.defaultContext=$.defaultContext??{},this.environment=$.environment??RJ(),this.formatter=lJ(this.environment)}child($){let J=this.scope?`${this.scope}:${$}`:$;return new d2({scope:J,minLevel:this.minLevel,environment:this.environment,defaultContext:{...this.defaultContext}})}withContext($){return new d2({scope:this.scope,minLevel:this.minLevel,environment:this.environment,defaultContext:{...this.defaultContext,...$}})}debug($,J){this.log("debug",$,J)}info($,J){this.log("info",$,J)}warn($,J){this.log("warn",$,J)}error($,J){this.log("error",$,J)}log($,J,Z){if($==="debug"&&!TJ(this.scope))return;if(!cJ($,this.minLevel))return;let K={level:$,message:J,scope:this.scope,context:Z||Object.keys(this.defaultContext).length>0?{...this.defaultContext,...Z}:void 0,timestamp:new Date};this.formatter(K)}}function Q9($={}){return new d2($)}function pJ(){try{let $=typeof process>"u"?void 0:process.env.DEBUG;return $==="1"||$==="true"}catch{return!1}}var j2=Q9({scope:"auth",minLevel:pJ()?"debug":"warn"});class m2{config;accessToken=null;tokenExpiry=0;pendingRequest=null;fetchFn;constructor($){this.config=$,this.fetchFn=$.fetch??globalThis.fetch.bind(globalThis)}async getToken(){if(this.accessToken&&Date.now()<this.tokenExpiry)return j2.debug("Using cached token"),this.accessToken;if(this.pendingRequest)return j2.debug("Waiting for in-flight token request"),this.pendingRequest;this.pendingRequest=this.fetchToken();try{return await this.pendingRequest}finally{this.pendingRequest=null}}async fetchToken(){j2.debug("Fetching new access token...");let{clientId:$,clientSecret:J}=this.config.credentials,Z=btoa(`${$}:${J}`),K=performance.now(),H=await this.fetchFn(this.config.tokenUrl,{method:"POST",headers:{Authorization:`Basic ${Z}`,"Content-Type":"application/x-www-form-urlencoded"},body:this.config.scope?`grant_type=client_credentials&scope=${encodeURIComponent(this.config.scope)}`:"grant_type=client_credentials"}),W=Math.round(performance.now()-K);if(!H.ok)throw j2.error(`Token request failed: ${H.status} ${H.statusText}`),Error(`Failed to obtain access token: ${H.status} ${H.statusText}`);let F=await H.json();return this.accessToken=F.access_token,this.tokenExpiry=Date.now()+(F.expires_in-60)*1000,j2.debug(`Token acquired (${W}ms, expires in ${F.expires_in}s)`),this.accessToken}invalidate(){j2.debug("Token invalidated"),this.accessToken=null,this.tokenExpiry=0}}var l2={caliper:{send:"/caliper/event",validate:"/caliper/event/validate",list:"/caliper/events",get:"/caliper/events/{id}",jobStatus:"/jobs/{id}/status"},oneroster:{rostering:"/ims/oneroster/rostering/v1p2",gradebook:"/ims/oneroster/gradebook/v1p2",resources:"/ims/oneroster/resources/v1p2"},edubridge:{base:"/edubridge"},powerpath:{base:"/powerpath"},clr:{credentials:"/ims/clr/v2p0/credentials",discovery:"/ims/clr/v2p0/discovery"},case:{base:"/ims/case/v1p1"},webhooks:{webhookList:"/webhooks/",webhookGet:"/webhooks/{id}",webhookCreate:"/webhooks/",webhookUpdate:"/webhooks/{id}",webhookDelete:"/webhooks/{id}",webhookActivate:"/webhooks/{id}/activate",webhookDeactivate:"/webhooks/{id}/deactivate",webhookFilterList:"/webhook-filters/",webhookFilterGet:"/webhook-filters/{id}",webhookFilterCreate:"/webhook-filters/",webhookFilterUpdate:"/webhook-filters/{id}",webhookFilterDelete:"/webhook-filters/{id}",webhookFiltersByWebhook:"/webhook-filters/webhook/{webhookId}"},reporting:{mcp:"/mcp/reporting",savedQueryExecute:"/reporting/saved-queries/{id}",adminGroupCheck:"/mcp/admin/users/{email}/group",adminGroupAdd:"/mcp/admin/users/{email}/group",adminGroupRemove:"/mcp/admin/users/{email}/group"}},aJ={caliper:{send:"/caliper/v1p2",validate:null,list:null,get:null,jobStatus:null},oneroster:{rostering:"/rostering/1.0",gradebook:"/gradebook/1.0",resources:"/resources/1.0"},webhooks:null,reporting:null,edubridge:null,powerpath:null,clr:null,case:{base:"/case/1.1"}},G9={BEYOND_AI:l2,LEARNWITH_AI:aJ};function iJ($){return"env"in $&&!("baseUrl"in $)&&!("services"in $)}function sJ($){return"baseUrl"in $&&!("services"in $)}function oJ($){return"services"in $}function r8($,J){let Z=$?G9[$]??l2:l2;return{caliper:J?.caliper??Z.caliper,oneroster:J?.oneroster??Z.oneroster,webhooks:J?.webhooks??Z.webhooks,reporting:J?.reporting??Z.reporting,edubridge:J?.edubridge??Z.edubridge,powerpath:J?.powerpath??Z.powerpath,clr:J?.clr??Z.clr,case:J?.case??Z.case}}class N2{platform;env;auth;timeout;_endpoints;_authUrl;_tokenScope;_pathProfiles;_tokenManagers=new Map;constructor($){if(this.timeout=$.timeout??30000,iJ($)){this.auth=$.auth;let J=$.platform??W9,Z=$.env;this.platform=J,this.env=Z;let K=AJ[J];if(!K)throw Error(`Unknown platform: ${J}`);this._authUrl=K.token[Z],this._tokenScope=K.tokenScope??void 0,this._pathProfiles=G9[J]??l2,this._endpoints={oneroster:{baseUrl:K.api[Z],authUrl:this._authUrl},edubridge:{baseUrl:K.api[Z],authUrl:this._authUrl},powerpath:{baseUrl:K.api[Z],authUrl:this._authUrl},clr:{baseUrl:K.api[Z],authUrl:this._authUrl},case:{baseUrl:K.api[Z],authUrl:this._authUrl},caliper:{baseUrl:K.caliper[Z],authUrl:this._authUrl},webhooks:{baseUrl:K.caliper[Z],authUrl:this._authUrl},reporting:{baseUrl:K.api[Z],authUrl:this._authUrl},qti:{baseUrl:K.qti[Z],authUrl:this._authUrl}}}else if(sJ($))this.auth=$.auth,this._authUrl=$.authUrl,this._pathProfiles=r8($.pathProfile,$.paths),this._endpoints={oneroster:{baseUrl:$.baseUrl,authUrl:this._authUrl},edubridge:{baseUrl:$.baseUrl,authUrl:this._authUrl},powerpath:{baseUrl:$.baseUrl,authUrl:this._authUrl},clr:{baseUrl:$.baseUrl,authUrl:this._authUrl},case:{baseUrl:$.baseUrl,authUrl:this._authUrl},caliper:{baseUrl:$.baseUrl,authUrl:this._authUrl},webhooks:{baseUrl:$.baseUrl,authUrl:this._authUrl},reporting:{baseUrl:$.baseUrl,authUrl:this._authUrl},qti:{baseUrl:$.baseUrl,authUrl:this._authUrl}};else if(oJ($)){this.auth=$.auth,this._authUrl=$.authUrl,this._pathProfiles=r8($.pathProfile,$.paths),this._endpoints={};for(let[J,Z]of Object.entries($.services))if(Z)this._endpoints[J]={baseUrl:Z,authUrl:this._authUrl}}else throw Error("Invalid provider configuration");for(let J of Object.keys(this._pathProfiles))if(this._pathProfiles[J]===null)delete this._endpoints[J]}getEndpoint($){let J=this._endpoints[$];if(!J){let Z=$;if(Z in this._pathProfiles&&this._pathProfiles[Z]===null)throw Error(`Service "${$}" is not supported on ${this.platform??"this"} platform.`);throw Error(`Service "${$}" is not configured in this provider`)}return J}hasService($){return $ in this._endpoints}getAvailableServices(){return Object.keys(this._endpoints)}getTokenUrl(){return this._authUrl}getEndpointWithPaths($){let J=this.getEndpoint($),Z=this.getServicePaths($);return{...J,paths:Z}}getPaths(){return this._pathProfiles}getServicePaths($){let J=this._pathProfiles[$];if(!J)throw Error(`Service "${$}" is not supported on ${this.platform??"this"} platform.`);return J}hasServiceSupport($){return this._pathProfiles[$]!==null}getTokenProvider($){let J=this.getEndpoint($),{authUrl:Z}=J;if(!Z)return;if(!this.auth)throw Error(`Service "${$}" requires authentication but no credentials were provided`);let K=this._tokenManagers.get(Z);if(!K)K=new m2({tokenUrl:Z,credentials:{clientId:this.auth.clientId,clientSecret:this.auth.clientSecret},scope:this._tokenScope}),this._tokenManagers.set(Z,K);return K}async checkAuth(){if(!this._authUrl||!this.auth)throw Error("No auth configured on this provider");let $=Date.now(),J=this._tokenManagers.get(this._authUrl);if(!J)J=new m2({tokenUrl:this._authUrl,credentials:{clientId:this.auth.clientId,clientSecret:this.auth.clientSecret},scope:this._tokenScope}),this._tokenManagers.set(this._authUrl,J);try{return await J.getToken(),{ok:!0,latencyMs:Date.now()-$,checks:{tokenAcquisition:!0}}}catch(Z){return{ok:!1,latencyMs:Date.now()-$,error:Z instanceof Error?Z.message:String(Z),checks:{tokenAcquisition:!1}}}}invalidateTokens(){for(let $ of this._tokenManagers.values())$.invalidate?.();this._tokenManagers.clear()}}function b($){try{if(typeof process>"u")return;if(typeof $==="string")return process.env[$];for(let J of $){let Z=process.env[J];if(Z!==void 0)return Z}return}catch{return}}function F2(){let $=b("DEBUG");return $==="1"||$==="true"}function nJ(){return Math.random().toString(16).slice(2,10)}function C8($){return Q9({scope:$,minLevel:F2()?"debug":"warn"})}var u2={defaultPlatform:W9,templates:{BEYOND_AI:{staging:{platform:"BEYOND_AI",env:"staging"},production:{platform:"BEYOND_AI",env:"production"}},LEARNWITH_AI:{staging:{platform:"LEARNWITH_AI",env:"staging"},production:{platform:"LEARNWITH_AI",env:"production"}}}};function rJ($){if(typeof $==="string")return $;if($.length===0)throw Error(`Missing env var key: ${$}`);return $[0]}function O2($){return rJ($)}function B9($){if($!=="staging"&&$!=="production")throw Error(`Invalid env "${$}": must be "staging" or "production"`);return $}function _9($,J){let Z=$?.clientId??b(J.clientId),K=$?.clientSecret??b(J.clientSecret);if(!Z)throw Error(`Missing clientId: provide in config or set ${O2(J.clientId)}`);if(!K)throw Error(`Missing clientSecret: provide in config or set ${O2(J.clientSecret)}`);return{clientId:Z,clientSecret:K}}function tJ($,J,Z){if(!Z)return;return _9($,J)}function eJ($){let J=b($.baseUrl),Z=b($.authUrl),K=b($.clientId),H=b($.clientSecret);if(J===void 0&&K===void 0)return`Missing env: provide in config or set ${O2($.env??$.baseUrl)}`;let W=[];if(J===void 0)W.push(O2($.env??$.baseUrl));if(J!==void 0&&Z===void 0)W.push(O2($.authUrl));if(K===void 0)W.push(O2($.clientId));if(H===void 0)W.push(O2($.clientSecret));return`Missing environment variables: ${W.join(", ")}`}var $Z={name:"transport",matches($){return"transport"in $&&!!$.transport},resolve($){return{mode:"transport",transport:$.transport}}},JZ={name:"provider",matches($){return"provider"in $&&!!$.provider},resolve($){return{mode:"provider",provider:$.provider}}},ZZ={name:"env-config",matches($){return"env"in $},resolve($,J,Z){let K=$,H=B9(K.env),W=_9(K.auth,J),F=K.platform??Z.defaultPlatform,_=Z.templates[F];if(!_){let w=Object.keys(Z.templates).join(", ");throw Error(`Unknown platform "${F}": available platforms are ${w}`)}let O=_[H];if(!O){let w=Object.keys(_).join(", ");throw Error(`Unknown env "${H}" for platform "${F}": available environments are ${w}`)}return{mode:"provider",provider:new N2({platform:O.platform,env:O.env,auth:W,timeout:K.timeout})}}},KZ={name:"explicit-config",matches($){return"baseUrl"in $},resolve($,J){let Z=$,K=Z.authUrl??Z.auth?.authUrl,H=!!K,W=tJ(Z.auth,J,H);return{mode:"provider",provider:new N2({baseUrl:Z.baseUrl,authUrl:K,auth:W,timeout:Z.timeout,pathProfile:Z.pathProfile,paths:Z.paths})}}},HZ={name:"env-fallback-platform",matches($,J){if(Object.keys($).length>0)return!1;let Z=J.env?b(J.env):void 0,K=b(J.clientId),H=b(J.clientSecret);return Z!==void 0&&K!==void 0&&H!==void 0},resolve($,J,Z){let K=B9(b(J.env)),H=b(J.clientId),W=b(J.clientSecret),F=Z.defaultPlatform,_=Z.templates[F]?.[K];if(!_)throw Error(`Unknown env "${K}" for platform "${F}"`);return{mode:"provider",provider:new N2({platform:_.platform,env:_.env,auth:{clientId:H,clientSecret:W}})}}},XZ={name:"env-fallback-explicit",matches($,J){if(Object.keys($).length>0)return!1;let Z=b(J.baseUrl),K=b(J.authUrl),H=b(J.clientId),W=b(J.clientSecret);return Z!==void 0&&K!==void 0&&H!==void 0&&W!==void 0},resolve($,J){let Z=b(J.baseUrl),K=b(J.authUrl),H=b(J.clientId),W=b(J.clientSecret);return{mode:"provider",provider:new N2({baseUrl:Z,authUrl:K,auth:{clientId:H,clientSecret:W}})}}},WZ={name:"token-provider",matches($){return"tokenProvider"in $},resolve(){throw Error("TokenProvider mode is not supported with provider pattern. Use { provider: TimebackProvider } or { env, auth } instead.")}},YZ=[$Z,JZ,ZZ,WZ,KZ,HZ,XZ];function F9($,J,Z=u2){for(let K of YZ)if(K.matches($,J))return K.resolve($,J,Z);throw Error(eJ(J))}var M8=3,QZ=[429,503],t8=1000;class A8{config;log;constructor($){let{config:J,logger:Z}=$,K=J.fetch??globalThis.fetch.bind(globalThis),H;if("tokenProvider"in J&&J.tokenProvider)H=J.tokenProvider;else if("auth"in J&&J.auth)H=new m2({tokenUrl:J.auth.authUrl,credentials:{clientId:J.auth.clientId,clientSecret:J.auth.clientSecret},fetch:K});let W=J.baseUrl.endsWith("/")?J.baseUrl:`${J.baseUrl}/`;this.config={baseUrl:W,timeout:J.timeout??30000,fetch:K,tokenProvider:H},this.log=Z.child("http")}get baseUrl(){return this.config.baseUrl}async request($,J={}){let Z=await this.requestRaw($,J);return this.handleResponse(Z)}async exists($,J={}){try{return await this.requestRaw($,J),!0}catch(Z){if(DJ(Z)&&Z.statusCode===404)return!1;throw Z}}async requestRaw($,J={}){let{method:Z="GET",params:K,body:H,headers:W={}}=J,F=this.buildUrl($,K),_=J.requestId??nJ(),w=Date.now()+this.config.timeout;for(let j=0;j<M8;j++){let A=w-Date.now();if(A<=0)throw this.log.error("Request timeout before attempt",F2()?{requestId:_,path:$}:{path:$}),new s("Request timeout",408);let C=await this.getAccessToken(),q=j===M8-1,z=performance.now();this.log.debug(`→ ${Z} ${F}`,{requestId:_,attempt:j>0?j+1:void 0});let N={"Content-Type":"application/json",Accept:"application/json","X-Request-ID":_,...W};if(C)N.Authorization=`Bearer ${C}`;let I=await this.config.fetch(F,{method:Z,headers:N,body:H?JSON.stringify(H):void 0,signal:AbortSignal.timeout(Math.min(A,this.config.timeout))}),r=Math.round(performance.now()-z);if(this.log.debug(`← ${I.status} ${I.statusText} (${r}ms)`,{requestId:_}),QZ.includes(I.status)&&!q){let y2=I.headers.get("Retry-After"),p=this.parseRetryAfter(y2,j),s8=w-Date.now();if(p>=s8)throw this.log.error("Request timeout during retry backoff",F2()?{requestId:_,path:$}:{path:$}),new s("Request timeout",408);this.log.warn(`Retrying in ${p}ms (attempt ${j+1}/${M8})`,{...F2()&&{requestId:_},status:I.status}),await this.sleep(p);continue}if(!I.ok)return this.handleErrorResponse(I,_);return I}throw this.log.error("Max retries exceeded",F2()?{requestId:_,path:$}:{path:$}),new s("Max retries exceeded")}getAccessToken(){if(!this.config.tokenProvider)return Promise.resolve(void 0);return this.config.tokenProvider.getToken()}buildUrl($,J){if(/^[a-z][a-z0-9+.-]*:/i.test($))throw Error(`Absolute URLs are not allowed in path: ${$}. Use relative paths only.`);let Z=$.startsWith("/")?$.slice(1):$,K=new URL(Z,this.config.baseUrl);if(J){for(let[H,W]of Object.entries(J))if(W!==void 0)K.searchParams.set(H,String(W))}return K.toString()}async handleResponse($){if(!$.ok)await this.handleErrorResponse($);if($.status===204)return;if($.headers.get("content-length")==="0")return;return this.parseJsonResponse($)}async parseJsonResponse($){let J=await $.text();if(!J||J.trim()==="")return;try{return JSON.parse(J)}catch(Z){let K=J.length>200?J.slice(0,200)+"...":J,H=Z instanceof Error?Z.message:String(Z),W=$.url||"unknown";throw this.log.error("Failed to parse JSON response",{url:W,status:$.status,contentType:$.headers.get("content-type"),bodyPreview:K,error:H}),new s(`Invalid JSON response from ${W}`,$.status,{parseError:H,body:K})}}async handleErrorResponse($,J){let Z,K=await $.text().catch(()=>"");if(K)try{Z=JSON.parse(K)}catch(W){let F=W instanceof Error?W.message:"Unknown parse error";Z={rawBody:K.slice(0,500),parseError:F},this.log.warn("Failed to parse error response as JSON",{...F2()&&{requestId:J},url:$.url,status:$.status,parseError:F,bodyPreview:K.slice(0,200)})}let H=this.extractErrorMessage(Z,$.statusText);if($.status!==404)this.log.error(`Request failed: ${$.status} ${H}`,F2()?{requestId:J}:void 0);switch($.status){case 401:throw this.config.tokenProvider?.invalidate?.(),new $9(H,Z);case 403:throw new J9(H,Z);case 404:throw new Z9(H,Z);case 422:throw new K9(H,Z);default:throw new s(H,$.status,Z)}}extractErrorMessage($,J){if(typeof $==="object"&&$!==null){let Z=$;if(typeof Z.message==="string")return Z.message;if(typeof Z.error==="string")return Z.error;if(typeof Z.imsx_description==="string")return Z.imsx_description}return J}sleep($){return new Promise((J)=>{setTimeout(J,$)})}parseRetryAfter($,J){if(!$)return t8*Math.pow(2,J);let Z=parseInt($,10);if(!isNaN(Z))return Z*1000;let K=Date.parse($);if(!isNaN(K)){let H=K-Date.now();return Math.max(0,H)}return t8*Math.pow(2,J)}}function GZ($){if($ instanceof Date)return $.toISOString();if(typeof $==="boolean")return $?"true":"false";if(typeof $==="number")return String($);return $.replaceAll("'","''")}function t($){let J=GZ($);return typeof $==="string"||$ instanceof Date?`'${J}'`:J}function BZ($,J){if(typeof J==="string"||typeof J==="number"||typeof J==="boolean"||J instanceof Date)return[`${$}=${t(J)}`];if(typeof J==="object"&&J!==null){let Z=J,K=[];if(Z.ne!==void 0)K.push(`${$}!=${t(Z.ne)}`);if(Z.gt!==void 0)K.push(`${$}>${t(Z.gt)}`);if(Z.gte!==void 0)K.push(`${$}>=${t(Z.gte)}`);if(Z.lt!==void 0)K.push(`${$}<${t(Z.lt)}`);if(Z.lte!==void 0)K.push(`${$}<=${t(Z.lte)}`);if(Z.contains!==void 0)K.push(`${$}~${t(Z.contains)}`);if(Z.in!==void 0&&Z.in.length>0){let H=Z.in.map((F)=>`${$}=${t(F)}`),W=H.join(" OR ");K.push(H.length>1?`(${W})`:W)}if(Z.notIn!==void 0&&Z.notIn.length>0){let H=Z.notIn.map((W)=>`${$}!=${t(W)}`);K.push(H.join(" AND "))}return K}return[]}function _Z($){return"OR"in $&&Array.isArray($.OR)}function O9($){if(_Z($)){let Z=$.OR.map((K)=>O9(K)).filter((K)=>K!==void 0);return Z.length>0?Z.join(" OR "):void 0}let J=[];for(let[Z,K]of Object.entries($))if(K!==void 0)J.push(...BZ(Z,K));return J.length>0?J.join(" AND "):void 0}var e8=100,FZ=1e4;class z8{fetcher;path;params;max;unwrapKey;log;transform;paginationStyle;constructor($){this.fetcher=$.fetcher,this.path=$.path,this.params=$.params??{},this.max=$.max,this.unwrapKey=$.unwrapKey,this.log=$.logger?.child("pagination")??C8("pagination"),this.transform=$.transform,this.paginationStyle=$.paginationStyle??"offset"}buildRequestParams($,J){let{where:Z,fields:K,offset:H,limit:W,...F}=this.params,_={...F,filter:Z?O9(Z):void 0,fields:K?.join(","),limit:$};if(this.paginationStyle==="page"){let O=Math.floor(J/$)+1;return{..._,page:O}}return{..._,offset:J}}extractItems($,J){let Z;if(this.unwrapKey)Z=$[this.unwrapKey]??[];else Z=$;return this.validateItems(Z,J)}validateItems($,J){if($===null||$===void 0)return this.log.warn(`Page ${J}: response data is ${$}, treating as empty`),[];if(!Array.isArray($))throw Error(`Expected array for page ${J}, got ${typeof $}. `+(this.unwrapKey?`Check unwrapKey '${this.unwrapKey}' is correct.`:""));return $}hasMorePages($,J,Z,K){if(J===0)return!1;let H=$.hasMore,W=$.total!==void 0&&Z+J<$.total;return H||W||J===K&&$.total===void 0}async*[Symbol.asyncIterator](){let $=this.params.offset??0,J=this.params.limit??e8,Z=!0,K=1,H=0;while(Z){this.log.debug(`Fetching page ${K} (offset: ${$}, limit: ${J})`);let W=await this.fetcher(this.path,{params:this.buildRequestParams(J,$)}),F=this.extractItems(W.data,K);this.log.debug(`Page ${K}: ${F.length} items`);for(let _ of F)if(yield this.transform?this.transform(_):_,H++,this.max!==void 0&&H>=this.max){this.log.debug(`Pagination complete: reached max of ${this.max} items`);return}Z=this.hasMorePages(W,F.length,$,J),$+=F.length,K++}this.log.debug(`Pagination complete: ${H} total items`)}async toArray($={}){let J=$.maxItems??FZ,Z=[];for await(let K of this){if(Z.length>=J)throw Error(`toArray() exceeded maxItems limit of ${J}. Use 'for await...of' to stream large datasets, or increase maxItems.`);Z.push(K)}return Z}async firstPage(){let $=this.params.limit??e8,J=this.params.offset??0,Z=await this.fetcher(this.path,{params:this.buildRequestParams($,J)}),K=this.extractItems(Z.data,1),H=this.transform?K.map(this.transform):K,W=this.hasMorePages(Z,H.length,J,$);return this.log.debug(`First page: ${H.length} items, total: ${Z.total}, hasMore: ${W}`),{data:H,hasMore:W,total:Z.total,nextOffset:W?J+H.length:void 0}}}function g2($,J){return{path:$,message:J}}function o($,J,Z){let K=$.safeParse(J);if(K.success)return K.data;let H=K.error.issues.map((W)=>({path:W.path.join(".")||"(root)",message:W.message}));throw R2(`Invalid ${Z} data`,H)}function c2($,J){if(typeof $!=="string"||$.trim()==="")throw R2(`Invalid ${J}`,[g2(J,"Must be a non-empty string")])}function P8($){if(!$)return;let J=[];if($.limit!==void 0){if(!Number.isInteger($.limit)||$.limit<=0)J.push(g2("limit","Must be a positive integer"))}if($.offset!==void 0){if(!Number.isInteger($.offset)||$.offset<0)J.push(g2("offset","Must be a non-negative integer"))}if($.max!==void 0){if(!Number.isInteger($.max)||$.max<=0)J.push(g2("max","Must be a positive integer"))}if(J.length>0)throw R2("Invalid list parameters",J)}var x9={baseUrl:["TIMEBACK_API_BASE_URL","TIMEBACK_BASE_URL","CALIPER_BASE_URL"],authUrl:["TIMEBACK_API_AUTH_URL","TIMEBACK_AUTH_URL","CALIPER_TOKEN_URL"],clientId:["TIMEBACK_API_CLIENT_ID","TIMEBACK_CLIENT_ID","CALIPER_CLIENT_ID"],clientSecret:["TIMEBACK_API_CLIENT_SECRET","TIMEBACK_CLIENT_SECRET","CALIPER_CLIENT_SECRET"]},V2="http://purl.imsglobal.org/ctx/caliper/v1p2",D9="QUESTION_RESULT";import{z as L}from"zod/v4";import{z as Y}from"zod/v4";import{z as J2}from"zod/v4";import{z as U}from"zod/v4";import{z as D}from"zod/v4";import{z as V}from"zod/v4";import{z as x}from"zod/v4";import{z as f}from"zod/v4";import{z as G}from"zod/v4";import{z as B}from"zod/v4";import{z as Q}from"zod/v4";import{z as C2}from"zod/v4";var S=C8("caliper");class k9 extends A8{paths;constructor($){super({config:$,logger:S});this.paths=$.paths}async requestPaginated($,J={}){let Z=await this.request($,J),{events:K,pagination:H}=Z,F=(J.params?.offset??0)+K.length<H.total;return{data:K,hasMore:F,total:H.total}}}class q9 extends z8{constructor($,J,Z={}){P8(Z);let{max:K,...H}=Z;super({fetcher:(W,F)=>$.requestPaginated(W,F),path:J,params:H,max:K,logger:S})}}function T8($){let J=$.id??`urn:uuid:${crypto.randomUUID()}`,Z=$.metricsId??`urn:uuid:${crypto.randomUUID()}`;return{"@context":V2,id:J,type:"ActivityEvent",action:"Completed",actor:$.actor,object:$.object,eventTime:$.eventTime??new Date().toISOString(),profile:"TimebackProfile",generated:{id:Z,type:"TimebackActivityMetricsCollection",items:$.metrics,...$.attempt===void 0?{}:{attempt:$.attempt},...$.generatedExtensions?{extensions:$.generatedExtensions}:{}},extensions:$.extensions,...$.edApp===void 0?{}:{edApp:$.edApp},...$.session===void 0?{}:{session:$.session}}}function R8($){let J=$.id??`urn:uuid:${crypto.randomUUID()}`,Z=$.metricsId??`urn:uuid:${crypto.randomUUID()}`;return{"@context":V2,id:J,type:"TimeSpentEvent",action:"SpentTime",actor:$.actor,object:$.object,eventTime:$.eventTime??new Date().toISOString(),profile:"TimebackProfile",generated:{id:Z,type:"TimebackTimeSpentMetricsCollection",items:$.metrics},extensions:$.extensions,...$.edApp===void 0?{}:{edApp:$.edApp},...$.session===void 0?{}:{session:$.session}}}function OZ($){return{"@context":V2,id:$.id??`urn:uuid:${crypto.randomUUID()}`,type:"AssessmentItemEvent",action:"Started",profile:"AssessmentProfile",actor:$.actor,object:{...$.object,type:"AssessmentItem"},eventTime:$.eventTime??new Date().toISOString(),edApp:$.edApp,...$.session===void 0?{}:{session:$.session},...$.extensions===void 0?{}:{extensions:$.extensions}}}function xZ($){return{"@context":V2,id:$.id??`urn:uuid:${crypto.randomUUID()}`,type:"AssessmentItemEvent",action:"Completed",profile:"AssessmentProfile",actor:$.actor,object:{...$.object,type:"AssessmentItem"},eventTime:$.eventTime??new Date().toISOString(),edApp:$.edApp,...$.generated===void 0?{}:{generated:{...$.generated,type:"Response"}},...$.session===void 0?{}:{session:$.session},...$.extensions===void 0?{}:{extensions:$.extensions}}}function DZ($){let{id:J,...Z}=$.generated;return{"@context":V2,id:$.id??`urn:uuid:${crypto.randomUUID()}`,type:"GradeEvent",action:"Graded",profile:"GradingProfile",actor:$.actor,object:$.object,eventTime:$.eventTime??new Date().toISOString(),edApp:$.edApp,generated:{...Z,id:J??`urn:uuid:${crypto.randomUUID()}`,type:"Score",scoreType:D9},...$.session===void 0?{}:{session:$.session},...$.extensions===void 0?{}:{extensions:$.extensions}}}var wZ="http://purl.imsglobal.org/ctx/caliper/v1p2",UZ="urn:tag:auto-attach",X2={PERSON:"Person",ASSIGNABLE_DIGITAL_RESOURCE:"AssignableDigitalResource",ACTIVITY_METRIC:"ActivityMetric",TIME_SPENT_METRIC:"TimeSpentMetric",ACTIVITY_METRICS_COLLECTION:"ActivityMetricsCollection",TIME_SPENT_METRICS_COLLECTION:"TimeSpentMetricsCollection",COURSE_OFFERING:"CourseOffering",SOFTWARE_APPLICATION:"SoftwareApplication"},MZ=new Set(["ActivityEvent","TimeSpentEvent","AssignableEvent","ViewEvent"]);class C9{transformEnvelope($){let{data:J}=$;if(!Array.isArray(J))return $;let Z=J.map((K)=>x2(K)?LZ(K):K);return{...$,data:Z}}}function LZ($){let J={...$};if(!("@context"in J))J["@context"]=wZ;if(J.profile==="TimebackProfile")J.profile="AggregationProfile";if(x2(J.actor)&&J.actor.type==="TimebackUser")J.actor=jZ(J.actor);if(x2(J.object))J.object=VZ(J.object,J.type);if(x2(J.generated)){let Z=J.type;if(Z==="ActivityEvent")J.generated=kZ(J.generated);else if(Z==="TimeSpentEvent")J.generated=qZ(J.generated)}if(!J.session)J.session=UZ;return J}function jZ($){return{type:X2.PERSON,id:$.id}}function VZ($,J){if(!($.type==="TimebackActivityContext"&&J!==void 0&&MZ.has(J)))return{...$};let K={type:X2.ASSIGNABLE_DIGITAL_RESOURCE,id:$.id};if($.name)K.name=$.name;if(x2($.course)){let H={type:X2.COURSE_OFFERING,id:$.course.id};if($.course.name)H.name=$.course.name;K.isPartOf=H}if(x2($.app))K.extensions={app:{name:$.app.name,type:$.app.type??X2.SOFTWARE_APPLICATION}};return K}function A9($,J,Z,K){let W={id:typeof $?.id==="string"?$.id:`urn:uuid:${crypto.randomUUID()}`,type:J};if(Array.isArray($.items))W.items=$.items.map((F)=>{if(!x2(F))return F;let _=typeof F.type==="string"?F.type:"",O=_?_[0].toUpperCase()+_.slice(1):K;return{id:`urn:uuid:${crypto.randomUUID()}`,type:Z,metricType:O,metricValue:F.value}});for(let[F,_]of Object.entries($))if(F!=="id"&&F!=="type"&&F!=="items")W[F]=_;return W}function kZ($){return A9($,X2.ACTIVITY_METRICS_COLLECTION,X2.ACTIVITY_METRIC,"")}function qZ($){return A9($,X2.TIME_SPENT_METRICS_COLLECTION,X2.TIME_SPENT_METRIC,"Active")}function x2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function CZ($,J=u2){return F9($,x9,J)}var AZ=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,v=L.string().min(1).regex(AZ,"must be a valid ISO 8601 datetime"),q2=L.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/,"must be a valid ISO 8601 date (YYYY-MM-DD)"),X=L.string().trim().min(1),Z2=L.enum(["Reading","Language","Vocabulary","Social Studies","Writing","Science","FastMath","Math","None","Other"]).meta({id:"TimebackSubject",description:"Subject area"}),n=L.union([L.literal(-1),L.literal(0),L.literal(1),L.literal(2),L.literal(3),L.literal(4),L.literal(5),L.literal(6),L.literal(7),L.literal(8),L.literal(9),L.literal(10),L.literal(11),L.literal(12),L.literal(13)]).meta({id:"TimebackGrade",description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}),zZ=L.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),PZ=L.enum(["department","school","district","local","state","national"]),z9=L.enum(["administrator","aide","guardian","parent","proctor","relative","student","teacher"]),TZ=L.enum(["administrator","proctor","student","teacher"]),RZ=L.enum(["qti","text","audio","video","interactive","visual","course-material","assessment-bank"]),NZ=L.enum(["qti-test","qti-question","qti-stimulus","qti-test-bank"]),IZ=L.enum(["unit","course","resource-collection"]),bZ=L.enum(["choice","order","associate","match","hotspot","hottext","select-point","graphic-order","graphic-associate","graphic-gap-match","text-entry","extended-text","inline-choice","upload","slider","drawing","media","custom"]),hZ=L.enum(["easy","medium","hard"]),SZ=L.array(L.object({source:L.string(),learningObjectiveIds:L.array(L.string())})),EZ=L.object({consecutive_failures:L.number().int().min(1).optional(),stagnation_limit:L.number().int().min(1).optional()}).optional(),Q1=L.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]).nullable(),G1=L.object({imsx_codeMajor:L.enum(["failure","success"]),imsx_severity:L.enum(["error","warning","status"]),imsx_description:L.string(),imsx_CodeMinor:L.object({imsx_codeMinorField:L.array(L.object({imsx_codeMinorFieldName:L.string(),imsx_codeMinorFieldValue:L.string()}))}).optional()}),vZ=Y.union([Y.url(),Y.string().regex(/^urn:/,"Must be a URL or URN")]),D2=Y.object({id:Y.url(),type:Y.literal("TimebackUser"),email:Y.string()}),N8=Y.object({id:Y.url(),type:Y.literal("TimebackActivityContext"),subject:Z2,app:Y.object({name:Y.string()}),activity:Y.object({id:Y.url().optional(),name:Y.string()}).strict().optional(),course:Y.object({id:Y.url().optional(),name:Y.string().optional()}).strict(),process:Y.boolean().optional()}),P9=Y.object({"@context":Y.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),id:Y.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Y.string(),eventTime:v,profile:Y.literal("TimebackProfile"),actor:D2,action:Y.string(),object:N8,edApp:Y.object({id:Y.string(),name:Y.string().optional()}).optional()}),T9=Y.object({type:Y.enum(["totalQuestions","correctQuestions","xpEarned","masteredUnits"]),value:Y.number()}),yZ=Y.object({id:Y.url(),type:Y.literal("TimebackActivityMetricsCollection"),attempt:Y.number().optional(),items:Y.array(T9),extensions:Y.record(Y.string(),Y.unknown()).optional()}),fZ=P9.extend({type:Y.literal("ActivityEvent"),action:Y.literal("Completed"),generated:yZ}),R9=Y.object({type:Y.enum(["active","inactive","waste","unknown","anti-pattern"]),value:Y.number(),subType:Y.string().optional()}),gZ=Y.object({id:Y.url(),type:Y.literal("TimebackTimeSpentMetricsCollection"),items:Y.array(R9)}),dZ=P9.extend({type:Y.literal("TimeSpentEvent"),action:Y.literal("SpentTime"),generated:gZ}),mZ=Y.object({actor:D2,object:N8,metrics:Y.array(T9).min(1,"metrics must contain at least one metric"),eventTime:v.optional(),metricsId:Y.string().optional(),id:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional(),edApp:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),session:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),attempt:Y.number().int().min(1).optional(),generatedExtensions:Y.object({pctCompleteApp:Y.number().optional()}).loose().optional()}).strict(),lZ=Y.object({actor:D2,object:N8,metrics:Y.array(R9).min(1,"metrics must contain at least one metric"),eventTime:v.optional(),metricsId:Y.string().optional(),id:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional(),edApp:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),session:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional()}).strict(),uZ=Y.union([fZ,dZ]),_1=Y.object({sensor:Y.string(),sendTime:v,dataVersion:Y.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Y.array(uZ)}),cZ=Y.enum(["AnnotationProfile","AssessmentProfile","ToolUseProfile","GeneralProfile","FeedbackProfile","MediaProfile","SurveyProfile","ResourceManagementProfile","ForumProfile","AssignableProfile","GradingProfile","ReadingProfile","SessionProfile","SearchProfile","ToolLaunchProfile","TimebackProfile"]),l=Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]),p2=Y.object({id:vZ,type:Y.string(),name:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),N9=Y.object({"@context":Y.string().optional(),id:Y.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Y.string(),actor:Y.union([Y.string(),p2,D2]),action:Y.string(),object:l,eventTime:v,profile:cZ,edApp:l.optional(),generated:l.optional(),target:l.optional(),referrer:l.optional(),group:l.optional(),membership:l.optional(),session:l.optional(),federatedSession:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),w9=Y.object({sensor:X,sendTime:v,dataVersion:Y.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Y.array(N9).min(1,"data must contain at least one event")}),pZ=Y.object({sensor:X,events:Y.array(N9).min(1,"events must contain at least one event")}),U9=Y.object({limit:Y.number().int().positive().optional(),offset:Y.number().int().min(0).optional(),sensor:X.optional(),startDate:v.optional(),endDate:v.optional(),actorId:X.optional(),actorEmail:Y.email().optional()}).strict(),I9=Y.object({id:Y.string(),name:Y.string().optional(),isPartOf:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}),aZ=Y.object({id:Y.string(),attempt:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),startedAtTime:v.optional(),endedAtTime:v.optional(),duration:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}),iZ=Y.object({id:Y.string().optional(),scoreGiven:Y.number(),maxScore:Y.number().optional(),attempt:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),comment:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}),sZ=Y.object({actor:Y.union([Y.string(),p2,D2]),object:I9,edApp:l,id:Y.string().optional(),eventTime:v.optional(),session:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),oZ=Y.object({actor:Y.union([Y.string(),p2,D2]),object:I9,edApp:l,generated:aZ.optional(),id:Y.string().optional(),eventTime:v.optional(),session:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),nZ=Y.object({actor:Y.union([Y.string(),p2,D2]),object:Y.string(),generated:iZ,edApp:l,id:Y.string().optional(),eventTime:v.optional(),session:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),O1=J2.object({name:X,targetUrl:J2.url("targetUrl must be a valid URL"),secret:X,active:J2.boolean(),sensor:J2.string().nullable().optional(),description:J2.string().nullable().optional()}).strict(),rZ=J2.enum(["string","number","boolean"]),tZ=J2.enum(["eq","neq","gt","gte","lt","lte","contains","notContains","in","notIn","startsWith","endsWith","regexp"]),x1=J2.object({webhookId:X,filterKey:X,filterValue:X,filterType:rZ,filterOperator:tZ,active:J2.boolean()}).strict(),a2=U.string().uuid(),M9=U.object({title:X,identifier:a2,uri:X}),eZ=U.object({identifier:a2,uri:X,lastChangeDateTime:X,title:X,creator:X,officialSourceURL:U.string().optional(),publisher:U.string().optional(),description:U.string().optional(),language:U.string().optional(),version:U.string().optional(),caseVersion:U.string().optional(),adoptionStatus:U.string().optional(),statusStartDate:U.string().optional(),statusEndDate:U.string().optional(),licenseUri:U.string().optional(),notes:U.string().optional(),subject:U.array(U.string()).optional(),extensions:U.unknown().optional()}),$5=U.object({identifier:a2,uri:X,lastChangeDateTime:X,fullStatement:X,alternativeLabel:U.string().optional(),CFItemType:U.string().optional(),cfItemType:U.string().optional(),humanCodingScheme:U.string().optional(),listEnumeration:U.string().optional(),abbreviatedStatement:U.string().optional(),conceptKeywords:U.array(U.string()).optional(),notes:U.string().optional(),subject:U.array(U.string()).optional(),language:U.string().optional(),educationLevel:U.array(U.string()).optional(),CFItemTypeURI:U.unknown().optional(),licenseURI:U.unknown().optional(),statusStartDate:U.string().optional(),statusEndDate:U.string().optional(),extensions:U.unknown().optional()}),J5=U.object({identifier:a2,uri:X,lastChangeDateTime:X,associationType:X,originNodeURI:M9,destinationNodeURI:M9,sequenceNumber:U.number().optional(),extensions:U.unknown().optional()}),Z5=U.object({CFItemTypes:U.array(U.unknown()).optional(),CFSubjects:U.array(U.unknown()).optional(),CFConcepts:U.array(U.unknown()).optional(),CFLicenses:U.array(U.unknown()).optional(),CFAssociationGroupings:U.array(U.unknown()).optional(),extensions:U.unknown().optional()}),w1=U.object({CFDocument:eZ,CFItems:U.array($5),CFAssociations:U.array(J5),CFDefinitions:Z5.optional(),extensions:U.unknown().optional()}),L9="https://www.w3.org/ns/credentials/v2",K5=D.array(D.url()).min(3,"@context must include W3C, CLR, and OB context URLs").refine(($)=>$[0]===L9,`First @context entry must be "${L9}"`),b9=D.object({id:D.url(),type:D.literal("Image"),caption:D.string().optional()}),I8=D.object({id:D.url(),type:D.array(D.string()).min(1).refine(($)=>$.includes("Profile"),'type must include "Profile"'),name:D.string().optional(),url:D.string().url().optional(),phone:D.string().optional(),description:D.string().optional(),image:b9.optional(),email:D.string().email().optional()}),h9=D.object({type:X,proofPurpose:X,verificationMethod:X,created:D.iso.datetime(),proofValue:X,cryptosuite:D.string().optional()}),H5=D.object({id:X,type:D.literal("1EdTechJsonSchemaValidator2019")}),X5=D.object({id:D.string().url().optional(),narrative:D.string().optional()}),W5=D.object({id:D.url(),type:D.array(D.string()).min(1).refine(($)=>$.includes("Achievement"),'type must include "Achievement"'),name:X,description:X,criteria:X5,image:b9.optional(),achievementType:D.string().optional(),creator:I8.optional()}),Y5=D.object({type:D.literal("IdentityObject"),identityHash:X,identityType:X,hashed:D.boolean(),salt:D.string().optional()}),Q5=D.enum(["exactMatchOf","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy"]),G5=D.object({type:D.literal("Association"),associationType:Q5,sourceId:D.url(),targetId:D.url()}),B5=D.object({"@context":D.array(D.string()).min(1),id:D.url(),type:D.array(D.string()).min(1).refine(($)=>$.includes("VerifiableCredential"),'type must include "VerifiableCredential"'),issuer:I8,validFrom:D.iso.datetime(),validUntil:D.string().datetime().optional(),credentialSubject:D.object({id:D.string().optional()}),proof:D.array(h9).optional()}),_5=D.object({id:D.string().url().optional(),type:D.array(D.string()).min(1).refine(($)=>$.includes("ClrSubject"),'type must include "ClrSubject"'),identifier:D.array(Y5).optional(),achievement:D.array(W5).optional(),verifiableCredential:D.array(B5).min(1),association:D.array(G5).optional()}),M1=D.object({"@context":K5,id:D.url(),type:D.array(D.string()).min(1).refine(($)=>$.includes("VerifiableCredential")&&$.includes("ClrCredential"),'type must include "VerifiableCredential" and "ClrCredential"'),issuer:I8,name:X,description:D.string().optional(),validFrom:D.iso.datetime(),validUntil:D.iso.datetime().optional(),credentialSubject:_5,proof:D.array(h9).optional(),credentialSchema:D.array(H5).optional()}),F5=V.object({staging:V.string().meta({description:"Course ID in staging environment"}).optional(),production:V.string().meta({description:"Course ID in production environment"}).optional()}).meta({id:"CourseIds",description:"Environment-specific course IDs (populated by sync)"}),O5=V.enum(["base","hole-filling","optional"]).meta({id:"CourseType",description:"Course classification type"}),x5=V.enum(["draft","testing","published","deactivated"]).meta({id:"PublishStatus",description:"Course publication status"}),D5=V.object({dailyXp:V.number().int().positive().meta({description:"Target XP to earn per day"}).optional(),dailyLessons:V.number().int().positive().meta({description:"Target lessons to complete per day"}).optional(),dailyActiveMinutes:V.number().int().positive().meta({description:"Target active learning minutes per day"}).optional(),dailyAccuracy:V.number().int().min(0).max(100).meta({description:"Target accuracy percentage (0-100)"}).optional(),dailyMasteredUnits:V.number().int().positive().meta({description:"Target units to master per day"}).optional()}).meta({id:"CourseGoals",description:"Daily learning goals for a course"}),w5=V.object({totalXp:V.number().int().positive().meta({description:"Total XP available in the course"}).optional(),totalLessons:V.number().int().positive().meta({description:"Total number of lessons/activities"}).optional(),totalGrades:V.number().int().positive().meta({description:"Total grade levels covered"}).optional()}).meta({id:"CourseMetrics",description:"Aggregate metrics for a course"}),S9=V.object({courseType:O5.optional(),isSupplemental:V.boolean().meta({description:"Whether this is supplemental to a base course"}).optional(),isCustom:V.boolean().meta({description:"Whether this is a custom course for an individual student"}).optional(),publishStatus:x5.optional(),contactEmail:V.email().meta({description:"Contact email for course issues"}).optional(),primaryApp:V.string().meta({description:"Primary application identifier"}).optional(),goals:D5.optional(),metrics:w5.optional()}).meta({id:"CourseMetadata",description:"Course metadata (matches API metadata object)"}),E9=V.object({courseCode:V.string().meta({description:"Course code (e.g., 'MATH101')"}).optional(),level:V.string().meta({description:"Course level (e.g., 'AP', 'Honors')"}).optional(),metadata:S9.optional()}).meta({id:"CourseDefaults",description:"Default properties that apply to all courses unless overridden"}),j9=V.object({level:V.string().meta({description:"Course level for this environment"}).optional(),sensor:V.url().meta({description:"Caliper sensor endpoint URL for this environment"}).optional(),launchUrl:V.url().meta({description:"LTI launch URL for this environment"}).optional(),metadata:S9.optional()}).meta({id:"CourseEnvOverrides",description:"Environment-specific course overrides (non-identity fields)"}),U5=V.object({staging:j9.meta({description:"Overrides for staging environment"}).optional(),production:j9.meta({description:"Overrides for production environment"}).optional()}).meta({id:"CourseOverrides",description:"Per-environment course overrides"}),M5=E9.extend({subject:Z2.meta({description:"Subject area for this course"}),grade:n.meta({description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}).optional(),ids:F5.nullable().optional(),sensor:V.url().meta({description:"Caliper sensor endpoint URL for this course"}).optional(),launchUrl:V.url().meta({description:"LTI launch URL for this course"}).optional(),overrides:U5.optional()}).meta({id:"CourseConfig",description:"Configuration for a single course. Must have either grade or courseCode (or both)."}),j1=V.object({$schema:V.string().meta({description:"JSON Schema reference for editor support"}).optional(),name:V.string().min(1,"App name is required").meta({description:"Display name for your app"}),defaults:E9.meta({description:"Default properties applied to all courses"}).optional(),courses:V.array(M5).min(1,"At least one course is required").meta({description:"Courses available in this app"}),sensor:V.url().meta({description:"Default Caliper sensor endpoint URL for all courses"}).optional(),launchUrl:V.url().meta({description:"Default LTI launch URL for all courses"}).optional(),studio:V.object({telemetry:V.boolean().meta({description:"Enable anonymous usage telemetry for Studio (default: true)"}).optional().default(!0)}).meta({description:"Studio-specific configuration"}).optional()}).meta({id:"TimebackConfig",title:"Timeback Config",description:"Configuration schema for timeback.config.json files"}).refine(($)=>{return $.courses.every((J)=>J.grade!==void 0||J.courseCode!==void 0)},{message:"Each course must have either a grade or a courseCode",path:["courses"]}).refine(($)=>{let Z=$.courses.filter((K)=>K.grade!==void 0).map((K)=>`${K.subject}:${K.grade}`);return new Set(Z).size===Z.length},{message:"Duplicate (subject, grade) pair found; each must be unique",path:["courses"]}).refine(($)=>{let Z=$.courses.filter((K)=>K.courseCode!==void 0).map((K)=>K.courseCode);return new Set(Z).size===Z.length},{message:"Duplicate courseCode found; each must be unique",path:["courses"]}).refine(($)=>{return $.courses.every((J)=>{if(J.sensor!==void 0||$.sensor!==void 0)return!0;return[J.launchUrl,$.launchUrl,J.overrides?.staging?.launchUrl,J.overrides?.production?.launchUrl].filter(Boolean).length>0})},{message:"Each course must have an effective sensor. Either set `sensor` explicitly (top-level or per-course), or provide a `launchUrl` so sensor can be derived from its origin.",path:["courses"]}),I2=x.union([v,q2]),b2=I2.transform(($)=>$.includes("T")?$:`${$}T00:00:00.000Z`),k1=x.object({id:x.string(),role:x.string(),beginDate:I2.nullable(),endDate:I2.nullable(),metadata:x.object({goals:x.object({dailyXp:x.number().optional()}).optional(),metrics:x.object({totalXp:x.number().optional(),totalLessons:x.number().optional()}).optional()}).optional(),course:x.object({id:x.string(),title:x.string(),subjects:x.array(x.string()).nullable(),grades:x.array(x.string()).nullable()}),school:x.object({id:x.string(),name:x.string()}),testOutSupported:x.boolean(),testOutEligible:x.boolean()}),L5=x.object({activityMetrics:x.object({xpEarned:x.number(),totalQuestions:x.number(),correctQuestions:x.number(),masteredUnits:x.number()}),timeSpentMetrics:x.object({activeSeconds:x.number(),inactiveSeconds:x.number(),wasteSeconds:x.number()}),apps:x.array(x.string())}),j5=x.record(x.string(),x.record(x.string(),L5)),q1=x.object({message:x.string(),enrollmentId:x.string(),startDate:I2,endDate:I2,facts:j5,factsByApp:x.unknown()}),v9=x.object({email:x.email().optional(),studentId:X.optional()}).superRefine(($,J)=>{if(!$.email&&!$.studentId)J.addIssue({code:x.ZodIssueCode.custom,message:"must provide either email or studentId",path:["email"]}),J.addIssue({code:x.ZodIssueCode.custom,message:"must provide either email or studentId",path:["studentId"]})}),C1=x.object({subject:X,grade:X,courseId:X,orgSourcedId:X.optional()}),A1=x.object({userId:X}),z1=x.object({sourcedId:X.optional(),role:TZ.optional(),beginDate:v.optional(),metadata:x.record(x.string(),x.unknown()).optional()}),P1=x.object({fields:x.string().optional(),limit:x.number().int().positive().optional(),offset:x.number().int().nonnegative().optional(),sort:x.string().optional(),orderBy:x.enum(["asc","desc"]).optional(),filter:x.string().optional(),search:x.string().optional(),roles:x.array(z9).min(1),orgSourcedIds:x.array(X).optional()}),T1=v9.extend({startDate:b2,endDate:b2,timezone:x.string().optional()}),R1=v9.extend({weekDate:b2,timezone:x.string().optional()}),N1=x.object({enrollmentId:X,startDate:b2.optional(),endDate:b2.optional(),timezone:x.string().optional()}),b1=f.object({email:f.email()}),h1=f.object({name:X.optional(),timeback_id:X.optional(),grade:X.optional(),subject:X.optional(),all:f.boolean().optional()}),S1=f.object({student_email:f.email(),timeback_id:X.optional(),subject:X.optional(),grade_rank:f.number().int().min(0).max(12).optional(),assessment_line_item_sourced_id:X.optional(),assessment_result_sourced_id:X.optional()}).superRefine(($,J)=>{let Z=!!$.timeback_id,K=!!$.subject,H=$.grade_rank!==void 0;if(!Z&&!K)J.addIssue({code:f.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["timeback_id"]}),J.addIssue({code:f.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["subject"]});if(H&&!K)J.addIssue({code:f.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]});let W=!!$.assessment_line_item_sourced_id,F=!!$.assessment_result_sourced_id;if(W!==F)J.addIssue({code:f.ZodIssueCode.custom,message:"assessment_line_item_sourced_id and assessment_result_sourced_id must be provided together",path:W?["assessment_result_sourced_id"]:["assessment_line_item_sourced_id"]})}),E1=f.object({student_email:f.email(),assignment_id:f.number().int().positive().optional(),timeback_id:X.optional(),subject:X.optional(),grade_rank:f.number().int().min(0).max(12).optional()}).superRefine(($,J)=>{let Z=$.assignment_id!==void 0,K=!!$.timeback_id,H=!!$.subject&&$.grade_rank!==void 0;if(!Z&&!K&&!H)J.addIssue({code:f.ZodIssueCode.custom,message:"Either assignment_id, timeback_id, or (subject and grade_rank) is required",path:["assignment_id"]});if($.grade_rank!==void 0&&!$.subject)J.addIssue({code:f.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]})}),g=G.enum(["active","tobedeleted"]),y=G.record(G.string(),G.unknown()).nullable().optional(),k=G.object({sourcedId:X,type:G.string().optional(),href:G.string().optional()}).strict(),W2=G.union([q2,v]).transform(($)=>$.includes("T")?$:`${$}T00:00:00Z`),V5=G.object({roleType:G.enum(["primary","secondary"]),role:z9,org:k,userProfile:G.string().optional(),metadata:y,beginDate:W2.optional(),endDate:W2.optional()}).strict(),y1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string"),status:g.optional(),enabledUser:G.boolean(),givenName:X.describe("givenName must be a non-empty string"),familyName:X.describe("familyName must be a non-empty string"),middleName:X.optional(),username:X.optional(),email:G.email(),roles:G.array(V5).min(1,"roles must include at least one role"),userIds:G.array(G.object({type:X,identifier:X}).strict()).optional(),agents:G.array(k).optional(),grades:G.array(n).optional(),identifier:X.optional(),sms:X.optional(),phone:X.optional(),pronouns:X.optional(),password:X.optional(),metadata:y}).strict(),f1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string").optional(),status:g.optional(),title:X.describe("title must be a non-empty string"),org:k,courseCode:X.optional(),subjects:G.array(Z2).optional(),grades:G.array(n).optional(),level:X.optional(),metadata:y}).strict(),g1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string").optional(),status:g.optional(),title:X.describe("title must be a non-empty string"),terms:G.array(k).min(1,"terms must have at least one item"),course:k,org:k,classCode:X.optional(),classType:G.enum(["homeroom","scheduled"]).optional(),location:X.optional(),grades:G.array(n).optional(),subjects:G.array(Z2).optional(),subjectCodes:G.array(X).optional(),periods:G.array(X).optional(),metadata:y}).strict(),y9=G.enum(["true","false"]),d1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string").optional(),status:g.optional(),user:k,class:k,school:k.optional(),role:G.enum(["administrator","proctor","student","teacher"]),primary:y9.optional(),beginDate:q2.optional(),endDate:q2.optional(),metadata:y}).strict(),m1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),status:g,weight:G.number().nullable().optional(),metadata:y}).strict(),l1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),class:k,school:k,category:k,assignDate:W2,dueDate:W2,status:g,description:G.string().optional(),resultValueMin:G.number().nullable().optional(),resultValueMax:G.number().nullable().optional(),scoreScale:k.optional(),metadata:y}).strict(),u1=G.object({sourcedId:X.optional(),lineItem:k,student:k,class:k.optional(),scoreDate:W2,scoreStatus:G.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),score:G.number().nullable().optional(),textScore:G.string().nullable().optional(),status:g,comment:G.string().nullable().optional(),metadata:y}).strict(),c1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),status:g.optional(),type:G.string(),class:k,course:k.nullable().optional(),scoreScaleValue:G.array(G.object({itemValueLHS:X,itemValueRHS:X,value:G.string().optional(),description:G.string().optional()}).strict()),minScore:G.number().optional(),maxScore:G.number().optional(),metadata:y}).strict(),p1=G.object({sourcedId:X.optional(),status:g.optional(),dateLastModified:v.optional(),title:X.describe("title must be a non-empty string"),description:G.string().nullable().optional(),class:k.nullable().optional(),parentAssessmentLineItem:k.nullable().optional(),scoreScale:k.nullable().optional(),resultValueMin:G.number().nullable().optional(),resultValueMax:G.number().nullable().optional(),component:k.nullable().optional(),componentResource:k.nullable().optional(),learningObjectiveSet:G.array(G.object({source:G.string(),learningObjectiveIds:G.array(G.string())})).optional().nullable(),course:k.nullable().optional(),metadata:y}).strict(),k5=G.object({learningObjectiveId:G.string(),score:G.number().optional(),textScore:G.string().optional()}),q5=G.array(G.object({source:G.string(),learningObjectiveResults:G.array(k5)})),a1=G.object({sourcedId:X.optional(),status:g.optional(),dateLastModified:v.optional(),metadata:y,assessmentLineItem:k,student:k,score:G.number().nullable().optional(),textScore:G.string().nullable().optional(),scoreDate:W2,scoreScale:k.nullable().optional(),scorePercentile:G.number().nullable().optional(),scoreStatus:G.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),comment:G.string().nullable().optional(),learningObjectiveSet:q5.nullable().optional(),inProgress:G.string().nullable().optional(),incomplete:G.string().nullable().optional(),late:G.string().nullable().optional(),missing:G.string().nullable().optional()}).strict(),i1=G.object({sourcedId:X.optional(),status:g.optional(),name:X.describe("name must be a non-empty string"),type:PZ,identifier:X.optional(),parent:k.optional(),metadata:y}).strict(),s1=G.object({sourcedId:X.optional(),status:g.optional(),name:X.describe("name must be a non-empty string"),type:G.literal("school").optional(),identifier:X.optional(),parent:k.optional(),metadata:y}).strict(),o1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string"),status:g,title:X.describe("title must be a non-empty string"),startDate:W2,endDate:W2,type:G.enum(["gradingPeriod","semester","schoolYear","term"]),schoolYear:X.describe("schoolYear must be a non-empty string"),org:k,parent:k.optional(),children:G.array(k).optional(),metadata:y}).strict(),n1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),courseComponent:k,resource:k,status:g,metadata:y}).strict(),r1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),course:k,status:g,metadata:y}).strict(),t1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string"),role:G.enum(["student","teacher"]),primary:y9.optional(),beginDate:q2.optional(),endDate:q2.optional(),metadata:y}).strict(),e1=G.object({agentSourcedId:X.describe("agentSourcedId must be a non-empty string")}).strict(),$6=G.object({applicationName:X.describe("applicationName must be a non-empty string"),credentials:G.object({username:X.describe("username must be a non-empty string"),password:X.describe("password must be a non-empty string")})}).strict(),J6=G.object({sourcedId:X.describe("sourcedId must be a non-empty string")}).loose(),Y2=G.object({type:RZ,subject:Z2.nullish(),grades:G.array(n).nullish(),language:G.string().nullish(),xp:G.number().nullish(),url:G.url().nullish(),keywords:G.array(G.string()).nullish(),learningObjectiveSet:SZ.nullish(),lessonType:G.string().nullish()}).passthrough(),C5=Y2.extend({type:G.literal("qti"),subType:NZ,questionType:bZ.optional(),difficulty:hZ.optional()}),A5=Y2.extend({type:G.literal("text"),format:G.string(),author:G.string().optional(),pageCount:G.number().optional()}),z5=Y2.extend({type:G.literal("audio"),duration:G.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),format:G.string(),speaker:G.string().optional()}),P5=Y2.extend({type:G.literal("video"),duration:G.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),captionsAvailable:G.boolean().optional(),format:G.string()}),T5=Y2.extend({type:G.literal("interactive"),launchUrl:G.url().optional(),toolProvider:G.string().optional(),instructionalMethod:G.string().optional(),courseIdOnFail:G.string().nullable().optional(),fail_fast:EZ}),R5=Y2.extend({type:G.literal("visual"),format:G.string(),resolution:G.string().optional()}),N5=Y2.extend({type:G.literal("course-material"),subType:IZ,author:G.string().optional(),format:G.string(),instructionalMethod:G.string().optional()}),I5=Y2.extend({type:G.literal("assessment-bank"),resources:G.array(G.string())}),b5=G.discriminatedUnion("type",[C5,A5,z5,P5,T5,R5,N5,I5]),Z6=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),vendorResourceId:X.describe("vendorResourceId must be a non-empty string"),roles:G.array(G.enum(["primary","secondary"])).optional(),importance:G.enum(["primary","secondary"]).optional(),vendorId:G.string().optional(),applicationId:G.string().optional(),status:g.optional(),metadata:b5.nullable().optional()}).strict(),h5=G.object({url:X.describe("courseStructure.url must be a non-empty string"),skillCode:X.describe("courseStructure.skillCode must be a non-empty string"),lessonCode:X.describe("courseStructure.lessonCode must be a non-empty string"),title:X.describe("courseStructure.title must be a non-empty string"),"unit-title":X.describe("courseStructure.unit-title must be a non-empty string"),status:X.describe("courseStructure.status must be a non-empty string"),xp:G.number()}).loose(),K6=G.object({course:G.object({sourcedId:X.describe("course.sourcedId must be a non-empty string").optional(),title:X.describe("course.title must be a non-empty string"),org:k,status:g,metadata:y}).strict(),courseStructure:G.record(G.string(),h5)}).strict(),S5=G.object({student:k}).loose(),H6=G.array(S5).min(1,"results must have at least one item"),E5=B.enum(["edulastic","mastery-track"]),v5=B.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]),f9=B.array(n),g9=B.record(B.string(),B.unknown()).optional(),d9=B.object({courseId:X,lessonTitle:X.optional(),launchUrl:X.optional(),toolProvider:E5,unitTitle:X.optional(),courseComponentSourcedId:X.optional(),vendorId:X.optional(),description:X.optional(),resourceMetadata:g9.nullable().optional(),grades:f9}),W6=d9.extend({lessonType:B.literal("test-out"),xp:B.number()}),Y6=d9.extend({lessonType:B.literal("placement"),courseIdOnFail:X.nullable().optional(),xp:B.number().optional()}),V9=B.object({courseId:X,lessonType:v5,lessonTitle:X.optional(),unitTitle:X.optional(),courseComponentSourcedId:X.optional(),resourceMetadata:g9.nullable().optional(),xp:B.number().optional(),grades:f9.optional(),courseIdOnFail:X.nullable().optional()}),Q6=B.discriminatedUnion("testType",[V9.extend({testType:B.literal("qti"),qti:B.object({url:B.url(),title:X.optional(),metadata:B.record(B.string(),B.unknown()).optional()})}),V9.extend({testType:B.literal("assessment-bank"),assessmentBank:B.object({resources:B.array(B.object({url:B.url(),title:X.optional(),metadata:B.record(B.string(),B.unknown()).optional()})).min(1)})})]),G6=B.object({student:X,lesson:X}),B6=B.object({student:X,lesson:X}),_6=B.object({courseId:X,userId:X,classId:X.optional()}),k2=B.object({type:B.enum(["component","resource"]),id:X}),y5=B.union([B.object({type:B.literal("set-skipped"),payload:B.object({target:k2,value:B.boolean()})}),B.object({type:B.literal("add-custom-resource"),payload:B.object({resource_id:X,parent_component_id:X,skipped:B.boolean().optional()})}),B.object({type:B.literal("move-item-before"),payload:B.object({target:k2,reference_id:X})}),B.object({type:B.literal("move-item-after"),payload:B.object({target:k2,reference_id:X})}),B.object({type:B.literal("move-item-to-start"),payload:B.object({target:k2})}),B.object({type:B.literal("move-item-to-end"),payload:B.object({target:k2})}),B.object({type:B.literal("change-item-parent"),payload:B.object({target:k2,new_parent_id:X,position:B.enum(["start","end"]).optional()})})]),F6=B.object({operation:y5,reason:X.optional()}),O6=B.object({studentId:X,componentResourceId:X,result:B.object({status:B.enum(["active","tobedeleted"]),metadata:B.record(B.string(),B.unknown()).optional(),score:B.number().optional(),textScore:X.optional(),scoreDate:B.string().datetime(),scorePercentile:B.number().optional(),scoreStatus:zZ,comment:X.optional(),learningObjectiveSet:B.array(B.object({source:X,learningObjectiveResults:B.array(B.object({learningObjectiveId:X,score:B.number().optional(),textScore:X.optional()}))})).optional(),inProgress:X.optional(),incomplete:X.optional(),late:X.optional(),missing:X.optional()})}),x6=B.object({student:X,lesson:X,applicationName:X.optional(),testId:X.optional(),skipCourseEnrollment:B.boolean().optional()}),D6=B.object({student:X,subject:Z2}),w6=B.object({student:X,lesson:X}),U6=B.object({userId:X}),M6=B.object({userId:X,subject:B.enum(["Math","Reading","Language","Science"])}),L6=B.object({student:X,subject:Z2,grade:n,testName:X.optional()}),j6=B.object({testName:X}),f5=B.object({student:X,subject:Z2,grade:n,testName:X.optional()}),V6=B.object({items:B.array(f5)}),k6=B.object({spreadsheetUrl:B.url(),sheet:X}),q6=B.object({student:X,status:B.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:X.optional(),grade:n.optional(),limit:B.number().int().positive().max(3000).optional(),offset:B.number().int().nonnegative().optional()}),C6=B.object({student:X.optional(),status:B.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:X.optional(),grade:n.optional(),limit:B.number().int().positive().max(3000).optional(),offset:B.number().int().nonnegative().optional()}),A6=B.object({student:X,question:X,response:B.union([X,B.array(X)]).optional(),responses:B.record(B.string(),B.union([X,B.array(X)])).optional(),lesson:X,rendererOutcomes:B.object({score:B.number(),maxScore:B.number().min(0),isCorrect:B.boolean()}).optional(),playerState:B.string().optional()}).refine(($)=>$.response!==void 0||$.responses!==void 0,{message:"Either 'response' or 'responses' must be provided",path:["response","responses"]}).transform(($)=>{if($.response!==void 0&&$.responses===void 0)return{...$,responses:{RESPONSE:$.response}};return $}),z6=B.object({student:X,lesson:X,attempt:B.number().int().positive().optional()}),P6=B.object({student:X,lesson:X}),T6=B.object({student:X,lesson:X}),R6=B.object({student:X,course:X}),N6=B.object({student:X,lesson:X,applicationName:X.optional()}),I6=B.object({student:X,subject:Z2}),b6=B.object({oneRosterSourcedId:X,subject:X}),h6=B.object({courseIds:B.array(X).min(1),rendererId:X,rendererUrl:B.url(),rendererVersion:X.optional(),suppressFeedback:B.boolean().optional(),suppressCorrectResponse:B.boolean().optional()}),S6=B.object({status:B.enum(["active","tobedeleted"]).optional()}),m9=Q.enum(["choice","text-entry","extended-text","inline-choice","match","order","associate","select-point","graphic-order","graphic-associate","graphic-gap-match","hotspot","hottext","slider","drawing","media","upload"]),b8=Q.enum(["single","multiple","ordered","record"]),h8=Q.enum(["identifier","boolean","integer","float","string","point","pair","directedPair","duration","file","uri"]),g5=Q.enum(["easy","medium","hard"]),d5=Q.enum(["linear","nonlinear"]),m5=Q.enum(["individual","simultaneous"]),S8=Q.enum(["show","hide"]),l9=Q.enum(["test","item","stimulus"]),v6=Q.enum(["QUESTION","LESSON"]),l5=Q.object({value:Q.array(Q.string())}).strict(),u9=Q.object({identifier:X,cardinality:b8,baseType:h8.optional(),correctResponse:l5}).strict(),c9=Q.object({identifier:X,cardinality:b8,baseType:h8.optional()}).strict(),p9=Q.object({identifier:X,cardinality:b8.optional(),baseType:h8,normalMaximum:Q.number().optional(),normalMinimum:Q.number().optional(),defaultValue:Q.object({value:Q.unknown().optional()}).strict().optional()}).strict(),u5=Q.object({outcomeIdentifier:X,variableIdentifier:X}).strict(),a9=Q.object({templateType:Q.enum(["match_correct","map_response"]),responseDeclarationIdentifier:X,outcomeIdentifier:X,correctResponseIdentifier:X,incorrectResponseIdentifier:X,inlineFeedback:u5.optional()}).strict(),c5=Q.object({source:X,learningObjectiveIds:Q.array(Q.string())}).strict(),E8=Q.object({subject:Q.string().optional(),grade:n.optional(),difficulty:g5.optional(),learningObjectiveSet:Q.array(c5).optional()}).loose(),i9=Q.object({outcomeIdentifier:X,identifier:X,showHide:S8,content:Q.string(),title:Q.string()}).strict(),s9=Q.object({outcomeIdentifier:X,identifier:X,showHide:S8,content:Q.string(),class:Q.array(Q.string())}).strict(),o9=Q.object({outcomeIdentifier:X,identifier:X,showHide:S8,content:Q.string(),class:Q.array(Q.string())}).strict(),n9=Q.object({href:X,type:X}).strict(),r9=Q.object({id:X,support:Q.string(),content:Q.string()}).strict(),y6=Q.object({page:Q.number().int().positive().optional(),limit:Q.number().int().positive().optional(),sort:Q.string().optional(),order:Q.enum(["asc","desc"]).optional()}).strict(),p5=Q.object({format:Q.string().pipe(Q.literal("xml")),xml:X,metadata:E8.optional()}).strict(),a5=Q.object({identifier:X,title:X,type:m9,qtiVersion:Q.string().optional(),timeDependent:Q.boolean().optional(),adaptive:Q.boolean().optional(),responseDeclarations:Q.array(u9).optional(),outcomeDeclarations:Q.array(c9).optional(),responseProcessing:a9.optional(),metadata:E8.optional(),modalFeedback:Q.array(i9).optional(),feedbackInline:Q.array(s9).optional(),feedbackBlock:Q.array(o9).optional()}).strict(),f6=Q.union([p5,a5]),g6=Q.object({identifier:X.optional(),title:X,type:m9,qtiVersion:Q.string().optional(),timeDependent:Q.boolean().optional(),adaptive:Q.boolean().optional(),responseDeclarations:Q.array(u9).optional(),outcomeDeclarations:Q.array(c9).optional(),responseProcessing:a9.optional(),metadata:E8.optional(),modalFeedback:Q.array(i9).optional(),feedbackInline:Q.array(s9).optional(),feedbackBlock:Q.array(o9).optional(),rawXml:Q.string(),content:Q.record(Q.string(),Q.unknown())}).strict(),d6=Q.object({identifier:X,response:Q.union([Q.string(),Q.array(Q.string())])}).strict(),t9=Q.object({identifier:X,href:X,sequence:Q.number().int().positive().optional()}).strict(),i5=Q.object({identifier:X,title:X,visible:Q.boolean(),required:Q.boolean().optional(),fixed:Q.boolean().optional(),sequence:Q.number().int().positive(),"qti-assessment-item-ref":Q.array(t9).optional()}).strict(),e9=Q.object({identifier:X,navigationMode:Q.string().pipe(d5),submissionMode:Q.string().pipe(m5),"qti-assessment-section":Q.array(i5)}).strict(),m6=Q.object({items:Q.array(t9).min(1)}).strict(),l6=Q.object({metadata:Q.record(Q.string(),Q.unknown()).optional()}).strict(),u6=Q.object({identifier:X,title:X,qtiVersion:Q.string().optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),timeLimit:Q.number().optional(),maxAttempts:Q.number().optional(),toolsEnabled:Q.record(Q.string(),Q.boolean()).optional(),metadata:Q.record(Q.string(),Q.unknown()).optional(),"qti-test-part":Q.array(e9),"qti-outcome-declaration":Q.array(p9).optional()}).strict(),c6=Q.object({identifier:X.optional(),title:X,qtiVersion:Q.string().optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),timeLimit:Q.number().optional(),maxAttempts:Q.number().optional(),toolsEnabled:Q.record(Q.string(),Q.boolean()).optional(),metadata:Q.record(Q.string(),Q.unknown()).optional(),"qti-test-part":Q.array(e9),"qti-outcome-declaration":Q.array(p9).optional()}).strict(),p6=Q.object({identifier:X,title:X,label:Q.string().optional(),language:Q.string().optional(),stylesheet:n9.optional(),content:Q.string(),catalogInfo:Q.array(r9).optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),metadata:Q.record(Q.string(),Q.unknown()).optional()}).strict(),a6=Q.object({identifier:X.optional(),title:X,label:Q.string().optional(),language:Q.string().optional(),stylesheet:n9.optional(),content:Q.string(),catalogInfo:Q.array(r9).optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),metadata:Q.record(Q.string(),Q.unknown()).optional()}).strict(),i6=Q.object({xml:Q.string().optional(),schema:l9,entityId:Q.string().optional()}).strict(),s6=Q.object({xml:Q.array(Q.string()),schema:l9,entityIds:Q.array(Q.string())}).strict(),o6=Q.object({questionId:Q.string().optional(),userId:X,feedback:X,lessonId:X,humanApproved:Q.boolean().optional()}).strict(),s5=C2.enum(["creator_only","same_org","all_orgs"]),o5=C2.string().uuid(),r6=C2.email(),t6=C2.object({sql:X}),e6=C2.object({endpointName:X,sql:X,authMode:s5,description:X.optional()}),$7=C2.object({endpointId:o5});class $${transport;eventTransformer;constructor($,J){this.transport=$,this.eventTransformer=J?.eventTransformer}send($,J){o(pZ,{sensor:$,events:J},"send events");let Z={sensor:$,sendTime:new Date().toISOString(),dataVersion:"http://purl.imsglobal.org/ctx/caliper/v1p2",data:J};return this.sendEnvelope(Z)}async sendEnvelope($){o(w9,$,"caliper envelope"),S.debug("Sending Caliper envelope",{sensor:$.sensor,eventCount:$.data.length});let J=this.eventTransformer?this.eventTransformer.transformEnvelope($):$,K=(await this.transport.request(this.transport.paths.send,{method:"POST",body:J}))?.jobId;return S.debug("Events sent",{jobId:K??"(none)"}),{jobId:K}}async validate($){let J=this.transport.paths.validate;if(!J)throw Error("validate() is not supported on this platform");o(w9,$,"caliper envelope"),S.debug("Validating Caliper envelope",{sensor:$.sensor,eventCount:$.data.length});let Z=await this.transport.request(J,{method:"POST",body:$});return S.debug("Validation complete",{status:Z.status}),Z}async list($={}){let J=this.transport.paths.list;if(!J)throw Error("list() is not supported on this platform");o(U9,$,"list events params"),S.debug("Listing events",{params:$});let Z={limit:$.limit??100,offset:$.offset??0};if($.sensor)Z.sensor=$.sensor;if($.startDate)Z.startDate=$.startDate;if($.endDate)Z.endDate=$.endDate;if($.actorId)Z.actorId=$.actorId;if($.actorEmail)Z.actorEmail=$.actorEmail;let K=await this.transport.request(J,{params:Z});return{events:K.events??[],pagination:K.pagination}}stream($={}){let J=this.transport.paths.list;if(!J)throw Error("stream() is not supported on this platform");let{max:Z,...K}=$;o(U9,K,"list events params"),P8($),S.debug("Streaming events",{params:$});let H={};if(K.limit!==void 0)H.limit=K.limit;if(K.offset!==void 0)H.offset=K.offset;if(K.sensor)H.sensor=K.sensor;if(K.startDate)H.startDate=K.startDate;if(K.endDate)H.endDate=K.endDate;if(K.actorId)H.actorId=K.actorId;if(K.actorEmail)H.actorEmail=K.actorEmail;return new q9(this.transport,J,{...H,max:Z})}async get($){let J=this.transport.paths.get;if(!J)throw Error("get() is not supported on this platform");c2($,"externalId"),S.debug("Getting event",{externalId:$});let Z=J.replace("{id}",encodeURIComponent($)),K=await this.transport.request(Z);if(!K.event)throw Error(`Event not found: ${$}`);return K.event}sendActivity($,J){o(mZ,J,"activity event");let Z=T8(J);return S.debug("Sending ActivityCompletedEvent",{eventId:Z.id,actor:J.actor.email,subject:J.object.subject,metricsCount:J.metrics.length}),this.send($,[Z])}sendTimeSpent($,J){o(lZ,J,"time spent event");let Z=R8(J);return S.debug("Sending TimeSpentEvent",{eventId:Z.id,actor:J.actor.email,subject:J.object.subject,metricsCount:J.metrics.length}),this.send($,[Z])}sendQuestionSeen($,J){o(sZ,J,"question seen event");let Z=OZ(J);return S.debug("Sending AssessmentItemEvent.Started",{eventId:Z.id,actor:J.actor,object:J.object.id}),this.send($,[Z])}sendQuestionAnswered($,J){o(oZ,J,"question answered event");let Z=xZ(J);return S.debug("Sending AssessmentItemEvent.Completed",{eventId:Z.id,actor:J.actor,object:J.object.id}),this.send($,[Z])}sendQuestionGraded($,J){o(nZ,J,"question graded event");let Z=DZ(J);return S.debug("Sending GradeEvent.Graded",{eventId:Z.id,actor:J.actor,object:J.object,scoreGiven:J.generated.scoreGiven}),this.send($,[Z])}}class J${transport;constructor($){this.transport=$}async getStatus($){let J=this.transport.paths.jobStatus;if(!J)throw Error("getStatus() is not supported on this platform");c2($,"jobId"),S.debug("Getting job status",{jobId:$});let Z=J.replace("{id}",encodeURIComponent($));return(await this.transport.request(Z)).job}async waitForCompletion($,J={}){c2($,"jobId"),n5(J);let{timeoutMs:Z=30000,pollIntervalMs:K=1000}=J,H=Date.now();S.debug("Waiting for job completion",{jobId:$,timeoutMs:Z,pollIntervalMs:K});while(Date.now()-H<Z){let W=await this.getStatus($);if(W.state==="completed")return S.info("Job completed",{jobId:$}),W;if(W.state==="failed")throw S.error("Job failed",{jobId:$}),Error(`Job ${$} failed`);await new Promise((F)=>{setTimeout(F,K)})}throw Error(`Job ${$} timed out after ${Z}ms`)}}function n5($){if(!$)return;let J=[];if($.timeoutMs!==void 0){if(!Number.isInteger($.timeoutMs)||$.timeoutMs<=0)J.push({path:"timeoutMs",message:"Must be a positive integer"})}if($.pollIntervalMs!==void 0){if(!Number.isInteger($.pollIntervalMs)||$.pollIntervalMs<=0)J.push({path:"pollIntervalMs",message:"Must be a positive integer"})}if(J.length>0)throw R2("Invalid polling options",J)}function r5($=u2){return class{transport;_provider;events;jobs;constructor(Z={}){let K=CZ(Z,$),H;if(K.mode==="transport")this.transport=K.transport,S.info("Client initialized with custom transport");else{let{provider:W}=K,{baseUrl:F,paths:_}=W.getEndpointWithPaths("caliper"),O=W.getTokenProvider("caliper");if(!O)throw Error("Caliper API requires authentication");if(this._provider=W,this.transport=new k9({baseUrl:F,tokenProvider:O,timeout:W.timeout,paths:_}),W.platform===X9)H=new C9;S.info("Client initialized",{platform:W.platform,env:W.env,baseUrl:F})}this.events=new $$(this.transport,{eventTransformer:H}),this.jobs=new J$(this.transport)}getTransport(){return this.transport}checkAuth(){if(!this._provider)throw Error("Cannot check auth: client initialized with custom transport");return this._provider.checkAuth()}}}var J7=r5();class K2 extends Error{course;env;constructor($,J){let Z=$.grade===void 0?$.courseCode??$.subject:`${$.subject} grade ${$.grade}`;super(`Course "${Z}" is missing a synced ID for ${J}. Run \`timeback resources push\` first.`);this.name="MissingSyncedCourseIdError",this.course=$,this.env=J}}class i2 extends Error{sensor;constructor($){super(`Invalid sensor URL "${$}". Sensor must be a valid absolute URL (e.g., "https://sensor.example.com") to support slug-based activity IDs.`);this.name="InvalidSensorUrlError",this.sensor=$}}var Z$="/ims/oneroster/rostering/v1p2";function K$($,J){return`${$.replace(/\/+$/,"")}/${J.replace(/^\/+/,"")}`}function t5($,J){return K$($,`${Z$}/courses/${J}`)}function e5($,J){return K$($,`${Z$}/users/${J}`)}function H$($,J){let Z=$.ids?.[J];if(!Z)throw new K2($,J);return Z}function $0($,J,Z){let K=H$(J,Z);return t5($,K)}function J0($){if($.courseCode)return $.courseCode;if($.grade!==void 0)return`${$.subject} G${String($.grade)}`;return $.subject}function v8($,J,Z){let K;try{K=new URL($)}catch{throw new i2($)}let H="grade"in J?`${J.subject}/g${String(J.grade)}`:J.code,W=K.pathname.replace(/\/+$/,"");return K.pathname=`${W}/activities/${H}/${encodeURIComponent(Z)}`,K.toString()}function X$($,J,Z,K,H,W,F){return{id:v8(H,$.course,$.id),type:"TimebackActivityContext",subject:J.subject,app:{name:Z},activity:{name:$.name},course:{id:$0(W,J,K),name:J0(J)},process:F??!0}}function Z0($){let J=[];if($.totalQuestions!==void 0)J.push({type:"totalQuestions",value:$.totalQuestions});if($.correctQuestions!==void 0)J.push({type:"correctQuestions",value:$.correctQuestions});if($.xpEarned!==void 0)J.push({type:"xpEarned",value:$.xpEarned});if($.masteredUnits!==void 0)J.push({type:"masteredUnits",value:$.masteredUnits});return J}function K0($,J){let Z=[{type:"active",value:Math.max(0,$)/1000}];if(J>0)Z.push({type:"inactive",value:Math.max(0,J)/1000});return Z}function H0($){return $===void 0?void 0:{pctCompleteApp:$}}function W$($,J){return{courseId:H$($,J)}}function Y$($){if(!$)return;return`urn:uuid:${$}`}function Q$($,J,Z){return{id:e5($,J),type:"TimebackUser",email:Z}}function G$($){let{sensor:J,timebackId:Z,email:K,payload:H,process:W,course:F,appName:_,apiEnv:O,onerosterBaseUrl:w,attempt:j,runId:A}=$,C=Q$(w,Z,K),q=X$(H,F,_,O,J,w,W??H.process),z=Z0(H.metrics),N=H0(H.pctComplete),I=Y$(A),r=W$(F,O),H2=T8({actor:C,object:q,metrics:z,eventTime:H.endedAt,generatedExtensions:N,extensions:r,attempt:j,session:I});return{sensor:J,actor:C,object:q,event:H2,payload:H,course:F,appName:_,apiEnv:O,email:K,timebackId:Z}}function s2($){let{sensor:J,timebackId:Z,email:K,payload:H,course:W,appName:F,apiEnv:_,onerosterBaseUrl:O,runId:w}=$,j=Q$(O,Z,K),A=X$(H,W,F,_,J,O),C=K0(H.elapsedMs,H.pausedMs),q=W$(W,_),z=Y$(w),N=R8({actor:j,object:A,metrics:C,eventTime:H.endedAt,extensions:q,session:z});return{sensor:J,actor:j,object:A,event:N,payload:{id:H.id,name:H.name,course:H.course,startedAt:H.startedAt,endedAt:H.endedAt,elapsedMs:H.elapsedMs,pausedMs:H.pausedMs},course:W,appName:F,apiEnv:_,email:K,timebackId:Z,runId:w}}import*as h from"zod";import*as h2 from"zod";var X0=h2.object({subject:B$,grade:_$}),W0=h2.object({code:E}),w2=h2.union([X0,W0]);class Q2 extends Error{code;selector;count;constructor($,J,Z){super($);this.code=$,this.selector=J,this.count=Z}get selectorDescription(){if("grade"in this.selector)return`${this.selector.subject} grade ${this.selector.grade}`;return`code "${this.selector.code}"`}}function U2($,J){let Z;if("grade"in J)Z=$.filter((K)=>K.subject===J.subject&&K.grade===J.grade);else Z=$.filter((K)=>K.courseCode===J.code);if(Z.length===0)throw new Q2("unknown_course",J);if(Z.length>1)throw new Q2("ambiguous_course",J,Z.length);return Z[0]}var A2=R("handlers:activity:schema"),Y0=h.object({totalQuestions:h.number().int().nonnegative().optional(),correctQuestions:h.number().int().nonnegative().optional(),xpEarned:h.number(),masteredUnits:h.number().int().nonnegative().optional()}).superRefine(n2);function Q0($){return Math.min(100,Math.max(0,$))}function o2($){if("grade"in $)return`${$.subject} grade ${$.grade}`;return`code "${$.code}"`}var G0=h.object({id:E,name:E,course:w2,runId:h.string().uuid(),startedAt:h.iso.datetime(),endedAt:h.iso.datetime(),elapsedMs:h.number().int().nonnegative(),pausedMs:h.number().int().nonnegative()});function F$($,J,Z){let K=G0.safeParse($);if(!K.success)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid payload",400,{details:K.error.flatten()})};let H=K.data,W;try{W=U2(J.courses,H.course)}catch(_){if(_ instanceof Q2){let O=o2(H.course);if(_.code==="unknown_course")return A2.warn("Unknown course selector",{selector:H.course}),{ok:!1,response:M("UNKNOWN_COURSE",`Unknown course: ${O}`,400)};return A2.error("Ambiguous course selector",{selector:H.course}),{ok:!1,response:M("AMBIGUOUS_COURSE_SELECTOR","Ambiguous course selector in timeback.config.json",500)}}throw _}let F=S2(J,W,Z);if(!F){let _=o2(H.course);return A2.error("Missing sensor for course",{selector:H.course}),{ok:!1,response:M("MISSING_SENSOR",`Course "${_}" has no sensor configured.`,500)}}return{ok:!0,payload:H,course:W,sensor:F}}var B0=h.object({id:E,name:E,course:w2,process:h.boolean().optional(),runId:h.string().uuid(),endedAt:h.iso.datetime(),metrics:Y0,pctComplete:h.number().optional().transform(($)=>$===void 0?void 0:Q0($))});function O$($,J,Z){let K=B0.safeParse($);if(!K.success)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid payload",400,{details:K.error.flatten()})};let H=K.data,W;try{W=U2(J.courses,H.course)}catch(_){if(_ instanceof Q2){let O=o2(H.course);if(_.code==="unknown_course")return A2.warn("Unknown course selector",{selector:H.course}),{ok:!1,response:M("UNKNOWN_COURSE",`Unknown course: ${O}`,400)};return A2.error("Ambiguous course selector",{selector:H.course}),{ok:!1,response:M("AMBIGUOUS_COURSE_SELECTOR","Ambiguous course selector in timeback.config.json",500)}}throw _}let F=S2(J,W,Z);if(!F){let _=o2(H.course);return A2.error("Missing sensor for course",{selector:H.course}),{ok:!1,response:M("MISSING_SENSOR",`Course "${_}" has no sensor configured.`,500)}}return{ok:!0,payload:H,course:W,sensor:F}}import{getServiceUrlsForEnv as j$}from"@timeback/core";var y8=R("handlers:activity:attempts");async function x$($,J){let Z=[$,J].join("_");return`caliper_${await E2(Z)}`}function _0($,J){return $.find((Z)=>Z.scoreDate===J)}function F0($){let J=0;for(let Z of $){let H=Z.metadata?.attempt;if(typeof H==="number"&&H>J)J=H}return J}function O0($){let J=$.metadata;return typeof J?.attempt==="number"&&J.attempt>=1?J.attempt:1}async function D$($,J,Z,K){let H;try{H=await $.oneroster.assessmentResults.listAll({where:{status:"active","assessmentLineItem.sourcedId":J,"student.sourcedId":Z}})}catch{return y8.debug("No existing results found (line item may not exist yet)",{lineItemId:J}),1}if(H.length===0)return 1;let W=_0(H,K);if(W){let O=O0(W);return y8.debug("Retry detected, reusing attempt number",{lineItemId:J,timebackId:Z,endedAt:K,attempt:O}),O}let F=F0(H),_=F+1;return y8.debug("New attempt computed",{lineItemId:J,timebackId:Z,endedAt:K,maxAttempt:F,nextAttempt:_}),_}var w$=R("handlers:activity:completion");async function M$($){let{client:J,courseId:Z,timebackId:K,pctComplete:H,appName:W}=$;if(H!==100)return;let F=U$(Z),_=`timeback_sdk_${await E2(`mastery-completion_${Z}`)}`,O=`timeback_sdk_${await E2(`mastery-completion_${Z}_${K}`)}`;try{let w=!1;try{await J.oneroster.assessmentLineItems(_).get(),w=!0}catch{}if(!w)await J.oneroster.assessmentLineItems.create({sourcedId:_,title:`${W}: Complete`,status:"active",course:{sourcedId:F.course},componentResource:{sourcedId:F.componentResource},resultValueMin:0,resultValueMax:100,metadata:{appName:W}});let j=new Date().toISOString();await J.oneroster.assessmentResults.upsert(O,{status:"active",assessmentLineItem:{sourcedId:_},student:{sourcedId:K},score:100,scoreDate:j,scoreStatus:"fully graded",metadata:{isMasteryCompletion:!0,completedAt:j,appName:W}}),w$.debug("Created mastery completion entry",{courseId:Z,timebackId:K,lineItemId:_,resultId:O})}catch(w){let j=w instanceof Error?w.message:"Unknown error";w$.error("Failed to create mastery completion entry",{courseId:Z,timebackId:K,lineItemId:_,error:j})}}import{aggregateActivityMetrics as x0}from"@timeback/core/utils";var z2=R("handlers:activity:progress");function D0($,J){let Z=u(J),K=$.overrides?.[Z]?.metadata?.metrics,H=$.metadata?.metrics;return K?.totalLessons??H?.totalLessons}function w0($,J){let Z=$/J*100;return Math.min(100,Math.max(0,Math.round(Z)))}async function L$($){let{client:J,courseId:Z,timebackId:K,payload:H,course:W,env:F}=$;if(H.pctComplete!==void 0)return;let _=H.metrics.masteredUnits;if(typeof _!=="number"||_<=0)return;let O=D0(W,F);if(!O||O<=0){z2.debug("Skipping progress computation: totalLessons not configured",{courseId:Z});return}let w;try{w=(await J.edubridge.enrollments.list({userId:K})).find((N)=>N.course.id===Z)?.id}catch(z){let N=z instanceof Error?z.message:"Unknown error";z2.warn("Failed to fetch enrollments for progress computation",{courseId:Z,timebackId:K,error:N});return}if(!w){z2.warn("Skipping progress computation: enrollment not found for student/course",{courseId:Z,timebackId:K});return}let j=0;try{let z=await J.edubridge.analytics.getEnrollmentFacts({enrollmentId:w});j=x0(z).masteredUnits}catch(z){let N=z instanceof Error?z.message:"Unknown error";z2.warn("Failed to fetch enrollment facts for progress computation",{courseId:Z,timebackId:K,enrollmentId:w,error:N});return}let A=!0;try{if((await J.edubridge.analytics.getWeeklyFacts({studentId:K,weekDate:H.endedAt})).some((I)=>{if(I.activityId!==H.id)return!1;if(I.enrollmentId&&I.enrollmentId===w)return!0;if(I.courseId&&I.courseId===Z)return!0;return!1}))A=!1}catch(z){let N=z instanceof Error?z.message:"Unknown error";z2.warn("Failed to fetch weekly facts for retry-safe progress computation",{courseId:Z,timebackId:K,enrollmentId:w,activityId:H.id,error:N}),A=!1}let C=j+(A?_:0),q=w0(C,O);return z2.debug("Computed pctComplete",{courseId:Z,timebackId:K,enrollmentId:w,historicalMasteredUnits:j,currentMasteredUnits:_,shouldIncludeCurrentMasteredUnits:A,totalMastered:C,totalLessons:O,pctComplete:q}),{pctComplete:q}}var f8=R("handlers:activity:submit"),U0={computeProgress:L$,maybeWriteCompletionEntry:M$};function V$($,J){return $.timebackId??G2({email:$.email,client:J})}async function r2($,J,Z=U0){let K=u($.env),{userInfo:H,payload:W,course:F,sensor:_,preview:O=!1,runId:w}=J,j=F.ids?.[K];if(!j)throw new K2(F,K);let A=$.getClient(),C=await V$(H,A),q=W;if(W.pctComplete===void 0){let f2=await Z.computeProgress({client:A,courseId:j,timebackId:C,payload:W,course:F,env:$.env});if(f2)q={...W,pctComplete:f2.pctComplete}}let z;if(!O){let f2=v8(_,q.course,q.id),xJ=await x$(f2,j);z=await D$(A,xJ,C,q.endedAt)}let I=j$(K).oneroster,r=G$({sensor:_,timebackId:C,email:H.email,payload:q,process:q.process,course:F,appName:$.appConfig.name,apiEnv:K,onerosterBaseUrl:I,attempt:z,runId:w}),H2=$.hooks?.beforeActivitySend,y2=H2?await H2(r):r,p=y2??r;if(O||y2===null)return{success:!0,preview:!0,sensor:p.sensor,actor:p.actor,object:p.object,event:p.event};return await A.caliper.events.send(p.sensor,[p.event]),await Z.maybeWriteCompletionEntry({client:A,courseId:j,timebackId:p.timebackId,pctComplete:p.payload.pctComplete,appName:p.appName}),f8.debug("Recorded completion",{courseSelector:W.course,activityId:W.id}),{success:!0}}async function k$($,J){let Z=u($.env),{userInfo:K,payload:H,course:W,sensor:F,runId:_}=J;if(!W.ids?.[Z])throw new K2(W,Z);let w=$.getClient(),j=await V$(K,w),C=j$(Z).oneroster,q=s2({sensor:F,timebackId:j,email:K.email,payload:H,course:W,appName:$.appConfig.name,apiEnv:Z,onerosterBaseUrl:C,runId:_}),z=$.hooks?.beforeTimeSpentSend,N=z?await z(q):q,I=N??q;if(N===null){f8.debug("Hook skipped time-spent send",{activityId:H.id});return}await w.caliper.events.send(I.sensor,[I.event]),f8.debug("Sent time-spent event",{activityId:H.id,elapsedMs:H.elapsedMs})}var v2=R("handlers:activity:submit");async function P2($,J){if($.mode==="custom"){let K=await $.getEmail(J);return K?{email:K}:void 0}let Z=await $.getUser(J);return Z?{email:Z.email,timebackId:Z.id}:void 0}function t2($){return async(J)=>{let Z=await P2($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=O$(await J.json(),$.appConfig,$.env);if(!K.ok)return K.response;let{payload:H,course:W,sensor:F}=K,_={id:H.id,name:H.name,course:H.course,process:H.process,endedAt:H.endedAt,metrics:H.metrics,pctComplete:H.pctComplete};try{if((await r2({env:$.env,api:$.api,appConfig:$.appConfig,getClient:$.getClient,hooks:$.hooks},{userInfo:Z,payload:_,course:W,sensor:F,preview:!1,runId:H.runId})).preview)return P({preview:!0});return v2.debug("Submitted activity",{runId:H.runId,activityId:H.id}),new Response(null,{status:204})}catch(O){if(O instanceof d)return v2.warn("Failed to resolve Timeback user",{code:O.code}),M("USER_RESOLUTION_FAILED","Unable to resolve Timeback identity",B2(O));if(O instanceof K2)return v2.warn("Course not synced",{course:O.course,env:O.env}),M("MISSING_SYNCED_COURSE_ID",O.message,503);if(O instanceof i2)return v2.error("Invalid sensor URL",{sensor:O.sensor}),M("INVALID_SENSOR_URL",O.message,500);let w=O instanceof Error?O.message:"Unknown error";return v2.error("Failed to submit activity",{error:w}),M("INTERNAL_ERROR",w,502)}}}var T2=R("handlers:activity:heartbeat"),e2=new Map,L0=300000;function j0(){let $=Date.now();for(let[J,Z]of e2)if($-Z>L0)e2.delete(J)}function V0($){return j0(),e2.has($)}function q$($){e2.set($,Date.now())}function $8($){return async(J)=>{let Z=await P2($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=F$(await J.json(),$.appConfig,$.env);if(!K.ok)return K.response;let{payload:H,course:W,sensor:F}=K,_=new Date(H.startedAt).getTime(),O=`${H.runId}:${_}`;if(V0(O))return T2.debug("Duplicate heartbeat, skipping",{runId:H.runId,windowKey:O}),P({duplicate:!0});let w=u($.env);if(!W.ids?.[w]){let C=new K2(W,w);return T2.warn("Course not synced",{course:H.course,env:w}),M("MISSING_SYNCED_COURSE_ID",C.message,503)}let A=$.getClient();try{let C=Z.timebackId??await G2({email:Z.email,client:A}),z=M0(w).oneroster,N=s2({sensor:F,timebackId:C,email:Z.email,payload:H,course:W,appName:$.appConfig.name,apiEnv:w,onerosterBaseUrl:z,runId:H.runId}),I=$.hooks?.beforeTimeSpentSend,r=I?await I(N):N,H2=r??N;if(r===null)return q$(O),T2.debug("Hook skipped heartbeat send",{runId:H.runId}),new Response(null,{status:204});return await A.caliper.events.send(H2.sensor,[H2.event]),q$(O),T2.debug("Sent heartbeat",{runId:H.runId,activityId:H.id,elapsedMs:H.elapsedMs}),new Response(null,{status:204})}catch(C){if(C instanceof d)return T2.warn("Failed to resolve Timeback user",{code:C.code}),M("USER_RESOLUTION_FAILED","Unable to resolve Timeback identity",B2(C));let q=C instanceof Error?C.message:"Unknown error";return T2.error("Failed to send heartbeat",{error:q}),M("INTERNAL_ERROR",q,502)}}}async function h$($,J,Z){if(Z.mode!=="sso")return M2.warn("SSO not configured"),P({error:"SSO not configured"},400);return await N$({req:$,env:J,clientId:Z.clientId,issuer:Z.issuer,redirectUri:Z.redirectUri,buildState:Z.buildState})}async function k0($,J,Z,K,H,W,F){try{let _=W.issuer??C$(H),O=b$(J,W.redirectUri);M2.debug("Exchanging auth code for tokens",{issuer:_,clientId:W.clientId});let w=await A$({issuer:_,clientId:W.clientId,clientSecret:W.clientSecret,code:$,redirectUri:O}),j=await z$({issuer:_,accessToken:w.access_token}),A=typeof j.identities==="string"?JSON.parse(j.identities):j.identities;M2.debug("SSO completed, resolving Timeback user",{user:{...j,identities:A}});let C=await _2({env:H,apiCredentials:F.credentials,userInfo:j,client:F.getClient()});M2.debug("Timeback user resolved",{timebackId:C.id});let q={user:C,idp:{tokens:w,userInfo:j},state:Z,req:K,redirect:J8,json:P};return W.onCallbackSuccess(q)}catch(_){let O=_ instanceof Error?_:Error("Unknown error"),w=_ instanceof d?_.code:"token_exchange_failed";if(M2.error("SSO callback failed",{error:O.message,errorCode:w}),W.onCallbackError)return W.onCallbackError(P$(O,w,Z,K));if(_ instanceof d)return P({error:O.message},B2(_));return P({error:O.message},500)}}async function S$($,J,Z,K){if(Z.mode!=="sso")return M2.warn("SSO not configured"),P({error:"SSO not configured"},400);let{url:H,code:W,errorParam:F,state:_}=I$($);if(F)return T$(F,H,_,$,Z.onCallbackError);if(!W)return R$(_,$,Z.onCallbackError);return await k0(W,H,_,$,J,Z,K)}function Z8($){let{env:J,identity:Z}=$;return(K)=>h$(K,J,Z)}function K8($){let{env:J,identity:Z,api:K}=$;return(H)=>S$(H,J,Z,K)}function H8(){return()=>J8("/")}var E$=($)=>{return async(J)=>{return await $.getClient().powerpath.assessments.getAssessmentProgress({student:J.student,lesson:J.lesson,attempt:J.attempt})}};var v$=($)=>{return async(J)=>{return(await $.getClient().powerpath.assessments.getAttempts({student:J.student,lesson:J.lesson})).attempts.map((K)=>({attempt:K.attempt??void 0,score:K.score,startedAt:K.startedAt??void 0,completedAt:K.completedAt??void 0,scoreStatus:K.scoreStatus}))}};var y$=($)=>{return async(J)=>{let Z=$.getClient().powerpath.assessments,K=await Z.getAssessmentProgress({student:J.student,lesson:J.lesson}),H;if(K.lessonType!=="powerpath-100"&&K.finalized!==!0){try{H=await Z.finalStudentAssessmentResponse({student:J.student,lesson:J.lesson})}catch{}K=await Z.getAssessmentProgress({student:J.student,lesson:J.lesson})}let W=K.lessonType==="powerpath-100"?!0:K.finalized===!0;return{...H??{},score:K.score??0,totalQuestions:K.totalQuestions,correctQuestions:K.correctQuestions,accuracy:K.accuracy,finalized:W}}};function f$($){let J=$.metadata?.questionCount;return typeof J==="number"?J:void 0}function X8($){return{id:$.id,title:$.title,difficulty:$.difficulty,content:$.content?{rawXml:$.content.rawXml}:void 0,index:$.index,url:$.url,humanApproved:$.humanApproved,response:$.response,responses:$.responses,correct:$.correct,result:$.result,resultId:$.resultId,learningObjectives:$.learningObjectives}}function g$($,J){if(!J)return{lessonId:$,lessonType:"quiz",score:0,seenQuestions:0,finalized:!1};return{lessonId:$,lessonType:J.lessonType,attempt:J.attempt,score:J.score??0,questionCount:J.totalQuestions,seenQuestions:J.lessonType==="powerpath-100"?J.seenQuestions.length:0,finalized:J.lessonType==="powerpath-100"?!1:J.finalized}}function d$($){let J=$.questions,Z=J.filter((K)=>K.response!==void 0).map((K)=>K.id);return{questions:J.map(X8),answeredIds:Z,score:$.score??0,finalized:$.finalized,complete:$.finalized}}function q0($){if($.lessonType==="powerpath-100")return $.responseResult.isCorrect;return!1}function C0($){if($.lessonType==="powerpath-100")return $.powerpathScore;return 0}function m$($){let J=C0($);return{correct:q0($),score:J,complete:$.lessonType==="powerpath-100"&&J>=100,questionResult:$.questionResult}}function l$($,J){return Array.from(new Set($.map((Z)=>Z.ids?.[J]).filter((Z)=>Boolean(Z))))}function u$($){return String($.sourcedId??"")}var c$=($)=>{return async(J={})=>{let Z=$.getClient(),K=u($.env),H;if(J.course){let _=U2($.appConfig.courses,J.course).ids?.[K];H=_?[_]:[]}else H=l$($.appConfig.courses,K);let W=[];for(let F of H){let _=await Z.oneroster.courses(F).components({where:{status:"active"}}),O=g8(_);for(let w of O){let j=u$(w);if(!j)continue;let A=await Z.oneroster.courses.componentResources({where:{"courseComponent.sourcedId":j,status:"active"}}),C=g8(A);for(let q of C){if(!q.sourcedId)continue;let z=q.metadata??{},N=f$(q);W.push({id:q.sourcedId,name:q.title??q.sourcedId,type:z.lessonType??"quiz",courseId:F,questionCount:N,metadata:z})}}}return W}};class W8 extends Error{name="LessonTypeMismatchError"}var p$=($)=>{return async(J)=>{let Z=$.getClient().powerpath.assessments;if(J.lessonType==="powerpath-100"){let H=await Z.getNextQuestion({student:J.student,lesson:J.lesson});return X8(H.question)}let K=await Z.getAssessmentProgress({student:J.student,lesson:J.lesson});if(K.lessonType==="powerpath-100"){if(J.lessonType!==void 0)throw new W8(`Expected quiz progress but got powerpath-100 for lesson ${J.lesson}`);let H=await Z.getNextQuestion({student:J.student,lesson:J.lesson});return X8(H.question)}return d$(K)}};var A0=R("lessons:start"),a$=($)=>{return async(J)=>{let Z=$.getClient().powerpath.assessments,K=J.lesson,H=J.student,W=await Z.getAssessmentProgress({student:H,lesson:K});if(J.forceNew){if(W.lessonType!=="powerpath-100"&&W.finalized!==!0)try{await Z.finalStudentAssessmentResponse({student:H,lesson:K})}catch{}try{await Z.createNewAttempt({student:H,lesson:K}),W=await Z.getAssessmentProgress({student:H,lesson:K})}catch(F){A0.warn("Failed to create new lesson attempt",{lessonId:K,error:F})}}else if(W.lessonType!=="powerpath-100"&&W.finalized!==!0&&(W.questions?.length??0)===0)try{await Z.createNewAttempt({student:H,lesson:K}),W=await Z.getAssessmentProgress({student:H,lesson:K})}catch{}return g$(K,W)}};var i$=($)=>{return async(J)=>{let K=await $.getClient().powerpath.assessments.updateStudentQuestionResponse({student:J.student,lesson:J.lesson,question:J.question,responses:{RESPONSE:J.response}});return m$(K)}};function m($){return{list:c$($),start:a$($),next:p$($),submit:i$($),complete:y$($),attempts:v$($),attemptDetails:E$($)}}async function a($,J){let Z=await P2($.identity,J);if(!Z)return null;if(Z.timebackId)return Z.timebackId;return await G2({email:Z.email,client:$.getClient()})}async function s$($,J){let Z=await P2($.identity,J);return Boolean(Z)}var z0=R("handlers:lessons");function c($,J){if($ instanceof d)return M("USER_RESOLUTION_FAILED","Unable to resolve Timeback identity",B2($));if($ instanceof W8)return M("LESSON_TYPE_MISMATCH",$.message,400);let Z=$ instanceof Error?$.message:"Unknown error";return z0.error(J,{error:Z}),M("INTERNAL_ERROR",Z,500)}import*as i from"zod";var P0=i.object({course:w2.optional()}).partial(),T0=i.object({lessonId:E,forceNew:i.boolean().optional()}),R0=i.object({lessonId:E,lessonType:E.optional()}),N0=i.object({lessonId:E,questionId:E,response:E}),I0=i.object({lessonId:E}),b0=i.object({lessonId:E}),h0=i.object({lessonId:E,attempt:i.number().int().positive()});async function S0($){try{let J=await $.json();if(!J||typeof J!=="object"||Array.isArray(J))return null;return J}catch{return null}}async function L2($,J){let Z=await S0($);if(!Z)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid JSON body",400)};let K=J.safeParse(Z);if(!K.success)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid payload",400,{details:K.error.flatten()})};return{ok:!0,payload:K.data}}async function o$($){return await L2($,P0)}async function n$($){return await L2($,T0)}async function r$($){return await L2($,R0)}async function t$($){return await L2($,N0)}async function e$($){return await L2($,I0)}async function $J($){return await L2($,b0)}async function JJ($){return await L2($,h0)}function Y8($){let J=m($);return async(Z)=>{try{let K=await JJ(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.attemptDetails({lesson:K.payload.lessonId,attempt:K.payload.attempt,student:H});return P(W)}catch(K){return c(K,"Failed to fetch lesson attempt details")}}}function Q8($){let J=m($);return async(Z)=>{try{let K=await $J(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.attempts({lesson:K.payload.lessonId,student:H});return P({attempts:W})}catch(K){return c(K,"Failed to list lesson attempts")}}}function G8($){let J=m($);return async(Z)=>{try{let K=await e$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.complete({lesson:K.payload.lessonId,student:H});return P(W)}catch(K){return c(K,"Failed to complete lesson")}}}function B8($){let J=m($);return async(Z)=>{try{if(!await s$($,Z))return M("UNAUTHORIZED","Unauthorized",401);let K=await o$(Z);if(!K.ok)return K.response;let H=await J.list({course:K.payload.course});return P({lessons:H})}catch(K){return c(K,"Failed to list lessons")}}}function _8($){let J=m($);return async(Z)=>{try{let K=await r$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.next({lesson:K.payload.lessonId,lessonType:K.payload.lessonType,student:H});return P(W)}catch(K){return c(K,"Failed to fetch next lesson question")}}}function F8($){let J=m($);return async(Z)=>{try{let K=await n$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.start({lesson:K.payload.lessonId,student:H,forceNew:K.payload.forceNew});return P(W)}catch(K){return c(K,"Failed to start lesson")}}}function O8($){let J=m($);return async(Z)=>{try{let K=await t$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.submit({lesson:K.payload.lessonId,question:K.payload.questionId,response:K.payload.response,student:H});return P(W)}catch(K){return c(K,"Failed to submit lesson answer")}}}function ZJ($,J){let Z=new Map;for(let K of $){let H=K.ids?.[J];if(H)Z.set(H,K)}return Z}function KJ($,J){return $.map((Z)=>{let K=J.get(Z.course.id);return{id:Z.course.id,code:K?.courseCode??Z.course.id,name:Z.course.title}})}function HJ($){return $.map((J)=>J.metadata?.goals).find(Boolean)}function XJ($){let J=new Date(Date.UTC($.getUTCFullYear(),$.getUTCMonth(),$.getUTCDate())),Z=new Date(Date.UTC($.getUTCFullYear(),$.getUTCMonth(),$.getUTCDate(),23,59,59,999));return{start:J,end:Z}}function d8($){return Object.values($).reduce((J,Z)=>{return J+Object.values(Z).reduce((K,H)=>{return K+(H.activityMetrics?.xpEarned??0)},0)},0)}async function x8($,J,Z,K){let H=await $.edubridge.enrollments.list({userId:J.id}),W=ZJ(Z.courses,K),F=KJ(H,W),_=HJ(H),{start:O,end:w}=XJ(new Date),[j,A]=await Promise.all([$.edubridge.analytics.getActivity({studentId:J.id,startDate:O.toISOString(),endDate:w.toISOString()}),$.edubridge.analytics.getActivity({studentId:J.id,startDate:"2000-01-01",endDate:w.toISOString()})]);return{id:J.id,email:J.email,name:J.name,school:J.school,grade:J.grade,courses:F.length?F:void 0,goals:_,xp:{today:d8(j),all:d8(A)}}}var m8=R("handlers:user");async function E0($,J){if($.mode==="custom"){let K=await $.getEmail(J);if(!K)return;return{sub:K,email:K}}let Z=await $.getUser(J);if(!Z)return;return{sub:Z.id,email:Z.email}}function v0($){if(m8.warn("Timeback user resolution failed",{code:$.code}),$.code==="timeback_user_ambiguous")return M("USER_AMBIGUOUS","Timeback user resolution ambiguous",409);if($.code==="timeback_user_not_found")return M("USER_NOT_FOUND","Timeback user not found",404);return M("USER_RESOLUTION_FAILED",$.message,502)}function D8($){return async(J)=>{try{let Z=await E0($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=u($.env),H=$.getClient();try{let W=await _2({env:$.env,apiCredentials:$.api,userInfo:Z,client:H}),F=await x8(H,W,$.appConfig,K);return P(F)}catch(W){if(W instanceof d)return v0(W);let F=W instanceof Error?W.message:"Unknown error";return m8.error("Failed to build user profile",{error:F}),M("INTERNAL_ERROR",F,502)}}catch(Z){let K=Z instanceof Error?Z.message:"Unknown error";return m8.error("Unhandled error in user handler",{error:K}),M("INTERNAL_ERROR",K,500)}}}var l8=R("handlers:user:verify");async function y0($,J){if($.mode==="custom"){let K=await $.getEmail(J);if(!K)return;return{sub:K,email:K}}let Z=await $.getUser(J);if(!Z)return;return{sub:Z.id,email:Z.email}}function w8($){return async(J)=>{try{let Z=await y0($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=$.getClient();try{let H=await _2({env:$.env,apiCredentials:$.api,userInfo:Z,client:K});return P({verified:!0,timebackId:H.id})}catch(H){if(H instanceof d){if(l8.warn("Timeback user resolution failed",{code:H.code}),H.code==="timeback_user_ambiguous")return M("USER_AMBIGUOUS","Timeback user resolution ambiguous",409);if(H.code==="timeback_user_not_found")return P({verified:!1});return M("USER_RESOLUTION_FAILED",H.message,502)}let W=H instanceof Error?H.message:"Unknown error";return l8.error("Failed to verify user",{error:W}),M("INTERNAL_ERROR",W,502)}}catch(Z){let K=Z instanceof Error?Z.message:"Unknown error";return l8.error("Unhandled error in verify handler",{error:K}),M("INTERNAL_ERROR",K,500)}}}import*as T from"zod";var f0=T.object({email:T.email(),timebackId:T.string().optional()}),g0=T.object({id:E,name:E,course:w2}),d0=T.object({totalQuestions:T.number().int().nonnegative().optional(),correctQuestions:T.number().int().nonnegative().optional(),xpEarned:T.number(),masteredUnits:T.number().int().nonnegative().optional(),pctComplete:T.number().min(0).max(100).optional()}).superRefine(n2),m0=T.object({startedAt:T.union([T.iso.datetime(),T.date()]).optional(),endedAt:T.union([T.iso.datetime(),T.date()]).optional(),activeMs:T.number().int().nonnegative().optional(),inactiveMs:T.number().int().nonnegative().optional()}),l0=T.uuid().optional(),WJ=T.object({user:f0,activity:g0,metrics:d0,time:m0.optional(),runId:l0});var YJ=R("activity:record");class QJ extends Error{code="VALIDATION_ERROR";details;constructor($,J){super($);this.name="ActivityRecordValidationError",this.details=J}}class u8 extends Error{code="COURSE_ERROR";constructor($){super($);this.name="ActivityRecordCourseError"}}function u0($){let J=$.time?.endedAt?typeof $.time.endedAt==="string"?$.time.endedAt:$.time.endedAt.toISOString():new Date().toISOString();return{id:$.activity.id,name:$.activity.name,course:$.activity.course,endedAt:J,metrics:{totalQuestions:$.metrics.totalQuestions,correctQuestions:$.metrics.correctQuestions,xpEarned:$.metrics.xpEarned,masteredUnits:$.metrics.masteredUnits},pctComplete:$.metrics.pctComplete}}function c0($,J){let Z=$.time,K=Z.activeMs??0,H=Z.inactiveMs??0,W;if(Z.startedAt)W=typeof Z.startedAt==="string"?Z.startedAt:Z.startedAt.toISOString();else if(Z.activeMs!==void 0||Z.inactiveMs!==void 0){let F=new Date(J),_=K+H;W=new Date(F.getTime()-_).toISOString()}else W=J;return{id:$.activity.id,name:$.activity.name,course:$.activity.course,startedAt:W,endedAt:J,elapsedMs:K,pausedMs:H}}function p0($,J,Z){let K;try{K=U2($.courses,J)}catch(W){if(W instanceof Q2)throw new u8(W.code==="unknown_course"?`Unknown course: ${JSON.stringify(J)}`:"Ambiguous course selector in timeback.config.json");throw W}let H=S2($,K,Z);if(!H)throw new u8(`Course "${JSON.stringify(J)}" has no sensor configured.`);return{course:K,sensor:H}}var a0={recordCompletion:r2,sendTimeSpent:k$};function c8($,J=a0){return async(Z)=>{let K=WJ.safeParse(Z);if(!K.success)throw YJ.warn("Invalid record input",{error:K.error.flatten()}),new QJ("Invalid activity record input",K.error.flatten());let H=K.data,{course:W,sensor:F}=p0($.appConfig,H.activity.course,$.env),_=u0(H),O={env:$.env,api:$.api,appConfig:$.appConfig,getClient:$.getClient,hooks:$.hooks};if(await J.recordCompletion(O,{userInfo:{email:H.user.email,timebackId:H.user.timebackId},payload:_,course:W,sensor:F,preview:!1,runId:H.runId}),H.time){let w=c0(H,_.endedAt);await J.sendTimeSpent(O,{userInfo:{email:H.user.email,timebackId:H.user.timebackId},payload:w,course:W,sensor:F,runId:H.runId})}YJ.debug("Recorded activity",{activityId:H.activity.id,hasTime:!!H.time})}}var U8=R("user:verify");function p8($){return async(J)=>{U8.debug("Verifying user by email");let Z=$.getClient();try{let K=await G2({email:J,client:Z});return U8.debug("User verified",{timebackId:K}),{verified:!0,timebackId:K}}catch(K){if(K instanceof d){if(K.code==="timeback_user_not_found")return U8.debug("User not found in Timeback"),{verified:!1};throw K}let H=K instanceof Error?K.message:"Unknown error";throw U8.error("Failed to verify user",{error:H}),K}}}var a8=R("user:getProfile");function i8($){return async(J)=>{a8.debug("Building user profile by email");let Z=$.getClient(),K=u($.env);try{let H=await _2({env:$.env,apiCredentials:$.api,userInfo:{sub:J,email:J},client:Z}),W=await x8(Z,H,$.appConfig,K);return a8.debug("User profile built",{userId:W.id}),W}catch(H){if(H instanceof d)throw H;let W=H instanceof Error?H.message:"Unknown error";throw a8.error("Failed to build user profile",{error:W}),H}}}async function s0($){let{loadConfig:J}=await import("./chunk-44nb8dx1.js");return await J($)}function o0($){return $.map((J)=>{if(J.grade!==void 0)return J;if(J.courseCode)return J;throw Error(`Invalid course config: missing both grade and courseCode for subject "${J.subject}"`)})}async function FJ($){if(!globalThis.process?.versions?.node&&!globalThis.Bun)throw Error("createTimeback() requires Node.js or Bun — it reads timeback.config.json from the filesystem. "+"For edge runtimes (Cloudflare Workers, Vercel Edge, etc.), use createTimebackIdentity() from '@timeback/sdk' instead.");GJ({logger:$.logger,logLevel:$.logLevel});let J=BJ($.env),Z=await s0({configPath:$.configPath});if(!Z.success)throw Error(`Failed to load timeback config: ${Z.error}`);let K=Z.config,H,W=()=>{if(!H)H=new i0({env:u(J),auth:{clientId:$.api.clientId,clientSecret:$.api.clientSecret}});return H},F=$.hooks,_=(j,A)=>_J(j,F,A),O={env:J,identity:$.identity,appConfig:{name:K.name,sensor:K.sensor,launchUrl:K.launchUrl,courses:o0(K.courses)},api:$.api,getClient:W,hooks:F},w={env:J,identity:$.identity,api:{credentials:$.api,getClient:W}};return{config:$,handle:{activity:{heartbeat:_("activity.heartbeat",$8(O)),submit:_("activity.submit",t2(O))},identity:{signIn:_("identity.signIn",Z8(w)),callback:_("identity.callback",K8(w)),signOut:H8()},lessons:{list:_("lessons.list",B8(O)),start:_("lessons.start",F8(O)),next:_("lessons.next",_8(O)),submit:_("lessons.submit",O8(O)),complete:_("lessons.complete",G8(O)),attempts:_("lessons.attempts",Q8(O)),attemptDetails:_("lessons.attemptDetails",Y8(O))},user:{me:_("user.me",D8(O)),verify:_("user.verify",w8(O))}},activity:{record:c8({...O})},lessons:m({...O}),user:{verify:p8({...O}),getProfile:i8({...O})},get api(){return W()},close(){if(H)H.close(),H=void 0}}}import{TimebackClient as zH}from"@timeback/core";import{ApiError as TH,ForbiddenError as RH,isApiError as NH,NotFoundError as IH,UnauthorizedError as bH,ValidationError as hH}from"@timeback/core";export{r0 as toNativeHandler,NH as isApiError,OJ as createTimebackIdentity,FJ as createTimeback,hH as ValidationError,bH as UnauthorizedError,zH as TimebackClient,n0 as ROUTES,IH as NotFoundError,RH as ForbiddenError,TH as ApiError};
1
+ import"./chunk-ae6bkfs5.js";import{a as E,b as G$,c as B$}from"./chunk-sekvadgt.js";import{e as z$,f as P$,g as T$,h as R$,i as N$,j as I$,k as FJ}from"./chunk-6nybr8hs.js";import{l as n0}from"./server/adapters/native.js";import{m as d,n as _2,o as F2,p as B2,q as o2,r as h2,s as BJ}from"./chunk-bh0ewh45.js";import{t as QJ,u as R,v as L2,w as q$,y as C$,z as A$}from"./chunk-nw6brg34.js";import"./chunk-3pf3cpfk.js";import{G as f8,H as D$,I as S2,J as u,K as GJ,L as P,M,N as $8,Q as o0}from"./chunk-dbcsf5tk.js";import{R as M8,U as L8}from"./chunk-1s709w5e.js";import{TimebackClient as a0}from"@timeback/core";import{getServiceUrlsForEnv as U0}from"@timeback/core";class s extends Error{statusCode;response;name="ApiError";constructor($,J,Z){super($);this.statusCode=J,this.response=Z}get minorCodes(){let $=this.response;if(!$?.imsx_CodeMinor?.imsx_codeMinorField)return[];return $.imsx_CodeMinor.imsx_codeMinorField.map((J)=>({field:J.imsx_codeMinorFieldName,value:J.imsx_codeMinorFieldValue}))}get details(){return this.response?.imsx_error_details??[]}}class e8 extends s{name="UnauthorizedError";constructor($="Unauthorized",J){super($,401,J)}}class $9 extends s{name="ForbiddenError";constructor($="Forbidden",J){super($,403,J)}}class J9 extends s{name="NotFoundError";constructor($="Not Found",J){super($,404,J)}}class Z9 extends s{name="ValidationError";constructor($="Validation Error",J){super($,422,J)}}class K9 extends s{name="InputValidationError";issues;constructor($,J){let Z={imsx_codeMajor:"failure",imsx_severity:"error",imsx_description:$,imsx_error_details:J.map((K)=>({path:K.path,message:K.message}))};super($,400,Z);this.issues=J}}function N2($,J){return new K9($,J)}function xJ($){if(!($ instanceof Error))return!1;return"statusCode"in $&&"response"in $}var wJ="BEYOND_AI",H9="LEARNWITH_AI",X9=wJ,DJ={staging:"https://staging-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/token",production:"https://prod-beyond-timeback-api-2-idp.auth.us-east-1.amazoncognito.com/oauth2/token"},UJ={staging:"https://api.staging.alpha-1edtech.ai",production:"https://api.alpha-1edtech.ai"},MJ={staging:"https://caliper.staging.alpha-1edtech.ai",production:"https://caliper.alpha-1edtech.ai"},LJ={staging:"https://qti.alpha-1edtech.ai/api",production:"https://qti.alpha-1edtech.ai/api"},jJ={staging:"https://platform.dev.timeback.com/auth/1.0/token",production:"https://platform.timeback.com/auth/1.0/token"},VJ={staging:"https://platform.dev.timeback.com",production:"https://platform.timeback.com"},kJ={staging:"https://platform.dev.timeback.com",production:"https://platform.timeback.com"},qJ={staging:"https://platform.dev.timeback.com",production:"https://platform.timeback.com"},CJ={BEYOND_AI:{token:DJ,tokenScope:void 0,api:UJ,caliper:MJ,qti:LJ},LEARNWITH_AI:{token:jJ,tokenScope:"https://purl.imsglobal.org/spec/caliper/v1p2/scope/events.write",api:VJ,caliper:kJ,qti:qJ}},AJ={tsc:"tsc",nativePreview:"@typescript/native-preview"},$1={package:AJ.nativePreview,bin:"tsgo"},e=null,j8=!1,V8=!1;function s8($){let Z=$.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*");return new RegExp(`^${Z}$`)}function zJ(){if(e!==null)return;if(e=[],typeof process>"u"||!process.env?.DEBUG){V8=!1;return}V8=!0;let $=process.env.DEBUG.trim();if($==="1"||$==="true"||$==="*"){j8=!0;return}let J=$.split(",").map((K)=>K.trim()).filter(Boolean);for(let K of J)if(K.startsWith("-"))e.push({regex:s8(K.slice(1)),exclude:!0});else e.push({regex:s8(K),exclude:!1});if(!e.some((K)=>!K.exclude)&&e.length>0)j8=!0}function PJ($){if(zJ(),!V8)return!0;if(j8){if($){for(let J of e)if(J.exclude&&J.regex.test($))return!1}return!0}if(!$)return!1;for(let J of e)if(J.exclude&&J.regex.test($))return!1;for(let J of e)if(!J.exclude&&J.regex.test($))return!0;return!1}function W9(){return typeof globalThis<"u"&&"window"in globalThis}function TJ(){if(W9())return"browser";if(typeof process<"u"&&process.env){if(process.env.CI||process.env.GITHUB_ACTIONS||process.env.GITLAB_CI||process.env.CIRCLECI||process.env.JENKINS_URL||process.env.BUILDKITE)return"ci"}return"terminal"}var k8;if(!W9())try{k8=(await import("./chunk-kkajswjx.js")).inspect}catch{}var $2={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",red:"\x1B[31m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m"};function RJ($){switch($){case"debug":return $2.blue;case"info":return $2.cyan;case"warn":return $2.yellow;case"error":return $2.red}}function NJ($){switch($){case"debug":return console.debug;case"info":return console.info;case"warn":return console.warn;case"error":return console.error}}function IJ($){if(k8)return k8($,{depth:null,colors:!0,breakLength:80,compact:!1});return JSON.stringify($,null,2)}var bJ=($)=>{let J=RJ($.level),Z=NJ($.level),K=$.level.toUpperCase().padEnd(5),H=$.timestamp.toISOString().replace(/\.\d{3}Z$/,""),W=`${$2.dim}[${H}]${$2.reset}`,F=`${J}${K}${$2.reset}`,_=$.scope?`${$2.bold}[${$.scope}]${$2.reset} `:"",O=`${W} ${F} ${_}${$.message}`;if($.context&&Object.keys($.context).length>0)Z(O,IJ($.context));else Z(O)},hJ={debug:"[DEBUG]",info:"[INFO]",warn:"[WARN]",error:"[ERROR]"};function SJ($){return Object.entries($).map(([J,Z])=>`${J}=${EJ(Z)}`).join(" ")}function EJ($){if(typeof $==="string")return $;if(typeof $==="number")return String($);if(typeof $==="boolean")return String($);if($===null)return"null";if($===void 0)return"undefined";return JSON.stringify($)}var vJ=($)=>{let J=[];if(J.push($.timestamp.toISOString()),J.push(hJ[$.level]),$.scope)J.push(`[${$.scope}]`);if(J.push($.message),$.context&&Object.keys($.context).length>0)J.push(SJ($.context));console.log(J.join(" "))},yJ=($)=>{let J={timestamp:$.timestamp.toISOString(),level:$.level,...$.scope&&{scope:$.scope},msg:$.message};if($.context&&Object.keys($.context).length>0)Object.assign(J,$.context);console.log(JSON.stringify(J))},fJ={debug:"color: gray",info:"color: #0ea5e9",warn:"color: #f59e0b",error:"color: #ef4444; font-weight: bold"},gJ={debug:"log",info:"info",warn:"warn",error:"error"},dJ=($)=>{let J=gJ[$.level],Z=fJ[$.level],H=`%c${$.scope?`[${$.scope}]`:""} ${$.message}`;if($.context&&Object.keys($.context).length>0)console[J](H,Z,$.context);else console[J](H,Z)},o8=["debug","info","warn","error"];function mJ($){switch($){case"terminal":return bJ;case"ci":return vJ;case"production":return yJ;case"browser":return dJ;case"test":return()=>{}}}function lJ(){if(typeof process<"u"&&process.env?.DEBUG)return"debug";return"info"}function uJ($,J){return o8.indexOf($)>=o8.indexOf(J)}class g2{scope;minLevel;environment;formatter;defaultContext;constructor($={}){this.scope=$.scope,this.minLevel=$.minLevel??lJ(),this.defaultContext=$.defaultContext??{},this.environment=$.environment??TJ(),this.formatter=mJ(this.environment)}child($){let J=this.scope?`${this.scope}:${$}`:$;return new g2({scope:J,minLevel:this.minLevel,environment:this.environment,defaultContext:{...this.defaultContext}})}withContext($){return new g2({scope:this.scope,minLevel:this.minLevel,environment:this.environment,defaultContext:{...this.defaultContext,...$}})}debug($,J){this.log("debug",$,J)}info($,J){this.log("info",$,J)}warn($,J){this.log("warn",$,J)}error($,J){this.log("error",$,J)}log($,J,Z){if($==="debug"&&!PJ(this.scope))return;if(!uJ($,this.minLevel))return;let K={level:$,message:J,scope:this.scope,context:Z||Object.keys(this.defaultContext).length>0?{...this.defaultContext,...Z}:void 0,timestamp:new Date};this.formatter(K)}}function Y9($={}){return new g2($)}function cJ(){try{let $=typeof process>"u"?void 0:process.env.DEBUG;return $==="1"||$==="true"}catch{return!1}}var V2=Y9({scope:"auth",minLevel:cJ()?"debug":"warn"});class d2{config;accessToken=null;tokenExpiry=0;pendingRequest=null;fetchFn;constructor($){this.config=$,this.fetchFn=$.fetch??globalThis.fetch.bind(globalThis)}async getToken(){if(this.accessToken&&Date.now()<this.tokenExpiry)return V2.debug("Using cached token"),this.accessToken;if(this.pendingRequest)return V2.debug("Waiting for in-flight token request"),this.pendingRequest;this.pendingRequest=this.fetchToken();try{return await this.pendingRequest}finally{this.pendingRequest=null}}async fetchToken(){V2.debug("Fetching new access token...");let{clientId:$,clientSecret:J}=this.config.credentials,Z=btoa(`${$}:${J}`),K=performance.now(),H=await this.fetchFn(this.config.tokenUrl,{method:"POST",headers:{Authorization:`Basic ${Z}`,"Content-Type":"application/x-www-form-urlencoded"},body:this.config.scope?`grant_type=client_credentials&scope=${encodeURIComponent(this.config.scope)}`:"grant_type=client_credentials"}),W=Math.round(performance.now()-K);if(!H.ok)throw V2.error(`Token request failed: ${H.status} ${H.statusText}`),Error(`Failed to obtain access token: ${H.status} ${H.statusText}`);let F=await H.json();return this.accessToken=F.access_token,this.tokenExpiry=Date.now()+(F.expires_in-60)*1000,V2.debug(`Token acquired (${W}ms, expires in ${F.expires_in}s)`),this.accessToken}invalidate(){V2.debug("Token invalidated"),this.accessToken=null,this.tokenExpiry=0}}var m2={caliper:{send:"/caliper/event",validate:"/caliper/event/validate",list:"/caliper/events",get:"/caliper/events/{id}",jobStatus:"/jobs/{id}/status"},oneroster:{rostering:"/ims/oneroster/rostering/v1p2",gradebook:"/ims/oneroster/gradebook/v1p2",resources:"/ims/oneroster/resources/v1p2"},edubridge:{base:"/edubridge"},powerpath:{base:"/powerpath"},clr:{credentials:"/ims/clr/v2p0/credentials",discovery:"/ims/clr/v2p0/discovery"},case:{base:"/ims/case/v1p1"},webhooks:{webhookList:"/webhooks/",webhookGet:"/webhooks/{id}",webhookCreate:"/webhooks/",webhookUpdate:"/webhooks/{id}",webhookDelete:"/webhooks/{id}",webhookActivate:"/webhooks/{id}/activate",webhookDeactivate:"/webhooks/{id}/deactivate",webhookFilterList:"/webhook-filters/",webhookFilterGet:"/webhook-filters/{id}",webhookFilterCreate:"/webhook-filters/",webhookFilterUpdate:"/webhook-filters/{id}",webhookFilterDelete:"/webhook-filters/{id}",webhookFiltersByWebhook:"/webhook-filters/webhook/{webhookId}"},reporting:{mcp:"/mcp/reporting",savedQueryExecute:"/reporting/saved-queries/{id}",adminGroupCheck:"/mcp/admin/users/{email}/group",adminGroupAdd:"/mcp/admin/users/{email}/group",adminGroupRemove:"/mcp/admin/users/{email}/group"}},pJ={caliper:{send:"/caliper/v1p2",validate:null,list:null,get:null,jobStatus:null},oneroster:{rostering:"/rostering/1.0",gradebook:"/gradebook/1.0",resources:"/resources/1.0"},webhooks:null,reporting:null,edubridge:null,powerpath:null,clr:null,case:{base:"/case/1.1"}},Q9={BEYOND_AI:m2,LEARNWITH_AI:pJ};function aJ($){return"env"in $&&!("baseUrl"in $)&&!("services"in $)}function iJ($){return"baseUrl"in $&&!("services"in $)}function sJ($){return"services"in $}function n8($,J){let Z=$?Q9[$]??m2:m2;return{caliper:J?.caliper??Z.caliper,oneroster:J?.oneroster??Z.oneroster,webhooks:J?.webhooks??Z.webhooks,reporting:J?.reporting??Z.reporting,edubridge:J?.edubridge??Z.edubridge,powerpath:J?.powerpath??Z.powerpath,clr:J?.clr??Z.clr,case:J?.case??Z.case}}class I2{platform;env;auth;timeout;_endpoints;_authUrl;_tokenScope;_pathProfiles;_tokenManagers=new Map;constructor($){if(this.timeout=$.timeout??30000,aJ($)){this.auth=$.auth;let J=$.platform??X9,Z=$.env;this.platform=J,this.env=Z;let K=CJ[J];if(!K)throw Error(`Unknown platform: ${J}`);this._authUrl=K.token[Z],this._tokenScope=K.tokenScope??void 0,this._pathProfiles=Q9[J]??m2,this._endpoints={oneroster:{baseUrl:K.api[Z],authUrl:this._authUrl},edubridge:{baseUrl:K.api[Z],authUrl:this._authUrl},powerpath:{baseUrl:K.api[Z],authUrl:this._authUrl},clr:{baseUrl:K.api[Z],authUrl:this._authUrl},case:{baseUrl:K.api[Z],authUrl:this._authUrl},caliper:{baseUrl:K.caliper[Z],authUrl:this._authUrl},webhooks:{baseUrl:K.caliper[Z],authUrl:this._authUrl},reporting:{baseUrl:K.api[Z],authUrl:this._authUrl},qti:{baseUrl:K.qti[Z],authUrl:this._authUrl}}}else if(iJ($))this.auth=$.auth,this._authUrl=$.authUrl,this._pathProfiles=n8($.pathProfile,$.paths),this._endpoints={oneroster:{baseUrl:$.baseUrl,authUrl:this._authUrl},edubridge:{baseUrl:$.baseUrl,authUrl:this._authUrl},powerpath:{baseUrl:$.baseUrl,authUrl:this._authUrl},clr:{baseUrl:$.baseUrl,authUrl:this._authUrl},case:{baseUrl:$.baseUrl,authUrl:this._authUrl},caliper:{baseUrl:$.baseUrl,authUrl:this._authUrl},webhooks:{baseUrl:$.baseUrl,authUrl:this._authUrl},reporting:{baseUrl:$.baseUrl,authUrl:this._authUrl},qti:{baseUrl:$.baseUrl,authUrl:this._authUrl}};else if(sJ($)){this.auth=$.auth,this._authUrl=$.authUrl,this._pathProfiles=n8($.pathProfile,$.paths),this._endpoints={};for(let[J,Z]of Object.entries($.services))if(Z)this._endpoints[J]={baseUrl:Z,authUrl:this._authUrl}}else throw Error("Invalid provider configuration");for(let J of Object.keys(this._pathProfiles))if(this._pathProfiles[J]===null)delete this._endpoints[J]}getEndpoint($){let J=this._endpoints[$];if(!J){let Z=$;if(Z in this._pathProfiles&&this._pathProfiles[Z]===null)throw Error(`Service "${$}" is not supported on ${this.platform??"this"} platform.`);throw Error(`Service "${$}" is not configured in this provider`)}return J}hasService($){return $ in this._endpoints}getAvailableServices(){return Object.keys(this._endpoints)}getTokenUrl(){return this._authUrl}getEndpointWithPaths($){let J=this.getEndpoint($),Z=this.getServicePaths($);return{...J,paths:Z}}getPaths(){return this._pathProfiles}getServicePaths($){let J=this._pathProfiles[$];if(!J)throw Error(`Service "${$}" is not supported on ${this.platform??"this"} platform.`);return J}hasServiceSupport($){return this._pathProfiles[$]!==null}getTokenProvider($){let J=this.getEndpoint($),{authUrl:Z}=J;if(!Z)return;if(!this.auth)throw Error(`Service "${$}" requires authentication but no credentials were provided`);let K=this._tokenManagers.get(Z);if(!K)K=new d2({tokenUrl:Z,credentials:{clientId:this.auth.clientId,clientSecret:this.auth.clientSecret},scope:this._tokenScope}),this._tokenManagers.set(Z,K);return K}async checkAuth(){if(!this._authUrl||!this.auth)throw Error("No auth configured on this provider");let $=Date.now(),J=this._tokenManagers.get(this._authUrl);if(!J)J=new d2({tokenUrl:this._authUrl,credentials:{clientId:this.auth.clientId,clientSecret:this.auth.clientSecret},scope:this._tokenScope}),this._tokenManagers.set(this._authUrl,J);try{return await J.getToken(),{ok:!0,latencyMs:Date.now()-$,checks:{tokenAcquisition:!0}}}catch(Z){return{ok:!1,latencyMs:Date.now()-$,error:Z instanceof Error?Z.message:String(Z),checks:{tokenAcquisition:!1}}}}invalidateTokens(){for(let $ of this._tokenManagers.values())$.invalidate?.();this._tokenManagers.clear()}}function b($){try{if(typeof process>"u")return;if(typeof $==="string")return process.env[$];for(let J of $){let Z=process.env[J];if(Z!==void 0)return Z}return}catch{return}}function O2(){let $=b("DEBUG");return $==="1"||$==="true"}function oJ(){return Math.random().toString(16).slice(2,10)}function q8($){return Y9({scope:$,minLevel:O2()?"debug":"warn"})}var l2={defaultPlatform:X9,templates:{BEYOND_AI:{staging:{platform:"BEYOND_AI",env:"staging"},production:{platform:"BEYOND_AI",env:"production"}},LEARNWITH_AI:{staging:{platform:"LEARNWITH_AI",env:"staging"},production:{platform:"LEARNWITH_AI",env:"production"}}}};function nJ($){if(typeof $==="string")return $;if($.length===0)throw Error(`Missing env var key: ${$}`);return $[0]}function x2($){return nJ($)}function G9($){if($!=="staging"&&$!=="production")throw Error(`Invalid env "${$}": must be "staging" or "production"`);return $}function B9($,J){let Z=$?.clientId??b(J.clientId),K=$?.clientSecret??b(J.clientSecret);if(!Z)throw Error(`Missing clientId: provide in config or set ${x2(J.clientId)}`);if(!K)throw Error(`Missing clientSecret: provide in config or set ${x2(J.clientSecret)}`);return{clientId:Z,clientSecret:K}}function rJ($,J,Z){if(!Z)return;return B9($,J)}function tJ($){let J=b($.baseUrl),Z=b($.authUrl),K=b($.clientId),H=b($.clientSecret);if(J===void 0&&K===void 0)return`Missing env: provide in config or set ${x2($.env??$.baseUrl)}`;let W=[];if(J===void 0)W.push(x2($.env??$.baseUrl));if(J!==void 0&&Z===void 0)W.push(x2($.authUrl));if(K===void 0)W.push(x2($.clientId));if(H===void 0)W.push(x2($.clientSecret));return`Missing environment variables: ${W.join(", ")}`}var eJ={name:"transport",matches($){return"transport"in $&&!!$.transport},resolve($){return{mode:"transport",transport:$.transport}}},$Z={name:"provider",matches($){return"provider"in $&&!!$.provider},resolve($){return{mode:"provider",provider:$.provider}}},JZ={name:"env-config",matches($){return"env"in $},resolve($,J,Z){let K=$,H=G9(K.env),W=B9(K.auth,J),F=K.platform??Z.defaultPlatform,_=Z.templates[F];if(!_){let D=Object.keys(Z.templates).join(", ");throw Error(`Unknown platform "${F}": available platforms are ${D}`)}let O=_[H];if(!O){let D=Object.keys(_).join(", ");throw Error(`Unknown env "${H}" for platform "${F}": available environments are ${D}`)}return{mode:"provider",provider:new I2({platform:O.platform,env:O.env,auth:W,timeout:K.timeout})}}},ZZ={name:"explicit-config",matches($){return"baseUrl"in $},resolve($,J){let Z=$,K=Z.authUrl??Z.auth?.authUrl,H=!!K,W=rJ(Z.auth,J,H);return{mode:"provider",provider:new I2({baseUrl:Z.baseUrl,authUrl:K,auth:W,timeout:Z.timeout,pathProfile:Z.pathProfile,paths:Z.paths})}}},KZ={name:"env-fallback-platform",matches($,J){if(Object.keys($).length>0)return!1;let Z=J.env?b(J.env):void 0,K=b(J.clientId),H=b(J.clientSecret);return Z!==void 0&&K!==void 0&&H!==void 0},resolve($,J,Z){let K=G9(b(J.env)),H=b(J.clientId),W=b(J.clientSecret),F=Z.defaultPlatform,_=Z.templates[F]?.[K];if(!_)throw Error(`Unknown env "${K}" for platform "${F}"`);return{mode:"provider",provider:new I2({platform:_.platform,env:_.env,auth:{clientId:H,clientSecret:W}})}}},HZ={name:"env-fallback-explicit",matches($,J){if(Object.keys($).length>0)return!1;let Z=b(J.baseUrl),K=b(J.authUrl),H=b(J.clientId),W=b(J.clientSecret);return Z!==void 0&&K!==void 0&&H!==void 0&&W!==void 0},resolve($,J){let Z=b(J.baseUrl),K=b(J.authUrl),H=b(J.clientId),W=b(J.clientSecret);return{mode:"provider",provider:new I2({baseUrl:Z,authUrl:K,auth:{clientId:H,clientSecret:W}})}}},XZ={name:"token-provider",matches($){return"tokenProvider"in $},resolve(){throw Error("TokenProvider mode is not supported with provider pattern. Use { provider: TimebackProvider } or { env, auth } instead.")}},WZ=[eJ,$Z,JZ,XZ,ZZ,KZ,HZ];function _9($,J,Z=l2){for(let K of WZ)if(K.matches($,J))return K.resolve($,J,Z);throw Error(tJ(J))}var U8=3,YZ=[429,503],r8=1000;class C8{config;log;constructor($){let{config:J,logger:Z}=$,K=J.fetch??globalThis.fetch.bind(globalThis),H;if("tokenProvider"in J&&J.tokenProvider)H=J.tokenProvider;else if("auth"in J&&J.auth)H=new d2({tokenUrl:J.auth.authUrl,credentials:{clientId:J.auth.clientId,clientSecret:J.auth.clientSecret},fetch:K});let W=J.baseUrl.endsWith("/")?J.baseUrl:`${J.baseUrl}/`;this.config={baseUrl:W,timeout:J.timeout??30000,fetch:K,tokenProvider:H},this.log=Z.child("http")}get baseUrl(){return this.config.baseUrl}async request($,J={}){let Z=await this.requestRaw($,J);return this.handleResponse(Z)}async exists($,J={}){try{return await this.requestRaw($,J),!0}catch(Z){if(xJ(Z)&&Z.statusCode===404)return!1;throw Z}}async requestRaw($,J={}){let{method:Z="GET",params:K,body:H,headers:W={}}=J,F=this.buildUrl($,K),_=J.requestId??oJ(),D=Date.now()+this.config.timeout;for(let j=0;j<U8;j++){let A=D-Date.now();if(A<=0)throw this.log.error("Request timeout before attempt",O2()?{requestId:_,path:$}:{path:$}),new s("Request timeout",408);let C=await this.getAccessToken(),q=j===U8-1,z=performance.now();this.log.debug(`→ ${Z} ${F}`,{requestId:_,attempt:j>0?j+1:void 0});let N={"Content-Type":"application/json",Accept:"application/json","X-Request-ID":_,...W};if(C)N.Authorization=`Bearer ${C}`;let I=await this.config.fetch(F,{method:Z,headers:N,body:H?JSON.stringify(H):void 0,signal:AbortSignal.timeout(Math.min(A,this.config.timeout))}),r=Math.round(performance.now()-z);if(this.log.debug(`← ${I.status} ${I.statusText} (${r}ms)`,{requestId:_}),YZ.includes(I.status)&&!q){let v2=I.headers.get("Retry-After"),p=this.parseRetryAfter(v2,j),i8=D-Date.now();if(p>=i8)throw this.log.error("Request timeout during retry backoff",O2()?{requestId:_,path:$}:{path:$}),new s("Request timeout",408);this.log.warn(`Retrying in ${p}ms (attempt ${j+1}/${U8})`,{...O2()&&{requestId:_},status:I.status}),await this.sleep(p);continue}if(!I.ok)return this.handleErrorResponse(I,_);return I}throw this.log.error("Max retries exceeded",O2()?{requestId:_,path:$}:{path:$}),new s("Max retries exceeded")}getAccessToken(){if(!this.config.tokenProvider)return Promise.resolve(void 0);return this.config.tokenProvider.getToken()}buildUrl($,J){if(/^[a-z][a-z0-9+.-]*:/i.test($))throw Error(`Absolute URLs are not allowed in path: ${$}. Use relative paths only.`);let Z=$.startsWith("/")?$.slice(1):$,K=new URL(Z,this.config.baseUrl);if(J){for(let[H,W]of Object.entries(J))if(W!==void 0)K.searchParams.set(H,String(W))}return K.toString()}async handleResponse($){if(!$.ok)await this.handleErrorResponse($);if($.status===204)return;if($.headers.get("content-length")==="0")return;return this.parseJsonResponse($)}async parseJsonResponse($){let J=await $.text();if(!J||J.trim()==="")return;try{return JSON.parse(J)}catch(Z){let K=J.length>200?J.slice(0,200)+"...":J,H=Z instanceof Error?Z.message:String(Z),W=$.url||"unknown";throw this.log.error("Failed to parse JSON response",{url:W,status:$.status,contentType:$.headers.get("content-type"),bodyPreview:K,error:H}),new s(`Invalid JSON response from ${W}`,$.status,{parseError:H,body:K})}}async handleErrorResponse($,J){let Z,K=await $.text().catch(()=>"");if(K)try{Z=JSON.parse(K)}catch(W){let F=W instanceof Error?W.message:"Unknown parse error";Z={rawBody:K.slice(0,500),parseError:F},this.log.warn("Failed to parse error response as JSON",{...O2()&&{requestId:J},url:$.url,status:$.status,parseError:F,bodyPreview:K.slice(0,200)})}let H=this.extractErrorMessage(Z,$.statusText);if($.status!==404)this.log.error(`Request failed: ${$.status} ${H}`,O2()?{requestId:J}:void 0);switch($.status){case 401:throw this.config.tokenProvider?.invalidate?.(),new e8(H,Z);case 403:throw new $9(H,Z);case 404:throw new J9(H,Z);case 422:throw new Z9(H,Z);default:throw new s(H,$.status,Z)}}extractErrorMessage($,J){if(typeof $==="object"&&$!==null){let Z=$;if(typeof Z.message==="string")return Z.message;if(typeof Z.error==="string")return Z.error;if(typeof Z.imsx_description==="string")return Z.imsx_description}return J}sleep($){return new Promise((J)=>{setTimeout(J,$)})}parseRetryAfter($,J){if(!$)return r8*Math.pow(2,J);let Z=parseInt($,10);if(!isNaN(Z))return Z*1000;let K=Date.parse($);if(!isNaN(K)){let H=K-Date.now();return Math.max(0,H)}return r8*Math.pow(2,J)}}function QZ($){if($ instanceof Date)return $.toISOString();if(typeof $==="boolean")return $?"true":"false";if(typeof $==="number")return String($);return $.replaceAll("'","''")}function t($){let J=QZ($);return typeof $==="string"||$ instanceof Date?`'${J}'`:J}function GZ($,J){if(typeof J==="string"||typeof J==="number"||typeof J==="boolean"||J instanceof Date)return[`${$}=${t(J)}`];if(typeof J==="object"&&J!==null){let Z=J,K=[];if(Z.ne!==void 0)K.push(`${$}!=${t(Z.ne)}`);if(Z.gt!==void 0)K.push(`${$}>${t(Z.gt)}`);if(Z.gte!==void 0)K.push(`${$}>=${t(Z.gte)}`);if(Z.lt!==void 0)K.push(`${$}<${t(Z.lt)}`);if(Z.lte!==void 0)K.push(`${$}<=${t(Z.lte)}`);if(Z.contains!==void 0)K.push(`${$}~${t(Z.contains)}`);if(Z.in!==void 0&&Z.in.length>0){let H=Z.in.map((F)=>`${$}=${t(F)}`),W=H.join(" OR ");K.push(H.length>1?`(${W})`:W)}if(Z.notIn!==void 0&&Z.notIn.length>0){let H=Z.notIn.map((W)=>`${$}!=${t(W)}`);K.push(H.join(" AND "))}return K}return[]}function BZ($){return"OR"in $&&Array.isArray($.OR)}function F9($){if(BZ($)){let Z=$.OR.map((K)=>F9(K)).filter((K)=>K!==void 0);return Z.length>0?Z.join(" OR "):void 0}let J=[];for(let[Z,K]of Object.entries($))if(K!==void 0)J.push(...GZ(Z,K));return J.length>0?J.join(" AND "):void 0}var t8=100,_Z=1e4;class A8{fetcher;path;params;max;unwrapKey;log;transform;paginationStyle;constructor($){this.fetcher=$.fetcher,this.path=$.path,this.params=$.params??{},this.max=$.max,this.unwrapKey=$.unwrapKey,this.log=$.logger?.child("pagination")??q8("pagination"),this.transform=$.transform,this.paginationStyle=$.paginationStyle??"offset"}buildRequestParams($,J){let{where:Z,fields:K,offset:H,limit:W,...F}=this.params,_={...F,filter:Z?F9(Z):void 0,fields:K?.join(","),limit:$};if(this.paginationStyle==="page"){let O=Math.floor(J/$)+1;return{..._,page:O}}return{..._,offset:J}}extractItems($,J){let Z;if(this.unwrapKey)Z=$[this.unwrapKey]??[];else Z=$;return this.validateItems(Z,J)}validateItems($,J){if($===null||$===void 0)return this.log.warn(`Page ${J}: response data is ${$}, treating as empty`),[];if(!Array.isArray($))throw Error(`Expected array for page ${J}, got ${typeof $}. `+(this.unwrapKey?`Check unwrapKey '${this.unwrapKey}' is correct.`:""));return $}hasMorePages($,J,Z,K){if(J===0)return!1;let H=$.hasMore,W=$.total!==void 0&&Z+J<$.total;return H||W||J===K&&$.total===void 0}async*[Symbol.asyncIterator](){let $=this.params.offset??0,J=this.params.limit??t8,Z=!0,K=1,H=0;while(Z){this.log.debug(`Fetching page ${K} (offset: ${$}, limit: ${J})`);let W=await this.fetcher(this.path,{params:this.buildRequestParams(J,$)}),F=this.extractItems(W.data,K);this.log.debug(`Page ${K}: ${F.length} items`);for(let _ of F)if(yield this.transform?this.transform(_):_,H++,this.max!==void 0&&H>=this.max){this.log.debug(`Pagination complete: reached max of ${this.max} items`);return}Z=this.hasMorePages(W,F.length,$,J),$+=F.length,K++}this.log.debug(`Pagination complete: ${H} total items`)}async toArray($={}){let J=$.maxItems??_Z,Z=[];for await(let K of this){if(Z.length>=J)throw Error(`toArray() exceeded maxItems limit of ${J}. Use 'for await...of' to stream large datasets, or increase maxItems.`);Z.push(K)}return Z}async firstPage(){let $=this.params.limit??t8,J=this.params.offset??0,Z=await this.fetcher(this.path,{params:this.buildRequestParams($,J)}),K=this.extractItems(Z.data,1),H=this.transform?K.map(this.transform):K,W=this.hasMorePages(Z,H.length,J,$);return this.log.debug(`First page: ${H.length} items, total: ${Z.total}, hasMore: ${W}`),{data:H,hasMore:W,total:Z.total,nextOffset:W?J+H.length:void 0}}}function f2($,J){return{path:$,message:J}}function o($,J,Z){let K=$.safeParse(J);if(K.success)return K.data;let H=K.error.issues.map((W)=>({path:W.path.join(".")||"(root)",message:W.message}));throw N2(`Invalid ${Z} data`,H)}function u2($,J){if(typeof $!=="string"||$.trim()==="")throw N2(`Invalid ${J}`,[f2(J,"Must be a non-empty string")])}function z8($){if(!$)return;let J=[];if($.limit!==void 0){if(!Number.isInteger($.limit)||$.limit<=0)J.push(f2("limit","Must be a positive integer"))}if($.offset!==void 0){if(!Number.isInteger($.offset)||$.offset<0)J.push(f2("offset","Must be a non-negative integer"))}if($.max!==void 0){if(!Number.isInteger($.max)||$.max<=0)J.push(f2("max","Must be a positive integer"))}if(J.length>0)throw N2("Invalid list parameters",J)}var O9={baseUrl:["TIMEBACK_API_BASE_URL","TIMEBACK_BASE_URL","CALIPER_BASE_URL"],authUrl:["TIMEBACK_API_AUTH_URL","TIMEBACK_AUTH_URL","CALIPER_TOKEN_URL"],clientId:["TIMEBACK_API_CLIENT_ID","TIMEBACK_CLIENT_ID","CALIPER_CLIENT_ID"],clientSecret:["TIMEBACK_API_CLIENT_SECRET","TIMEBACK_CLIENT_SECRET","CALIPER_CLIENT_SECRET"]},k2="http://purl.imsglobal.org/ctx/caliper/v1p2",x9="QUESTION_RESULT";import{z as L}from"zod/v4";import{z as Y}from"zod/v4";import{z as J2}from"zod/v4";import{z as U}from"zod/v4";import{z as w}from"zod/v4";import{z as V}from"zod/v4";import{z as x}from"zod/v4";import{z as f}from"zod/v4";import{z as G}from"zod/v4";import{z as B}from"zod/v4";import{z as Q}from"zod/v4";import{z as A2}from"zod/v4";var S=q8("caliper");class V9 extends C8{paths;constructor($){super({config:$,logger:S});this.paths=$.paths}async requestPaginated($,J={}){let Z=await this.request($,J),{events:K,pagination:H}=Z,F=(J.params?.offset??0)+K.length<H.total;return{data:K,hasMore:F,total:H.total}}}class k9 extends A8{constructor($,J,Z={}){z8(Z);let{max:K,...H}=Z;super({fetcher:(W,F)=>$.requestPaginated(W,F),path:J,params:H,max:K,logger:S})}}function P8($){let J=$.id??`urn:uuid:${crypto.randomUUID()}`,Z=$.metricsId??`urn:uuid:${crypto.randomUUID()}`;return{"@context":k2,id:J,type:"ActivityEvent",action:"Completed",actor:$.actor,object:$.object,eventTime:$.eventTime??new Date().toISOString(),profile:"TimebackProfile",generated:{id:Z,type:"TimebackActivityMetricsCollection",items:$.metrics,...$.attempt===void 0?{}:{attempt:$.attempt},...$.generatedExtensions?{extensions:$.generatedExtensions}:{}},extensions:$.extensions,...$.edApp===void 0?{}:{edApp:$.edApp},...$.session===void 0?{}:{session:$.session}}}function T8($){let J=$.id??`urn:uuid:${crypto.randomUUID()}`,Z=$.metricsId??`urn:uuid:${crypto.randomUUID()}`;return{"@context":k2,id:J,type:"TimeSpentEvent",action:"SpentTime",actor:$.actor,object:$.object,eventTime:$.eventTime??new Date().toISOString(),profile:"TimebackProfile",generated:{id:Z,type:"TimebackTimeSpentMetricsCollection",items:$.metrics},extensions:$.extensions,...$.edApp===void 0?{}:{edApp:$.edApp},...$.session===void 0?{}:{session:$.session}}}function FZ($){return{"@context":k2,id:$.id??`urn:uuid:${crypto.randomUUID()}`,type:"AssessmentItemEvent",action:"Started",profile:"AssessmentProfile",actor:$.actor,object:{...$.object,type:"AssessmentItem"},eventTime:$.eventTime??new Date().toISOString(),edApp:$.edApp,...$.session===void 0?{}:{session:$.session},...$.extensions===void 0?{}:{extensions:$.extensions}}}function OZ($){return{"@context":k2,id:$.id??`urn:uuid:${crypto.randomUUID()}`,type:"AssessmentItemEvent",action:"Completed",profile:"AssessmentProfile",actor:$.actor,object:{...$.object,type:"AssessmentItem"},eventTime:$.eventTime??new Date().toISOString(),edApp:$.edApp,...$.generated===void 0?{}:{generated:{...$.generated,type:"Response"}},...$.session===void 0?{}:{session:$.session},...$.extensions===void 0?{}:{extensions:$.extensions}}}function xZ($){let{id:J,...Z}=$.generated;return{"@context":k2,id:$.id??`urn:uuid:${crypto.randomUUID()}`,type:"GradeEvent",action:"Graded",profile:"GradingProfile",actor:$.actor,object:$.object,eventTime:$.eventTime??new Date().toISOString(),edApp:$.edApp,generated:{...Z,id:J??`urn:uuid:${crypto.randomUUID()}`,type:"Score",scoreType:x9},...$.session===void 0?{}:{session:$.session},...$.extensions===void 0?{}:{extensions:$.extensions}}}var wZ="http://purl.imsglobal.org/ctx/caliper/v1p2",DZ="urn:tag:auto-attach",W2={PERSON:"Person",ASSIGNABLE_DIGITAL_RESOURCE:"AssignableDigitalResource",ACTIVITY_METRIC:"ActivityMetric",TIME_SPENT_METRIC:"TimeSpentMetric",ACTIVITY_METRICS_COLLECTION:"ActivityMetricsCollection",TIME_SPENT_METRICS_COLLECTION:"TimeSpentMetricsCollection",COURSE_OFFERING:"CourseOffering",SOFTWARE_APPLICATION:"SoftwareApplication"},UZ=new Set(["ActivityEvent","TimeSpentEvent","AssignableEvent","ViewEvent"]);class q9{transformEnvelope($){let{data:J}=$;if(!Array.isArray(J))return $;let Z=J.map((K)=>w2(K)?MZ(K):K);return{...$,data:Z}}}function MZ($){let J={...$};if(!("@context"in J))J["@context"]=wZ;if(J.profile==="TimebackProfile")J.profile="AggregationProfile";if(w2(J.actor)&&J.actor.type==="TimebackUser")J.actor=LZ(J.actor);if(w2(J.object))J.object=jZ(J.object,J.type);if(w2(J.generated)){let Z=J.type;if(Z==="ActivityEvent")J.generated=VZ(J.generated);else if(Z==="TimeSpentEvent")J.generated=kZ(J.generated)}if(!J.session)J.session=DZ;return J}function LZ($){return{type:W2.PERSON,id:$.id}}function jZ($,J){if(!($.type==="TimebackActivityContext"&&J!==void 0&&UZ.has(J)))return{...$};let K={type:W2.ASSIGNABLE_DIGITAL_RESOURCE,id:$.id};if($.name)K.name=$.name;if(w2($.course)){let H={type:W2.COURSE_OFFERING,id:$.course.id};if($.course.name)H.name=$.course.name;K.isPartOf=H}if(w2($.app))K.extensions={app:{name:$.app.name,type:$.app.type??W2.SOFTWARE_APPLICATION}};return K}function C9($,J,Z,K){let W={id:typeof $?.id==="string"?$.id:`urn:uuid:${crypto.randomUUID()}`,type:J};if(Array.isArray($.items))W.items=$.items.map((F)=>{if(!w2(F))return F;let _=typeof F.type==="string"?F.type:"",O=_?_[0].toUpperCase()+_.slice(1):K;return{id:`urn:uuid:${crypto.randomUUID()}`,type:Z,metricType:O,metricValue:F.value}});for(let[F,_]of Object.entries($))if(F!=="id"&&F!=="type"&&F!=="items")W[F]=_;return W}function VZ($){return C9($,W2.ACTIVITY_METRICS_COLLECTION,W2.ACTIVITY_METRIC,"")}function kZ($){return C9($,W2.TIME_SPENT_METRICS_COLLECTION,W2.TIME_SPENT_METRIC,"Active")}function w2($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function qZ($,J=l2){return _9($,O9,J)}var CZ=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,v=L.string().min(1).regex(CZ,"must be a valid ISO 8601 datetime"),C2=L.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/,"must be a valid ISO 8601 date (YYYY-MM-DD)"),X=L.string().trim().min(1),K2=L.enum(["Reading","Language","Vocabulary","Social Studies","Writing","Science","FastMath","Math","None","Other"]).meta({id:"TimebackSubject",description:"Subject area"}),n=L.union([L.literal(-1),L.literal(0),L.literal(1),L.literal(2),L.literal(3),L.literal(4),L.literal(5),L.literal(6),L.literal(7),L.literal(8),L.literal(9),L.literal(10),L.literal(11),L.literal(12),L.literal(13)]).meta({id:"TimebackGrade",description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}),AZ=L.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),zZ=L.enum(["department","school","district","local","state","national"]),A9=L.enum(["administrator","aide","guardian","parent","proctor","relative","student","teacher"]),PZ=L.enum(["administrator","proctor","student","teacher"]),TZ=L.enum(["qti","text","audio","video","interactive","visual","course-material","assessment-bank"]),RZ=L.enum(["qti-test","qti-question","qti-stimulus","qti-test-bank"]),NZ=L.enum(["unit","course","resource-collection"]),IZ=L.enum(["choice","order","associate","match","hotspot","hottext","select-point","graphic-order","graphic-associate","graphic-gap-match","text-entry","extended-text","inline-choice","upload","slider","drawing","media","custom"]),bZ=L.enum(["easy","medium","hard"]),hZ=L.array(L.object({source:L.string(),learningObjectiveIds:L.array(L.string())})),SZ=L.object({consecutive_failures:L.number().int().min(1).optional(),stagnation_limit:L.number().int().min(1).optional()}).optional(),Y1=L.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]).nullable(),Q1=L.object({imsx_codeMajor:L.enum(["failure","success"]),imsx_severity:L.enum(["error","warning","status"]),imsx_description:L.string(),imsx_CodeMinor:L.object({imsx_codeMinorField:L.array(L.object({imsx_codeMinorFieldName:L.string(),imsx_codeMinorFieldValue:L.string()}))}).optional()}),EZ=Y.union([Y.url(),Y.string().regex(/^urn:/,"Must be a URL or URN")]),D2=Y.object({id:Y.url(),type:Y.literal("TimebackUser"),email:Y.string()}),R8=Y.object({id:Y.url(),type:Y.literal("TimebackActivityContext"),subject:K2,app:Y.object({name:Y.string()}),activity:Y.object({id:Y.url().optional(),name:Y.string()}).strict().optional(),course:Y.object({id:Y.url().optional(),name:Y.string().optional()}).strict(),process:Y.boolean().optional()}),z9=Y.object({"@context":Y.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),id:Y.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Y.string(),eventTime:v,profile:Y.literal("TimebackProfile"),actor:D2,action:Y.string(),object:R8,edApp:Y.object({id:Y.string(),name:Y.string().optional()}).optional()}),P9=Y.object({type:Y.enum(["totalQuestions","correctQuestions","xpEarned","masteredUnits"]),value:Y.number()}),vZ=Y.object({id:Y.url(),type:Y.literal("TimebackActivityMetricsCollection"),attempt:Y.number().optional(),items:Y.array(P9),extensions:Y.record(Y.string(),Y.unknown()).optional()}),yZ=z9.extend({type:Y.literal("ActivityEvent"),action:Y.literal("Completed"),generated:vZ}),T9=Y.object({type:Y.enum(["active","inactive","waste","unknown","anti-pattern"]),value:Y.number(),subType:Y.string().optional()}),fZ=Y.object({id:Y.url(),type:Y.literal("TimebackTimeSpentMetricsCollection"),items:Y.array(T9)}),gZ=z9.extend({type:Y.literal("TimeSpentEvent"),action:Y.literal("SpentTime"),generated:fZ}),dZ=Y.object({actor:D2,object:R8,metrics:Y.array(P9).min(1,"metrics must contain at least one metric"),eventTime:v.optional(),metricsId:Y.string().optional(),id:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional(),edApp:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),session:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),attempt:Y.number().int().min(1).optional(),generatedExtensions:Y.object({pctCompleteApp:Y.number().optional()}).loose().optional()}).strict(),mZ=Y.object({actor:D2,object:R8,metrics:Y.array(T9).min(1,"metrics must contain at least one metric"),eventTime:v.optional(),metricsId:Y.string().optional(),id:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional(),edApp:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),session:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional()}).strict(),lZ=Y.union([yZ,gZ]),B1=Y.object({sensor:Y.string(),sendTime:v,dataVersion:Y.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Y.array(lZ)}),uZ=Y.enum(["AnnotationProfile","AssessmentProfile","ToolUseProfile","GeneralProfile","FeedbackProfile","MediaProfile","SurveyProfile","ResourceManagementProfile","ForumProfile","AssignableProfile","GradingProfile","ReadingProfile","SessionProfile","SearchProfile","ToolLaunchProfile","TimebackProfile"]),l=Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]),c2=Y.object({id:EZ,type:Y.string(),name:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),R9=Y.object({"@context":Y.string().optional(),id:Y.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Y.string(),actor:Y.union([Y.string(),c2,D2]),action:Y.string(),object:l,eventTime:v,profile:uZ,edApp:l.optional(),generated:l.optional(),target:l.optional(),referrer:l.optional(),group:l.optional(),membership:l.optional(),session:l.optional(),federatedSession:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),w9=Y.object({sensor:X,sendTime:v,dataVersion:Y.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Y.array(R9).min(1,"data must contain at least one event")}),cZ=Y.object({sensor:X,events:Y.array(R9).min(1,"events must contain at least one event")}),D9=Y.object({limit:Y.number().int().positive().optional(),offset:Y.number().int().min(0).optional(),sensor:X.optional(),startDate:v.optional(),endDate:v.optional(),actorId:X.optional(),actorEmail:Y.email().optional()}).strict(),N9=Y.object({id:Y.string(),name:Y.string().optional(),isPartOf:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}),pZ=Y.object({id:Y.string(),attempt:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),startedAtTime:v.optional(),endedAtTime:v.optional(),duration:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}),aZ=Y.object({id:Y.string().optional(),scoreGiven:Y.number(),maxScore:Y.number().optional(),attempt:Y.union([Y.string(),Y.record(Y.string(),Y.unknown())]).optional(),comment:Y.string().optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}),iZ=Y.object({actor:Y.union([Y.string(),c2,D2]),object:N9,edApp:l,id:Y.string().optional(),eventTime:v.optional(),session:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),sZ=Y.object({actor:Y.union([Y.string(),c2,D2]),object:N9,edApp:l,generated:pZ.optional(),id:Y.string().optional(),eventTime:v.optional(),session:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),oZ=Y.object({actor:Y.union([Y.string(),c2,D2]),object:Y.string(),generated:aZ,edApp:l,id:Y.string().optional(),eventTime:v.optional(),session:l.optional(),extensions:Y.record(Y.string(),Y.unknown()).optional()}).strict(),F1=J2.object({name:X,targetUrl:J2.url("targetUrl must be a valid URL"),secret:X,active:J2.boolean(),sensor:J2.string().nullable().optional(),description:J2.string().nullable().optional()}).strict(),nZ=J2.enum(["string","number","boolean"]),rZ=J2.enum(["eq","neq","gt","gte","lt","lte","contains","notContains","in","notIn","startsWith","endsWith","regexp"]),O1=J2.object({webhookId:X,filterKey:X,filterValue:X,filterType:nZ,filterOperator:rZ,active:J2.boolean()}).strict(),p2=U.string().uuid(),U9=U.object({title:X,identifier:p2,uri:X}),tZ=U.object({identifier:p2,uri:X,lastChangeDateTime:X,title:X,creator:X,officialSourceURL:U.string().optional(),publisher:U.string().optional(),description:U.string().optional(),language:U.string().optional(),version:U.string().optional(),caseVersion:U.string().optional(),adoptionStatus:U.string().optional(),statusStartDate:U.string().optional(),statusEndDate:U.string().optional(),licenseUri:U.string().optional(),notes:U.string().optional(),subject:U.array(U.string()).optional(),extensions:U.unknown().optional()}),eZ=U.object({identifier:p2,uri:X,lastChangeDateTime:X,fullStatement:X,alternativeLabel:U.string().optional(),CFItemType:U.string().optional(),cfItemType:U.string().optional(),humanCodingScheme:U.string().optional(),listEnumeration:U.string().optional(),abbreviatedStatement:U.string().optional(),conceptKeywords:U.array(U.string()).optional(),notes:U.string().optional(),subject:U.array(U.string()).optional(),language:U.string().optional(),educationLevel:U.array(U.string()).optional(),CFItemTypeURI:U.unknown().optional(),licenseURI:U.unknown().optional(),statusStartDate:U.string().optional(),statusEndDate:U.string().optional(),extensions:U.unknown().optional()}),$5=U.object({identifier:p2,uri:X,lastChangeDateTime:X,associationType:X,originNodeURI:U9,destinationNodeURI:U9,sequenceNumber:U.number().optional(),extensions:U.unknown().optional()}),J5=U.object({CFItemTypes:U.array(U.unknown()).optional(),CFSubjects:U.array(U.unknown()).optional(),CFConcepts:U.array(U.unknown()).optional(),CFLicenses:U.array(U.unknown()).optional(),CFAssociationGroupings:U.array(U.unknown()).optional(),extensions:U.unknown().optional()}),w1=U.object({CFDocument:tZ,CFItems:U.array(eZ),CFAssociations:U.array($5),CFDefinitions:J5.optional(),extensions:U.unknown().optional()}),M9="https://www.w3.org/ns/credentials/v2",Z5=w.array(w.url()).min(3,"@context must include W3C, CLR, and OB context URLs").refine(($)=>$[0]===M9,`First @context entry must be "${M9}"`),I9=w.object({id:w.url(),type:w.literal("Image"),caption:w.string().optional()}),N8=w.object({id:w.url(),type:w.array(w.string()).min(1).refine(($)=>$.includes("Profile"),'type must include "Profile"'),name:w.string().optional(),url:w.string().url().optional(),phone:w.string().optional(),description:w.string().optional(),image:I9.optional(),email:w.string().email().optional()}),b9=w.object({type:X,proofPurpose:X,verificationMethod:X,created:w.iso.datetime(),proofValue:X,cryptosuite:w.string().optional()}),K5=w.object({id:X,type:w.literal("1EdTechJsonSchemaValidator2019")}),H5=w.object({id:w.string().url().optional(),narrative:w.string().optional()}),X5=w.object({id:w.url(),type:w.array(w.string()).min(1).refine(($)=>$.includes("Achievement"),'type must include "Achievement"'),name:X,description:X,criteria:H5,image:I9.optional(),achievementType:w.string().optional(),creator:N8.optional()}),W5=w.object({type:w.literal("IdentityObject"),identityHash:X,identityType:X,hashed:w.boolean(),salt:w.string().optional()}),Y5=w.enum(["exactMatchOf","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy"]),Q5=w.object({type:w.literal("Association"),associationType:Y5,sourceId:w.url(),targetId:w.url()}),G5=w.object({"@context":w.array(w.string()).min(1),id:w.url(),type:w.array(w.string()).min(1).refine(($)=>$.includes("VerifiableCredential"),'type must include "VerifiableCredential"'),issuer:N8,validFrom:w.iso.datetime(),validUntil:w.string().datetime().optional(),credentialSubject:w.object({id:w.string().optional()}),proof:w.array(b9).optional()}),B5=w.object({id:w.string().url().optional(),type:w.array(w.string()).min(1).refine(($)=>$.includes("ClrSubject"),'type must include "ClrSubject"'),identifier:w.array(W5).optional(),achievement:w.array(X5).optional(),verifiableCredential:w.array(G5).min(1),association:w.array(Q5).optional()}),U1=w.object({"@context":Z5,id:w.url(),type:w.array(w.string()).min(1).refine(($)=>$.includes("VerifiableCredential")&&$.includes("ClrCredential"),'type must include "VerifiableCredential" and "ClrCredential"'),issuer:N8,name:X,description:w.string().optional(),validFrom:w.iso.datetime(),validUntil:w.iso.datetime().optional(),credentialSubject:B5,proof:w.array(b9).optional(),credentialSchema:w.array(K5).optional()}),_5=V.object({staging:V.string().meta({description:"Course ID in staging environment"}).optional(),production:V.string().meta({description:"Course ID in production environment"}).optional()}).meta({id:"CourseIds",description:"Environment-specific course IDs (populated by sync)"}),F5=V.enum(["base","hole-filling","optional"]).meta({id:"CourseType",description:"Course classification type"}),O5=V.enum(["draft","testing","published","deactivated"]).meta({id:"PublishStatus",description:"Course publication status"}),x5=V.object({dailyXp:V.number().int().positive().meta({description:"Target XP to earn per day"}).optional(),dailyLessons:V.number().int().positive().meta({description:"Target lessons to complete per day"}).optional(),dailyActiveMinutes:V.number().int().positive().meta({description:"Target active learning minutes per day"}).optional(),dailyAccuracy:V.number().int().min(0).max(100).meta({description:"Target accuracy percentage (0-100)"}).optional(),dailyMasteredUnits:V.number().int().positive().meta({description:"Target units to master per day"}).optional()}).meta({id:"CourseGoals",description:"Daily learning goals for a course"}),w5=V.object({totalXp:V.number().int().positive().meta({description:"Total XP available in the course"}).optional(),totalLessons:V.number().int().positive().meta({description:"Total number of lessons/activities"}).optional(),totalGrades:V.number().int().positive().meta({description:"Total grade levels covered"}).optional()}).meta({id:"CourseMetrics",description:"Aggregate metrics for a course"}),h9=V.object({courseType:F5.optional(),isSupplemental:V.boolean().meta({description:"Whether this is supplemental to a base course"}).optional(),isCustom:V.boolean().meta({description:"Whether this is a custom course for an individual student"}).optional(),publishStatus:O5.optional(),contactEmail:V.email().meta({description:"Contact email for course issues"}).optional(),primaryApp:V.string().meta({description:"Primary application identifier"}).optional(),goals:x5.optional(),metrics:w5.optional()}).meta({id:"CourseMetadata",description:"Course metadata (matches API metadata object)"}),S9=V.object({courseCode:V.string().meta({description:"Course code (e.g., 'MATH101')"}).optional(),level:V.string().meta({description:"Course level (e.g., 'AP', 'Honors')"}).optional(),metadata:h9.optional()}).meta({id:"CourseDefaults",description:"Default properties that apply to all courses unless overridden"}),L9=V.object({level:V.string().meta({description:"Course level for this environment"}).optional(),sensor:V.url().meta({description:"Caliper sensor endpoint URL for this environment"}).optional(),launchUrl:V.url().meta({description:"LTI launch URL for this environment"}).optional(),metadata:h9.optional()}).meta({id:"CourseEnvOverrides",description:"Environment-specific course overrides (non-identity fields)"}),D5=V.object({staging:L9.meta({description:"Overrides for staging environment"}).optional(),production:L9.meta({description:"Overrides for production environment"}).optional()}).meta({id:"CourseOverrides",description:"Per-environment course overrides"}),U5=S9.extend({subject:K2.meta({description:"Subject area for this course"}),grade:n.meta({description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}).optional(),ids:_5.nullable().optional(),sensor:V.url().meta({description:"Caliper sensor endpoint URL for this course"}).optional(),launchUrl:V.url().meta({description:"LTI launch URL for this course"}).optional(),overrides:D5.optional()}).meta({id:"CourseConfig",description:"Configuration for a single course. Must have either grade or courseCode (or both)."}),L1=V.object({$schema:V.string().meta({description:"JSON Schema reference for editor support"}).optional(),name:V.string().min(1,"App name is required").meta({description:"Display name for your app"}),defaults:S9.meta({description:"Default properties applied to all courses"}).optional(),courses:V.array(U5).min(1,"At least one course is required").meta({description:"Courses available in this app"}),sensor:V.url().meta({description:"Default Caliper sensor endpoint URL for all courses"}).optional(),launchUrl:V.url().meta({description:"Default LTI launch URL for all courses"}).optional(),studio:V.object({telemetry:V.boolean().meta({description:"Enable anonymous usage telemetry for Studio (default: true)"}).optional().default(!0)}).meta({description:"Studio-specific configuration"}).optional()}).meta({id:"TimebackConfig",title:"Timeback Config",description:"Configuration schema for timeback.config.json files"}).refine(($)=>{return $.courses.every((J)=>J.grade!==void 0||J.courseCode!==void 0)},{message:"Each course must have either a grade or a courseCode",path:["courses"]}).refine(($)=>{let Z=$.courses.filter((K)=>K.grade!==void 0).map((K)=>`${K.subject}:${K.grade}`);return new Set(Z).size===Z.length},{message:"Duplicate (subject, grade) pair found; each must be unique",path:["courses"]}).refine(($)=>{let Z=$.courses.filter((K)=>K.courseCode!==void 0).map((K)=>K.courseCode);return new Set(Z).size===Z.length},{message:"Duplicate courseCode found; each must be unique",path:["courses"]}).refine(($)=>{return $.courses.every((J)=>{if(J.sensor!==void 0||$.sensor!==void 0)return!0;return[J.launchUrl,$.launchUrl,J.overrides?.staging?.launchUrl,J.overrides?.production?.launchUrl].filter(Boolean).length>0})},{message:"Each course must have an effective sensor. Either set `sensor` explicitly (top-level or per-course), or provide a `launchUrl` so sensor can be derived from its origin.",path:["courses"]}),Z2=x.union([v,C2]),V1=x.object({id:x.string(),role:x.string(),beginDate:Z2.nullable(),endDate:Z2.nullable(),metadata:x.object({goals:x.object({dailyXp:x.number().optional()}).optional(),metrics:x.object({totalXp:x.number().optional(),totalLessons:x.number().optional()}).optional()}).optional(),course:x.object({id:x.string(),title:x.string(),subjects:x.array(x.string()).nullable(),grades:x.array(x.string()).nullable()}),school:x.object({id:x.string(),name:x.string()}),testOutSupported:x.boolean(),testOutEligible:x.boolean()}),M5=x.object({activityMetrics:x.object({xpEarned:x.number(),totalQuestions:x.number(),correctQuestions:x.number(),masteredUnits:x.number()}),timeSpentMetrics:x.object({activeSeconds:x.number(),inactiveSeconds:x.number(),wasteSeconds:x.number()}),apps:x.array(x.string())}),L5=x.record(x.string(),x.record(x.string(),M5)),k1=x.object({message:x.string(),enrollmentId:x.string(),startDate:Z2,endDate:Z2,facts:L5,factsByApp:x.unknown()}),E9=x.object({email:x.email().optional(),studentId:X.optional()}).superRefine(($,J)=>{if(!$.email&&!$.studentId)J.addIssue({code:x.ZodIssueCode.custom,message:"must provide either email or studentId",path:["email"]}),J.addIssue({code:x.ZodIssueCode.custom,message:"must provide either email or studentId",path:["studentId"]})}),q1=x.object({subject:X,grade:X,courseId:X,orgSourcedId:X.optional()}),C1=x.object({userId:X}),A1=x.object({sourcedId:X.optional(),role:PZ.optional(),beginDate:v.optional(),metadata:x.record(x.string(),x.unknown()).optional()}),z1=x.object({fields:x.string().optional(),limit:x.number().int().positive().optional(),offset:x.number().int().nonnegative().optional(),sort:x.string().optional(),orderBy:x.enum(["asc","desc"]).optional(),filter:x.string().optional(),search:x.string().optional(),roles:x.array(A9).min(1),orgSourcedIds:x.array(X).optional()}),P1=E9.extend({startDate:Z2,endDate:Z2,timezone:x.string().optional()}),T1=E9.extend({weekDate:Z2,timezone:x.string().optional()}),R1=x.object({enrollmentId:X,startDate:Z2.optional(),endDate:Z2.optional(),timezone:x.string().optional()}),I1=f.object({email:f.email()}),b1=f.object({name:X.optional(),timeback_id:X.optional(),grade:X.optional(),subject:X.optional(),all:f.boolean().optional()}),h1=f.object({student_email:f.email(),timeback_id:X.optional(),subject:X.optional(),grade_rank:f.number().int().min(0).max(12).optional(),assessment_line_item_sourced_id:X.optional(),assessment_result_sourced_id:X.optional()}).superRefine(($,J)=>{let Z=!!$.timeback_id,K=!!$.subject,H=$.grade_rank!==void 0;if(!Z&&!K)J.addIssue({code:f.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["timeback_id"]}),J.addIssue({code:f.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["subject"]});if(H&&!K)J.addIssue({code:f.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]});let W=!!$.assessment_line_item_sourced_id,F=!!$.assessment_result_sourced_id;if(W!==F)J.addIssue({code:f.ZodIssueCode.custom,message:"assessment_line_item_sourced_id and assessment_result_sourced_id must be provided together",path:W?["assessment_result_sourced_id"]:["assessment_line_item_sourced_id"]})}),S1=f.object({student_email:f.email(),assignment_id:f.number().int().positive().optional(),timeback_id:X.optional(),subject:X.optional(),grade_rank:f.number().int().min(0).max(12).optional()}).superRefine(($,J)=>{let Z=$.assignment_id!==void 0,K=!!$.timeback_id,H=!!$.subject&&$.grade_rank!==void 0;if(!Z&&!K&&!H)J.addIssue({code:f.ZodIssueCode.custom,message:"Either assignment_id, timeback_id, or (subject and grade_rank) is required",path:["assignment_id"]});if($.grade_rank!==void 0&&!$.subject)J.addIssue({code:f.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]})}),g=G.enum(["active","tobedeleted"]),y=G.record(G.string(),G.unknown()).nullable().optional(),k=G.object({sourcedId:X,type:G.string().optional(),href:G.string().optional()}).strict(),Y2=G.union([C2,v]).transform(($)=>$.includes("T")?$:`${$}T00:00:00Z`),j5=G.object({roleType:G.enum(["primary","secondary"]),role:A9,org:k,userProfile:G.string().optional(),metadata:y,beginDate:Y2.optional(),endDate:Y2.optional()}).strict(),v1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string"),status:g.optional(),enabledUser:G.boolean(),givenName:X.describe("givenName must be a non-empty string"),familyName:X.describe("familyName must be a non-empty string"),middleName:X.optional(),username:X.optional(),email:G.email(),roles:G.array(j5).min(1,"roles must include at least one role"),userIds:G.array(G.object({type:X,identifier:X}).strict()).optional(),agents:G.array(k).optional(),grades:G.array(n).optional(),identifier:X.optional(),sms:X.optional(),phone:X.optional(),pronouns:X.optional(),password:X.optional(),metadata:y}).strict(),y1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string").optional(),status:g.optional(),title:X.describe("title must be a non-empty string"),org:k,courseCode:X.optional(),subjects:G.array(K2).optional(),grades:G.array(n).optional(),level:X.optional(),metadata:y}).strict(),f1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string").optional(),status:g.optional(),title:X.describe("title must be a non-empty string"),terms:G.array(k).min(1,"terms must have at least one item"),course:k,org:k,classCode:X.optional(),classType:G.enum(["homeroom","scheduled"]).optional(),location:X.optional(),grades:G.array(n).optional(),subjects:G.array(K2).optional(),subjectCodes:G.array(X).optional(),periods:G.array(X).optional(),metadata:y}).strict(),v9=G.enum(["true","false"]),g1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string").optional(),status:g.optional(),user:k,class:k,school:k.optional(),role:G.enum(["administrator","proctor","student","teacher"]),primary:v9.optional(),beginDate:C2.optional(),endDate:C2.optional(),metadata:y}).strict(),d1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),status:g,weight:G.number().nullable().optional(),metadata:y}).strict(),m1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),class:k,school:k,category:k,assignDate:Y2,dueDate:Y2,status:g,description:G.string().optional(),resultValueMin:G.number().nullable().optional(),resultValueMax:G.number().nullable().optional(),scoreScale:k.optional(),metadata:y}).strict(),l1=G.object({sourcedId:X.optional(),lineItem:k,student:k,class:k.optional(),scoreDate:Y2,scoreStatus:G.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),score:G.number().nullable().optional(),textScore:G.string().nullable().optional(),status:g,comment:G.string().nullable().optional(),metadata:y}).strict(),u1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),status:g.optional(),type:G.string(),class:k,course:k.nullable().optional(),scoreScaleValue:G.array(G.object({itemValueLHS:X,itemValueRHS:X,value:G.string().optional(),description:G.string().optional()}).strict()),minScore:G.number().optional(),maxScore:G.number().optional(),metadata:y}).strict(),c1=G.object({sourcedId:X.optional(),status:g.optional(),dateLastModified:v.optional(),title:X.describe("title must be a non-empty string"),description:G.string().nullable().optional(),class:k.nullable().optional(),parentAssessmentLineItem:k.nullable().optional(),scoreScale:k.nullable().optional(),resultValueMin:G.number().nullable().optional(),resultValueMax:G.number().nullable().optional(),component:k.nullable().optional(),componentResource:k.nullable().optional(),learningObjectiveSet:G.array(G.object({source:G.string(),learningObjectiveIds:G.array(G.string())})).optional().nullable(),course:k.nullable().optional(),metadata:y}).strict(),V5=G.object({learningObjectiveId:G.string(),score:G.number().optional(),textScore:G.string().optional()}),k5=G.array(G.object({source:G.string(),learningObjectiveResults:G.array(V5)})),p1=G.object({sourcedId:X.optional(),status:g.optional(),dateLastModified:v.optional(),metadata:y,assessmentLineItem:k,student:k,score:G.number().nullable().optional(),textScore:G.string().nullable().optional(),scoreDate:Y2,scoreScale:k.nullable().optional(),scorePercentile:G.number().nullable().optional(),scoreStatus:G.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),comment:G.string().nullable().optional(),learningObjectiveSet:k5.nullable().optional(),inProgress:G.string().nullable().optional(),incomplete:G.string().nullable().optional(),late:G.string().nullable().optional(),missing:G.string().nullable().optional()}).strict(),a1=G.object({sourcedId:X.optional(),status:g.optional(),name:X.describe("name must be a non-empty string"),type:zZ,identifier:X.optional(),parent:k.optional(),metadata:y}).strict(),i1=G.object({sourcedId:X.optional(),status:g.optional(),name:X.describe("name must be a non-empty string"),type:G.literal("school").optional(),identifier:X.optional(),parent:k.optional(),metadata:y}).strict(),s1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string"),status:g,title:X.describe("title must be a non-empty string"),startDate:Y2,endDate:Y2,type:G.enum(["gradingPeriod","semester","schoolYear","term"]),schoolYear:X.describe("schoolYear must be a non-empty string"),org:k,parent:k.optional(),children:G.array(k).optional(),metadata:y}).strict(),o1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),courseComponent:k,resource:k,status:g,metadata:y}).strict(),n1=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),course:k,status:g,metadata:y}).strict(),r1=G.object({sourcedId:X.describe("sourcedId must be a non-empty string"),role:G.enum(["student","teacher"]),primary:v9.optional(),beginDate:C2.optional(),endDate:C2.optional(),metadata:y}).strict(),t1=G.object({agentSourcedId:X.describe("agentSourcedId must be a non-empty string")}).strict(),e1=G.object({applicationName:X.describe("applicationName must be a non-empty string"),credentials:G.object({username:X.describe("username must be a non-empty string"),password:X.describe("password must be a non-empty string")})}).strict(),$6=G.object({sourcedId:X.describe("sourcedId must be a non-empty string")}).loose(),Q2=G.object({type:TZ,subject:K2.nullish(),grades:G.array(n).nullish(),language:G.string().nullish(),xp:G.number().nullish(),url:G.url().nullish(),keywords:G.array(G.string()).nullish(),learningObjectiveSet:hZ.nullish(),lessonType:G.string().nullish()}).passthrough(),q5=Q2.extend({type:G.literal("qti"),subType:RZ,questionType:IZ.optional(),difficulty:bZ.optional()}),C5=Q2.extend({type:G.literal("text"),format:G.string(),author:G.string().optional(),pageCount:G.number().optional()}),A5=Q2.extend({type:G.literal("audio"),duration:G.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),format:G.string(),speaker:G.string().optional()}),z5=Q2.extend({type:G.literal("video"),duration:G.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),captionsAvailable:G.boolean().optional(),format:G.string()}),P5=Q2.extend({type:G.literal("interactive"),launchUrl:G.url().optional(),toolProvider:G.string().optional(),instructionalMethod:G.string().optional(),courseIdOnFail:G.string().nullable().optional(),fail_fast:SZ}),T5=Q2.extend({type:G.literal("visual"),format:G.string(),resolution:G.string().optional()}),R5=Q2.extend({type:G.literal("course-material"),subType:NZ,author:G.string().optional(),format:G.string(),instructionalMethod:G.string().optional()}),N5=Q2.extend({type:G.literal("assessment-bank"),resources:G.array(G.string())}),I5=G.discriminatedUnion("type",[q5,C5,A5,z5,P5,T5,R5,N5]),J6=G.object({sourcedId:X.optional(),title:X.describe("title must be a non-empty string"),vendorResourceId:X.describe("vendorResourceId must be a non-empty string"),roles:G.array(G.enum(["primary","secondary"])).optional(),importance:G.enum(["primary","secondary"]).optional(),vendorId:G.string().optional(),applicationId:G.string().optional(),status:g.optional(),metadata:I5.nullable().optional()}).strict(),b5=G.object({url:X.describe("courseStructure.url must be a non-empty string"),skillCode:X.describe("courseStructure.skillCode must be a non-empty string"),lessonCode:X.describe("courseStructure.lessonCode must be a non-empty string"),title:X.describe("courseStructure.title must be a non-empty string"),"unit-title":X.describe("courseStructure.unit-title must be a non-empty string"),status:X.describe("courseStructure.status must be a non-empty string"),xp:G.number()}).loose(),Z6=G.object({course:G.object({sourcedId:X.describe("course.sourcedId must be a non-empty string").optional(),title:X.describe("course.title must be a non-empty string"),org:k,status:g,metadata:y}).strict(),courseStructure:G.record(G.string(),b5)}).strict(),h5=G.object({student:k}).loose(),K6=G.array(h5).min(1,"results must have at least one item"),S5=B.enum(["edulastic","mastery-track"]),E5=B.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]),y9=B.array(n),f9=B.record(B.string(),B.unknown()).optional(),g9=B.object({courseId:X,lessonTitle:X.optional(),launchUrl:X.optional(),toolProvider:S5,unitTitle:X.optional(),courseComponentSourcedId:X.optional(),vendorId:X.optional(),description:X.optional(),resourceMetadata:f9.nullable().optional(),grades:y9}),X6=g9.extend({lessonType:B.literal("test-out"),xp:B.number()}),W6=g9.extend({lessonType:B.literal("placement"),courseIdOnFail:X.nullable().optional(),xp:B.number().optional()}),j9=B.object({courseId:X,lessonType:E5,lessonTitle:X.optional(),unitTitle:X.optional(),courseComponentSourcedId:X.optional(),resourceMetadata:f9.nullable().optional(),xp:B.number().optional(),grades:y9.optional(),courseIdOnFail:X.nullable().optional()}),Y6=B.discriminatedUnion("testType",[j9.extend({testType:B.literal("qti"),qti:B.object({url:B.url(),title:X.optional(),metadata:B.record(B.string(),B.unknown()).optional()})}),j9.extend({testType:B.literal("assessment-bank"),assessmentBank:B.object({resources:B.array(B.object({url:B.url(),title:X.optional(),metadata:B.record(B.string(),B.unknown()).optional()})).min(1)})})]),Q6=B.object({student:X,lesson:X}),G6=B.object({student:X,lesson:X}),B6=B.object({courseId:X,userId:X,classId:X.optional()}),q2=B.object({type:B.enum(["component","resource"]),id:X}),v5=B.union([B.object({type:B.literal("set-skipped"),payload:B.object({target:q2,value:B.boolean()})}),B.object({type:B.literal("add-custom-resource"),payload:B.object({resource_id:X,parent_component_id:X,skipped:B.boolean().optional()})}),B.object({type:B.literal("move-item-before"),payload:B.object({target:q2,reference_id:X})}),B.object({type:B.literal("move-item-after"),payload:B.object({target:q2,reference_id:X})}),B.object({type:B.literal("move-item-to-start"),payload:B.object({target:q2})}),B.object({type:B.literal("move-item-to-end"),payload:B.object({target:q2})}),B.object({type:B.literal("change-item-parent"),payload:B.object({target:q2,new_parent_id:X,position:B.enum(["start","end"]).optional()})})]),_6=B.object({operation:v5,reason:X.optional()}),F6=B.object({studentId:X,componentResourceId:X,result:B.object({status:B.enum(["active","tobedeleted"]),metadata:B.record(B.string(),B.unknown()).optional(),score:B.number().optional(),textScore:X.optional(),scoreDate:B.string().datetime(),scorePercentile:B.number().optional(),scoreStatus:AZ,comment:X.optional(),learningObjectiveSet:B.array(B.object({source:X,learningObjectiveResults:B.array(B.object({learningObjectiveId:X,score:B.number().optional(),textScore:X.optional()}))})).optional(),inProgress:X.optional(),incomplete:X.optional(),late:X.optional(),missing:X.optional()})}),O6=B.object({student:X,lesson:X,applicationName:X.optional(),testId:X.optional(),skipCourseEnrollment:B.boolean().optional()}),x6=B.object({student:X,subject:K2}),w6=B.object({student:X,lesson:X}),D6=B.object({userId:X}),U6=B.object({userId:X,subject:B.enum(["Math","Reading","Language","Science"])}),M6=B.object({student:X,subject:K2,grade:n,testName:X.optional()}),L6=B.object({testName:X}),y5=B.object({student:X,subject:K2,grade:n,testName:X.optional()}),j6=B.object({items:B.array(y5)}),V6=B.object({spreadsheetUrl:B.url(),sheet:X}),k6=B.object({student:X,status:B.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:X.optional(),grade:n.optional(),limit:B.number().int().positive().max(3000).optional(),offset:B.number().int().nonnegative().optional()}),q6=B.object({student:X.optional(),status:B.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:X.optional(),grade:n.optional(),limit:B.number().int().positive().max(3000).optional(),offset:B.number().int().nonnegative().optional()}),C6=B.object({student:X,question:X,response:B.union([X,B.array(X)]).optional(),responses:B.record(B.string(),B.union([X,B.array(X)])).optional(),lesson:X,rendererOutcomes:B.object({score:B.number(),maxScore:B.number().min(0),isCorrect:B.boolean()}).optional(),playerState:B.string().optional()}).refine(($)=>$.response!==void 0||$.responses!==void 0,{message:"Either 'response' or 'responses' must be provided",path:["response","responses"]}).transform(($)=>{if($.response!==void 0&&$.responses===void 0)return{...$,responses:{RESPONSE:$.response}};return $}),A6=B.object({student:X,lesson:X,attempt:B.number().int().positive().optional()}),z6=B.object({student:X,lesson:X}),P6=B.object({student:X,lesson:X}),T6=B.object({student:X,course:X}),R6=B.object({student:X,lesson:X,applicationName:X.optional()}),N6=B.object({student:X,subject:K2}),I6=B.object({oneRosterSourcedId:X,subject:X}),b6=B.object({courseIds:B.array(X).min(1),rendererId:X,rendererUrl:B.url(),rendererVersion:X.optional(),suppressFeedback:B.boolean().optional(),suppressCorrectResponse:B.boolean().optional()}),h6=B.object({status:B.enum(["active","tobedeleted"]).optional()}),d9=Q.enum(["choice","text-entry","extended-text","inline-choice","match","order","associate","select-point","graphic-order","graphic-associate","graphic-gap-match","hotspot","hottext","slider","drawing","media","upload"]),I8=Q.enum(["single","multiple","ordered","record"]),b8=Q.enum(["identifier","boolean","integer","float","string","point","pair","directedPair","duration","file","uri"]),f5=Q.enum(["easy","medium","hard"]),g5=Q.enum(["linear","nonlinear"]),d5=Q.enum(["individual","simultaneous"]),h8=Q.enum(["show","hide"]),m9=Q.enum(["test","item","stimulus"]),E6=Q.enum(["QUESTION","LESSON"]),m5=Q.object({value:Q.array(Q.string())}).strict(),l9=Q.object({identifier:X,cardinality:I8,baseType:b8.optional(),correctResponse:m5}).strict(),u9=Q.object({identifier:X,cardinality:I8,baseType:b8.optional()}).strict(),c9=Q.object({identifier:X,cardinality:I8.optional(),baseType:b8,normalMaximum:Q.number().optional(),normalMinimum:Q.number().optional(),defaultValue:Q.object({value:Q.unknown().optional()}).strict().optional()}).strict(),l5=Q.object({outcomeIdentifier:X,variableIdentifier:X}).strict(),p9=Q.object({templateType:Q.enum(["match_correct","map_response"]),responseDeclarationIdentifier:X,outcomeIdentifier:X,correctResponseIdentifier:X,incorrectResponseIdentifier:X,inlineFeedback:l5.optional()}).strict(),u5=Q.object({source:X,learningObjectiveIds:Q.array(Q.string())}).strict(),S8=Q.object({subject:Q.string().optional(),grade:n.optional(),difficulty:f5.optional(),learningObjectiveSet:Q.array(u5).optional()}).loose(),a9=Q.object({outcomeIdentifier:X,identifier:X,showHide:h8,content:Q.string(),title:Q.string()}).strict(),i9=Q.object({outcomeIdentifier:X,identifier:X,showHide:h8,content:Q.string(),class:Q.array(Q.string())}).strict(),s9=Q.object({outcomeIdentifier:X,identifier:X,showHide:h8,content:Q.string(),class:Q.array(Q.string())}).strict(),o9=Q.object({href:X,type:X}).strict(),n9=Q.object({id:X,support:Q.string(),content:Q.string()}).strict(),v6=Q.object({page:Q.number().int().positive().optional(),limit:Q.number().int().positive().optional(),sort:Q.string().optional(),order:Q.enum(["asc","desc"]).optional()}).strict(),c5=Q.object({format:Q.string().pipe(Q.literal("xml")),xml:X,metadata:S8.optional()}).strict(),p5=Q.object({identifier:X,title:X,type:d9,qtiVersion:Q.string().optional(),timeDependent:Q.boolean().optional(),adaptive:Q.boolean().optional(),responseDeclarations:Q.array(l9).optional(),outcomeDeclarations:Q.array(u9).optional(),responseProcessing:p9.optional(),metadata:S8.optional(),modalFeedback:Q.array(a9).optional(),feedbackInline:Q.array(i9).optional(),feedbackBlock:Q.array(s9).optional()}).strict(),y6=Q.union([c5,p5]),f6=Q.object({identifier:X.optional(),title:X,type:d9,qtiVersion:Q.string().optional(),timeDependent:Q.boolean().optional(),adaptive:Q.boolean().optional(),responseDeclarations:Q.array(l9).optional(),outcomeDeclarations:Q.array(u9).optional(),responseProcessing:p9.optional(),metadata:S8.optional(),modalFeedback:Q.array(a9).optional(),feedbackInline:Q.array(i9).optional(),feedbackBlock:Q.array(s9).optional(),rawXml:Q.string(),content:Q.record(Q.string(),Q.unknown())}).strict(),g6=Q.object({identifier:X,response:Q.union([Q.string(),Q.array(Q.string())])}).strict(),r9=Q.object({identifier:X,href:X,sequence:Q.number().int().positive().optional()}).strict(),a5=Q.object({identifier:X,title:X,visible:Q.boolean(),required:Q.boolean().optional(),fixed:Q.boolean().optional(),sequence:Q.number().int().positive(),"qti-assessment-item-ref":Q.array(r9).optional()}).strict(),t9=Q.object({identifier:X,navigationMode:Q.string().pipe(g5),submissionMode:Q.string().pipe(d5),"qti-assessment-section":Q.array(a5)}).strict(),d6=Q.object({items:Q.array(r9).min(1)}).strict(),m6=Q.object({metadata:Q.record(Q.string(),Q.unknown()).optional()}).strict(),l6=Q.object({identifier:X,title:X,qtiVersion:Q.string().optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),timeLimit:Q.number().optional(),maxAttempts:Q.number().optional(),toolsEnabled:Q.record(Q.string(),Q.boolean()).optional(),metadata:Q.record(Q.string(),Q.unknown()).optional(),"qti-test-part":Q.array(t9),"qti-outcome-declaration":Q.array(c9).optional()}).strict(),u6=Q.object({identifier:X.optional(),title:X,qtiVersion:Q.string().optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),timeLimit:Q.number().optional(),maxAttempts:Q.number().optional(),toolsEnabled:Q.record(Q.string(),Q.boolean()).optional(),metadata:Q.record(Q.string(),Q.unknown()).optional(),"qti-test-part":Q.array(t9),"qti-outcome-declaration":Q.array(c9).optional()}).strict(),c6=Q.object({identifier:X,title:X,label:Q.string().optional(),language:Q.string().optional(),stylesheet:o9.optional(),content:Q.string(),catalogInfo:Q.array(n9).optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),metadata:Q.record(Q.string(),Q.unknown()).optional()}).strict(),p6=Q.object({identifier:X.optional(),title:X,label:Q.string().optional(),language:Q.string().optional(),stylesheet:o9.optional(),content:Q.string(),catalogInfo:Q.array(n9).optional(),toolName:Q.string().optional(),toolVersion:Q.string().optional(),metadata:Q.record(Q.string(),Q.unknown()).optional()}).strict(),a6=Q.object({xml:Q.string().optional(),schema:m9,entityId:Q.string().optional()}).strict(),i6=Q.object({xml:Q.array(Q.string()),schema:m9,entityIds:Q.array(Q.string())}).strict(),s6=Q.object({questionId:Q.string().optional(),userId:X,feedback:X,lessonId:X,humanApproved:Q.boolean().optional()}).strict(),i5=A2.enum(["creator_only","same_org","all_orgs"]),s5=A2.string().uuid(),n6=A2.email(),r6=A2.object({sql:X}),t6=A2.object({endpointName:X,sql:X,authMode:i5,description:X.optional()}),e6=A2.object({endpointId:s5});class e9{transport;eventTransformer;constructor($,J){this.transport=$,this.eventTransformer=J?.eventTransformer}send($,J){o(cZ,{sensor:$,events:J},"send events");let Z={sensor:$,sendTime:new Date().toISOString(),dataVersion:"http://purl.imsglobal.org/ctx/caliper/v1p2",data:J};return this.sendEnvelope(Z)}async sendEnvelope($){o(w9,$,"caliper envelope"),S.debug("Sending Caliper envelope",{sensor:$.sensor,eventCount:$.data.length});let J=this.eventTransformer?this.eventTransformer.transformEnvelope($):$,K=(await this.transport.request(this.transport.paths.send,{method:"POST",body:J}))?.jobId;return S.debug("Events sent",{jobId:K??"(none)"}),{jobId:K}}async validate($){let J=this.transport.paths.validate;if(!J)throw Error("validate() is not supported on this platform");o(w9,$,"caliper envelope"),S.debug("Validating Caliper envelope",{sensor:$.sensor,eventCount:$.data.length});let Z=await this.transport.request(J,{method:"POST",body:$});return S.debug("Validation complete",{status:Z.status}),Z}async list($={}){let J=this.transport.paths.list;if(!J)throw Error("list() is not supported on this platform");o(D9,$,"list events params"),S.debug("Listing events",{params:$});let Z={limit:$.limit??100,offset:$.offset??0};if($.sensor)Z.sensor=$.sensor;if($.startDate)Z.startDate=$.startDate;if($.endDate)Z.endDate=$.endDate;if($.actorId)Z.actorId=$.actorId;if($.actorEmail)Z.actorEmail=$.actorEmail;let K=await this.transport.request(J,{params:Z});return{events:K.events??[],pagination:K.pagination}}stream($={}){let J=this.transport.paths.list;if(!J)throw Error("stream() is not supported on this platform");let{max:Z,...K}=$;o(D9,K,"list events params"),z8($),S.debug("Streaming events",{params:$});let H={};if(K.limit!==void 0)H.limit=K.limit;if(K.offset!==void 0)H.offset=K.offset;if(K.sensor)H.sensor=K.sensor;if(K.startDate)H.startDate=K.startDate;if(K.endDate)H.endDate=K.endDate;if(K.actorId)H.actorId=K.actorId;if(K.actorEmail)H.actorEmail=K.actorEmail;return new k9(this.transport,J,{...H,max:Z})}async get($){let J=this.transport.paths.get;if(!J)throw Error("get() is not supported on this platform");u2($,"externalId"),S.debug("Getting event",{externalId:$});let Z=J.replace("{id}",encodeURIComponent($)),K=await this.transport.request(Z);if(!K.event)throw Error(`Event not found: ${$}`);return K.event}sendActivity($,J){o(dZ,J,"activity event");let Z=P8(J);return S.debug("Sending ActivityCompletedEvent",{eventId:Z.id,actor:J.actor.email,subject:J.object.subject,metricsCount:J.metrics.length}),this.send($,[Z])}sendTimeSpent($,J){o(mZ,J,"time spent event");let Z=T8(J);return S.debug("Sending TimeSpentEvent",{eventId:Z.id,actor:J.actor.email,subject:J.object.subject,metricsCount:J.metrics.length}),this.send($,[Z])}sendQuestionSeen($,J){o(iZ,J,"question seen event");let Z=FZ(J);return S.debug("Sending AssessmentItemEvent.Started",{eventId:Z.id,actor:J.actor,object:J.object.id}),this.send($,[Z])}sendQuestionAnswered($,J){o(sZ,J,"question answered event");let Z=OZ(J);return S.debug("Sending AssessmentItemEvent.Completed",{eventId:Z.id,actor:J.actor,object:J.object.id}),this.send($,[Z])}sendQuestionGraded($,J){o(oZ,J,"question graded event");let Z=xZ(J);return S.debug("Sending GradeEvent.Graded",{eventId:Z.id,actor:J.actor,object:J.object,scoreGiven:J.generated.scoreGiven}),this.send($,[Z])}}class $${transport;constructor($){this.transport=$}async getStatus($){let J=this.transport.paths.jobStatus;if(!J)throw Error("getStatus() is not supported on this platform");u2($,"jobId"),S.debug("Getting job status",{jobId:$});let Z=J.replace("{id}",encodeURIComponent($));return(await this.transport.request(Z)).job}async waitForCompletion($,J={}){u2($,"jobId"),o5(J);let{timeoutMs:Z=30000,pollIntervalMs:K=1000}=J,H=Date.now();S.debug("Waiting for job completion",{jobId:$,timeoutMs:Z,pollIntervalMs:K});while(Date.now()-H<Z){let W=await this.getStatus($);if(W.state==="completed")return S.info("Job completed",{jobId:$}),W;if(W.state==="failed")throw S.error("Job failed",{jobId:$}),Error(`Job ${$} failed`);await new Promise((F)=>{setTimeout(F,K)})}throw Error(`Job ${$} timed out after ${Z}ms`)}}function o5($){if(!$)return;let J=[];if($.timeoutMs!==void 0){if(!Number.isInteger($.timeoutMs)||$.timeoutMs<=0)J.push({path:"timeoutMs",message:"Must be a positive integer"})}if($.pollIntervalMs!==void 0){if(!Number.isInteger($.pollIntervalMs)||$.pollIntervalMs<=0)J.push({path:"pollIntervalMs",message:"Must be a positive integer"})}if(J.length>0)throw N2("Invalid polling options",J)}function n5($=l2){return class{transport;_provider;events;jobs;constructor(Z={}){let K=qZ(Z,$),H;if(K.mode==="transport")this.transport=K.transport,S.info("Client initialized with custom transport");else{let{provider:W}=K,{baseUrl:F,paths:_}=W.getEndpointWithPaths("caliper"),O=W.getTokenProvider("caliper");if(!O)throw Error("Caliper API requires authentication");if(this._provider=W,this.transport=new V9({baseUrl:F,tokenProvider:O,timeout:W.timeout,paths:_}),W.platform===H9)H=new q9;S.info("Client initialized",{platform:W.platform,env:W.env,baseUrl:F})}this.events=new e9(this.transport,{eventTransformer:H}),this.jobs=new $$(this.transport)}getTransport(){return this.transport}checkAuth(){if(!this._provider)throw Error("Cannot check auth: client initialized with custom transport");return this._provider.checkAuth()}}}var $7=n5();class H2 extends Error{course;env;constructor($,J){let Z=$.grade===void 0?$.courseCode??$.subject:`${$.subject} grade ${$.grade}`;super(`Course "${Z}" is missing a synced ID for ${J}. Run \`timeback resources push\` first.`);this.name="MissingSyncedCourseIdError",this.course=$,this.env=J}}class a2 extends Error{sensor;constructor($){super(`Invalid sensor URL "${$}". Sensor must be a valid absolute URL (e.g., "https://sensor.example.com") to support slug-based activity IDs.`);this.name="InvalidSensorUrlError",this.sensor=$}}var J$="/ims/oneroster/rostering/v1p2";function Z$($,J){return`${$.replace(/\/+$/,"")}/${J.replace(/^\/+/,"")}`}function r5($,J){return Z$($,`${J$}/courses/${J}`)}function t5($,J){return Z$($,`${J$}/users/${J}`)}function K$($,J){let Z=$.ids?.[J];if(!Z)throw new H2($,J);return Z}function e5($,J,Z){let K=K$(J,Z);return r5($,K)}function $0($){if($.courseCode)return $.courseCode;if($.grade!==void 0)return`${$.subject} G${String($.grade)}`;return $.subject}function E8($,J,Z){let K;try{K=new URL($)}catch{throw new a2($)}let H="grade"in J?`${J.subject}/g${String(J.grade)}`:J.code,W=K.pathname.replace(/\/+$/,"");return K.pathname=`${W}/activities/${H}/${encodeURIComponent(Z)}`,K.toString()}function H$($,J,Z,K,H,W,F){return{id:E8(H,$.course,$.id),type:"TimebackActivityContext",subject:J.subject,app:{name:Z},activity:{name:$.name},course:{id:e5(W,J,K),name:$0(J)},process:F??!0}}function J0($){let J=[];if($.totalQuestions!==void 0)J.push({type:"totalQuestions",value:$.totalQuestions});if($.correctQuestions!==void 0)J.push({type:"correctQuestions",value:$.correctQuestions});if($.xpEarned!==void 0)J.push({type:"xpEarned",value:$.xpEarned});if($.masteredUnits!==void 0)J.push({type:"masteredUnits",value:$.masteredUnits});return J}function Z0($,J){let Z=[{type:"active",value:Math.max(0,$)/1000}];if(J>0)Z.push({type:"inactive",value:Math.max(0,J)/1000});return Z}function K0($){return $===void 0?void 0:{pctCompleteApp:$}}function X$($,J){return{courseId:K$($,J)}}function W$($){if(!$)return;return`urn:uuid:${$}`}function Y$($,J,Z){return{id:t5($,J),type:"TimebackUser",email:Z}}function Q$($){let{sensor:J,timebackId:Z,email:K,payload:H,process:W,course:F,appName:_,apiEnv:O,onerosterBaseUrl:D,attempt:j,runId:A}=$,C=Y$(D,Z,K),q=H$(H,F,_,O,J,D,W??H.process),z=J0(H.metrics),N=K0(H.pctComplete),I=W$(A),r=X$(F,O),X2=P8({actor:C,object:q,metrics:z,eventTime:H.endedAt,generatedExtensions:N,extensions:r,attempt:j,session:I});return{sensor:J,actor:C,object:q,event:X2,payload:H,course:F,appName:_,apiEnv:O,email:K,timebackId:Z}}function i2($){let{sensor:J,timebackId:Z,email:K,payload:H,course:W,appName:F,apiEnv:_,onerosterBaseUrl:O,runId:D}=$,j=Y$(O,Z,K),A=H$(H,W,F,_,J,O),C=Z0(H.elapsedMs,H.pausedMs),q=X$(W,_),z=W$(D),N=T8({actor:j,object:A,metrics:C,eventTime:H.endedAt,extensions:q,session:z});return{sensor:J,actor:j,object:A,event:N,payload:{id:H.id,name:H.name,course:H.course,startedAt:H.startedAt,endedAt:H.endedAt,elapsedMs:H.elapsedMs,pausedMs:H.pausedMs},course:W,appName:F,apiEnv:_,email:K,timebackId:Z,runId:D}}import*as h from"zod";import*as b2 from"zod";var H0=b2.object({subject:G$,grade:B$}),X0=b2.object({code:E}),U2=b2.union([H0,X0]);class G2 extends Error{code;selector;count;constructor($,J,Z){super($);this.code=$,this.selector=J,this.count=Z}get selectorDescription(){if("grade"in this.selector)return`${this.selector.subject} grade ${this.selector.grade}`;return`code "${this.selector.code}"`}}function M2($,J){let Z;if("grade"in J)Z=$.filter((K)=>K.subject===J.subject&&K.grade===J.grade);else Z=$.filter((K)=>K.courseCode===J.code);if(Z.length===0)throw new G2("unknown_course",J);if(Z.length>1)throw new G2("ambiguous_course",J,Z.length);return Z[0]}var z2=R("handlers:activity:schema"),W0=h.object({totalQuestions:h.number().int().nonnegative().optional(),correctQuestions:h.number().int().nonnegative().optional(),xpEarned:h.number(),masteredUnits:h.number().int().nonnegative().optional()}).superRefine(o2);function Y0($){return Math.min(100,Math.max(0,$))}function s2($){if("grade"in $)return`${$.subject} grade ${$.grade}`;return`code "${$.code}"`}var Q0=h.object({id:E,name:E,course:U2,runId:h.string().uuid(),startedAt:h.iso.datetime(),endedAt:h.iso.datetime(),elapsedMs:h.number().int().nonnegative(),pausedMs:h.number().int().nonnegative()});function _$($,J,Z){let K=Q0.safeParse($);if(!K.success)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid payload",400,{details:K.error.flatten()})};let H=K.data,W;try{W=M2(J.courses,H.course)}catch(_){if(_ instanceof G2){let O=s2(H.course);if(_.code==="unknown_course")return z2.warn("Unknown course selector",{selector:H.course}),{ok:!1,response:M("UNKNOWN_COURSE",`Unknown course: ${O}`,400)};return z2.error("Ambiguous course selector",{selector:H.course}),{ok:!1,response:M("AMBIGUOUS_COURSE_SELECTOR","Ambiguous course selector in timeback.config.json",500)}}throw _}let F=h2(J,W,Z);if(!F){let _=s2(H.course);return z2.error("Missing sensor for course",{selector:H.course}),{ok:!1,response:M("MISSING_SENSOR",`Course "${_}" has no sensor configured.`,500)}}return{ok:!0,payload:H,course:W,sensor:F}}var G0=h.object({id:E,name:E,course:U2,process:h.boolean().optional(),runId:h.string().uuid(),endedAt:h.iso.datetime(),metrics:W0,pctComplete:h.number().optional().transform(($)=>$===void 0?void 0:Y0($))});function F$($,J,Z){let K=G0.safeParse($);if(!K.success)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid payload",400,{details:K.error.flatten()})};let H=K.data,W;try{W=M2(J.courses,H.course)}catch(_){if(_ instanceof G2){let O=s2(H.course);if(_.code==="unknown_course")return z2.warn("Unknown course selector",{selector:H.course}),{ok:!1,response:M("UNKNOWN_COURSE",`Unknown course: ${O}`,400)};return z2.error("Ambiguous course selector",{selector:H.course}),{ok:!1,response:M("AMBIGUOUS_COURSE_SELECTOR","Ambiguous course selector in timeback.config.json",500)}}throw _}let F=h2(J,W,Z);if(!F){let _=s2(H.course);return z2.error("Missing sensor for course",{selector:H.course}),{ok:!1,response:M("MISSING_SENSOR",`Course "${_}" has no sensor configured.`,500)}}return{ok:!0,payload:H,course:W,sensor:F}}import{getServiceUrlsForEnv as L$}from"@timeback/core";var v8=R("handlers:activity:attempts");async function O$($,J){let Z=[$,J].join("_");return`caliper_${await S2(Z)}`}function B0($,J){return $.find((Z)=>Z.scoreDate===J)}function _0($){let J=0;for(let Z of $){let H=Z.metadata?.attempt;if(typeof H==="number"&&H>J)J=H}return J}function F0($){let J=$.metadata;return typeof J?.attempt==="number"&&J.attempt>=1?J.attempt:1}async function x$($,J,Z,K){let H;try{H=await $.oneroster.assessmentResults.listAll({where:{status:"active","assessmentLineItem.sourcedId":J,"student.sourcedId":Z}})}catch{return v8.debug("No existing results found (line item may not exist yet)",{lineItemId:J}),1}if(H.length===0)return 1;let W=B0(H,K);if(W){let O=F0(W);return v8.debug("Retry detected, reusing attempt number",{lineItemId:J,timebackId:Z,endedAt:K,attempt:O}),O}let F=_0(H),_=F+1;return v8.debug("New attempt computed",{lineItemId:J,timebackId:Z,endedAt:K,maxAttempt:F,nextAttempt:_}),_}var w$=R("handlers:activity:completion");async function U$($){let{client:J,courseId:Z,timebackId:K,pctComplete:H,appName:W}=$;if(H!==100)return;let F=D$(Z),_=`timeback_sdk_${await S2(`mastery-completion_${Z}`)}`,O=`timeback_sdk_${await S2(`mastery-completion_${Z}_${K}`)}`;try{let D=!1;try{await J.oneroster.assessmentLineItems(_).get(),D=!0}catch{}if(!D)await J.oneroster.assessmentLineItems.create({sourcedId:_,title:`${W}: Complete`,status:"active",course:{sourcedId:F.course},componentResource:{sourcedId:F.componentResource},resultValueMin:0,resultValueMax:100,metadata:{appName:W}});let j=new Date().toISOString();await J.oneroster.assessmentResults.upsert(O,{status:"active",assessmentLineItem:{sourcedId:_},student:{sourcedId:K},score:100,scoreDate:j,scoreStatus:"fully graded",metadata:{isMasteryCompletion:!0,completedAt:j,appName:W}}),w$.debug("Created mastery completion entry",{courseId:Z,timebackId:K,lineItemId:_,resultId:O})}catch(D){let j=D instanceof Error?D.message:"Unknown error";w$.error("Failed to create mastery completion entry",{courseId:Z,timebackId:K,lineItemId:_,error:j})}}import{aggregateActivityMetrics as O0}from"@timeback/core/utils";var P2=R("handlers:activity:progress");function x0($,J){let Z=u(J),K=$.overrides?.[Z]?.metadata?.metrics,H=$.metadata?.metrics;return K?.totalLessons??H?.totalLessons}function w0($,J){let Z=$/J*100;return Math.min(100,Math.max(0,Math.round(Z)))}async function M$($){let{client:J,courseId:Z,timebackId:K,payload:H,course:W,env:F}=$;if(H.pctComplete!==void 0)return;let _=H.metrics.masteredUnits;if(typeof _!=="number"||_<=0)return;let O=x0(W,F);if(!O||O<=0){P2.debug("Skipping progress computation: totalLessons not configured",{courseId:Z});return}let D;try{D=(await J.edubridge.enrollments.list({userId:K})).find((N)=>N.course.id===Z)?.id}catch(z){let N=z instanceof Error?z.message:"Unknown error";P2.warn("Failed to fetch enrollments for progress computation",{courseId:Z,timebackId:K,error:N});return}if(!D){P2.warn("Skipping progress computation: enrollment not found for student/course",{courseId:Z,timebackId:K});return}let j=0;try{let z=await J.edubridge.analytics.getEnrollmentFacts({enrollmentId:D});j=O0(z).masteredUnits}catch(z){let N=z instanceof Error?z.message:"Unknown error";P2.warn("Failed to fetch enrollment facts for progress computation",{courseId:Z,timebackId:K,enrollmentId:D,error:N});return}let A=!0;try{if((await J.edubridge.analytics.getWeeklyFacts({studentId:K,weekDate:H.endedAt})).some((I)=>{if(I.activityId!==H.id)return!1;if(I.enrollmentId&&I.enrollmentId===D)return!0;if(I.courseId&&I.courseId===Z)return!0;return!1}))A=!1}catch(z){let N=z instanceof Error?z.message:"Unknown error";P2.warn("Failed to fetch weekly facts for retry-safe progress computation",{courseId:Z,timebackId:K,enrollmentId:D,activityId:H.id,error:N}),A=!1}let C=j+(A?_:0),q=w0(C,O);return P2.debug("Computed pctComplete",{courseId:Z,timebackId:K,enrollmentId:D,historicalMasteredUnits:j,currentMasteredUnits:_,shouldIncludeCurrentMasteredUnits:A,totalMastered:C,totalLessons:O,pctComplete:q}),{pctComplete:q}}var y8=R("handlers:activity:submit"),D0={computeProgress:M$,maybeWriteCompletionEntry:U$};function j$($,J){return $.timebackId??B2({email:$.email,client:J})}async function n2($,J,Z=D0){let K=u($.env),{userInfo:H,payload:W,course:F,sensor:_,preview:O=!1,runId:D}=J,j=F.ids?.[K];if(!j)throw new H2(F,K);let A=$.getClient(),C=await j$(H,A),q=W;if(W.pctComplete===void 0){let y2=await Z.computeProgress({client:A,courseId:j,timebackId:C,payload:W,course:F,env:$.env});if(y2)q={...W,pctComplete:y2.pctComplete}}let z;if(!O){let y2=E8(_,q.course,q.id),OJ=await O$(y2,j);z=await x$(A,OJ,C,q.endedAt)}let I=L$(K).oneroster,r=Q$({sensor:_,timebackId:C,email:H.email,payload:q,process:q.process,course:F,appName:$.appConfig.name,apiEnv:K,onerosterBaseUrl:I,attempt:z,runId:D}),X2=$.hooks?.beforeActivitySend,v2=X2?await X2(r):r,p=v2??r;if(O||v2===null)return{success:!0,preview:!0,sensor:p.sensor,actor:p.actor,object:p.object,event:p.event};return await A.caliper.events.send(p.sensor,[p.event]),await Z.maybeWriteCompletionEntry({client:A,courseId:j,timebackId:p.timebackId,pctComplete:p.payload.pctComplete,appName:p.appName}),y8.debug("Recorded completion",{courseSelector:W.course,activityId:W.id}),{success:!0}}async function V$($,J){let Z=u($.env),{userInfo:K,payload:H,course:W,sensor:F,runId:_}=J;if(!W.ids?.[Z])throw new H2(W,Z);let D=$.getClient(),j=await j$(K,D),C=L$(Z).oneroster,q=i2({sensor:F,timebackId:j,email:K.email,payload:H,course:W,appName:$.appConfig.name,apiEnv:Z,onerosterBaseUrl:C,runId:_}),z=$.hooks?.beforeTimeSpentSend,N=z?await z(q):q,I=N??q;if(N===null){y8.debug("Hook skipped time-spent send",{activityId:H.id});return}await D.caliper.events.send(I.sensor,[I.event]),y8.debug("Sent time-spent event",{activityId:H.id,elapsedMs:H.elapsedMs})}var E2=R("handlers:activity:submit");async function T2($,J){if($.mode==="custom"){let K=await $.getEmail(J);return K?{email:K}:void 0}let Z=await $.getUser(J);return Z?{email:Z.email,timebackId:Z.id}:void 0}function r2($){return async(J)=>{let Z=await T2($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=F$(await J.json(),$.appConfig,$.env);if(!K.ok)return K.response;let{payload:H,course:W,sensor:F}=K,_={id:H.id,name:H.name,course:H.course,process:H.process,endedAt:H.endedAt,metrics:H.metrics,pctComplete:H.pctComplete};try{if((await n2({env:$.env,api:$.api,appConfig:$.appConfig,getClient:$.getClient,hooks:$.hooks},{userInfo:Z,payload:_,course:W,sensor:F,preview:!1,runId:H.runId})).preview)return P({preview:!0});return E2.debug("Submitted activity",{runId:H.runId,activityId:H.id}),new Response(null,{status:204})}catch(O){if(O instanceof d)return E2.warn("Failed to resolve Timeback user",{code:O.code}),M("USER_RESOLUTION_FAILED","Unable to resolve Timeback identity",_2(O));if(O instanceof H2)return E2.warn("Course not synced",{course:O.course,env:O.env}),M("MISSING_SYNCED_COURSE_ID",O.message,503);if(O instanceof a2)return E2.error("Invalid sensor URL",{sensor:O.sensor}),M("INVALID_SENSOR_URL",O.message,500);let D=O instanceof Error?O.message:"Unknown error";return E2.error("Failed to submit activity",{error:D}),M("INTERNAL_ERROR",D,502)}}}var R2=R("handlers:activity:heartbeat"),t2=new Map,M0=300000;function L0(){let $=Date.now();for(let[J,Z]of t2)if($-Z>M0)t2.delete(J)}function j0($){return L0(),t2.has($)}function k$($){t2.set($,Date.now())}function e2($){return async(J)=>{let Z=await T2($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=_$(await J.json(),$.appConfig,$.env);if(!K.ok)return K.response;let{payload:H,course:W,sensor:F}=K,_=new Date(H.startedAt).getTime(),O=`${H.runId}:${_}`;if(j0(O))return R2.debug("Duplicate heartbeat, skipping",{runId:H.runId,windowKey:O}),P({duplicate:!0});let D=u($.env);if(!W.ids?.[D]){let C=new H2(W,D);return R2.warn("Course not synced",{course:H.course,env:D}),M("MISSING_SYNCED_COURSE_ID",C.message,503)}let A=$.getClient();try{let C=Z.timebackId??await B2({email:Z.email,client:A}),z=U0(D).oneroster,N=i2({sensor:F,timebackId:C,email:Z.email,payload:H,course:W,appName:$.appConfig.name,apiEnv:D,onerosterBaseUrl:z,runId:H.runId}),I=$.hooks?.beforeTimeSpentSend,r=I?await I(N):N,X2=r??N;if(r===null)return k$(O),R2.debug("Hook skipped heartbeat send",{runId:H.runId}),new Response(null,{status:204});return await A.caliper.events.send(X2.sensor,[X2.event]),k$(O),R2.debug("Sent heartbeat",{runId:H.runId,activityId:H.id,elapsedMs:H.elapsedMs}),new Response(null,{status:204})}catch(C){if(C instanceof d)return R2.warn("Failed to resolve Timeback user",{code:C.code}),M("USER_RESOLUTION_FAILED","Unable to resolve Timeback identity",_2(C));let q=C instanceof Error?C.message:"Unknown error";return R2.error("Failed to send heartbeat",{error:q}),M("INTERNAL_ERROR",q,502)}}}async function b$($,J,Z){if(Z.mode!=="sso")return L2.warn("SSO not configured"),P({error:"SSO not configured"},400);return await R$({req:$,env:J,clientId:Z.clientId,issuer:Z.issuer,redirectUri:Z.redirectUri,buildState:Z.buildState})}async function V0($,J,Z,K,H,W,F){try{let _=W.issuer??q$(H),O=I$(J,W.redirectUri);L2.debug("Exchanging auth code for tokens",{issuer:_,clientId:W.clientId});let D=await C$({issuer:_,clientId:W.clientId,clientSecret:W.clientSecret,code:$,redirectUri:O}),j=await A$({issuer:_,accessToken:D.access_token}),A=typeof j.identities==="string"?JSON.parse(j.identities):j.identities;L2.debug("SSO completed, resolving Timeback user",{user:{...j,identities:A}});let C=await F2({env:H,apiCredentials:F.credentials,userInfo:j,client:F.getClient()});L2.debug("Timeback user resolved",{timebackId:C.id});let q={user:C,idp:{tokens:D,userInfo:j},state:Z,req:K,redirect:$8,json:P};return W.onCallbackSuccess(q)}catch(_){let O=_ instanceof Error?_:Error("Unknown error"),D=_ instanceof d?_.code:"token_exchange_failed";if(L2.error("SSO callback failed",{error:O.message,errorCode:D}),W.onCallbackError)return W.onCallbackError(z$(O,D,Z,K));if(_ instanceof d)return P({error:O.message},_2(_));return P({error:O.message},500)}}async function h$($,J,Z,K){if(Z.mode!=="sso")return L2.warn("SSO not configured"),P({error:"SSO not configured"},400);let{url:H,code:W,errorParam:F,state:_}=N$($);if(F)return P$(F,H,_,$,Z.onCallbackError);if(!W)return T$(_,$,Z.onCallbackError);return await V0(W,H,_,$,J,Z,K)}function J8($){let{env:J,identity:Z}=$;return(K)=>b$(K,J,Z)}function Z8($){let{env:J,identity:Z,api:K}=$;return(H)=>h$(H,J,Z,K)}function K8(){return()=>$8("/")}var S$=($)=>{return async(J)=>{return await $.getClient().powerpath.assessments.getAssessmentProgress({student:J.student,lesson:J.lesson,attempt:J.attempt})}};var E$=($)=>{return async(J)=>{return(await $.getClient().powerpath.assessments.getAttempts({student:J.student,lesson:J.lesson})).attempts.map((K)=>({attempt:K.attempt??void 0,score:K.score,startedAt:K.startedAt??void 0,completedAt:K.completedAt??void 0,scoreStatus:K.scoreStatus}))}};var v$=($)=>{return async(J)=>{let Z=$.getClient().powerpath.assessments,K=await Z.getAssessmentProgress({student:J.student,lesson:J.lesson}),H;if(K.lessonType!=="powerpath-100"&&K.finalized!==!0){try{H=await Z.finalStudentAssessmentResponse({student:J.student,lesson:J.lesson})}catch{}K=await Z.getAssessmentProgress({student:J.student,lesson:J.lesson})}let W=K.lessonType==="powerpath-100"?!0:K.finalized===!0;return{...H??{},score:K.score??0,totalQuestions:K.totalQuestions,correctQuestions:K.correctQuestions,accuracy:K.accuracy,finalized:W}}};function y$($){let J=$.metadata?.questionCount;return typeof J==="number"?J:void 0}function H8($){return{id:$.id,title:$.title,difficulty:$.difficulty,content:$.content?{rawXml:$.content.rawXml}:void 0,index:$.index,url:$.url,humanApproved:$.humanApproved,response:$.response,responses:$.responses,correct:$.correct,result:$.result,resultId:$.resultId,learningObjectives:$.learningObjectives}}function f$($,J){if(!J)return{lessonId:$,lessonType:"quiz",score:0,seenQuestions:0,finalized:!1};return{lessonId:$,lessonType:J.lessonType,attempt:J.attempt,score:J.score??0,questionCount:J.totalQuestions,seenQuestions:J.lessonType==="powerpath-100"?J.seenQuestions.length:0,finalized:J.lessonType==="powerpath-100"?!1:J.finalized}}function g$($){let J=$.questions,Z=J.filter((K)=>K.response!==void 0).map((K)=>K.id);return{questions:J.map(H8),answeredIds:Z,score:$.score??0,finalized:$.finalized,complete:$.finalized}}function k0($){if($.lessonType==="powerpath-100")return $.responseResult.isCorrect;return!1}function q0($){if($.lessonType==="powerpath-100")return $.powerpathScore;return 0}function d$($){let J=q0($);return{correct:k0($),score:J,complete:$.lessonType==="powerpath-100"&&J>=100,questionResult:$.questionResult}}function m$($,J){return Array.from(new Set($.map((Z)=>Z.ids?.[J]).filter((Z)=>Boolean(Z))))}function l$($){return String($.sourcedId??"")}var u$=($)=>{return async(J={})=>{let Z=$.getClient(),K=u($.env),H;if(J.course){let _=M2($.appConfig.courses,J.course).ids?.[K];H=_?[_]:[]}else H=m$($.appConfig.courses,K);let W=[];for(let F of H){let _=await Z.oneroster.courses(F).components({where:{status:"active"}}),O=f8(_);for(let D of O){let j=l$(D);if(!j)continue;let A=await Z.oneroster.courses.componentResources({where:{"courseComponent.sourcedId":j,status:"active"}}),C=f8(A);for(let q of C){if(!q.sourcedId)continue;let z=q.metadata??{},N=y$(q);W.push({id:q.sourcedId,name:q.title??q.sourcedId,type:z.lessonType??"quiz",courseId:F,questionCount:N,metadata:z})}}}return W}};class X8 extends Error{name="LessonTypeMismatchError"}var c$=($)=>{return async(J)=>{let Z=$.getClient().powerpath.assessments;if(J.lessonType==="powerpath-100"){let H=await Z.getNextQuestion({student:J.student,lesson:J.lesson});return H8(H.question)}let K=await Z.getAssessmentProgress({student:J.student,lesson:J.lesson});if(K.lessonType==="powerpath-100"){if(J.lessonType!==void 0)throw new X8(`Expected quiz progress but got powerpath-100 for lesson ${J.lesson}`);let H=await Z.getNextQuestion({student:J.student,lesson:J.lesson});return H8(H.question)}return g$(K)}};var C0=R("lessons:start"),p$=($)=>{return async(J)=>{let Z=$.getClient().powerpath.assessments,K=J.lesson,H=J.student,W=await Z.getAssessmentProgress({student:H,lesson:K});if(J.forceNew){if(W.lessonType!=="powerpath-100"&&W.finalized!==!0)try{await Z.finalStudentAssessmentResponse({student:H,lesson:K})}catch{}try{await Z.createNewAttempt({student:H,lesson:K}),W=await Z.getAssessmentProgress({student:H,lesson:K})}catch(F){C0.warn("Failed to create new lesson attempt",{lessonId:K,error:F})}}else if(W.lessonType!=="powerpath-100"&&W.finalized!==!0&&(W.questions?.length??0)===0)try{await Z.createNewAttempt({student:H,lesson:K}),W=await Z.getAssessmentProgress({student:H,lesson:K})}catch{}return f$(K,W)}};var a$=($)=>{return async(J)=>{let K=await $.getClient().powerpath.assessments.updateStudentQuestionResponse({student:J.student,lesson:J.lesson,question:J.question,responses:{RESPONSE:J.response}});return d$(K)}};function m($){return{list:u$($),start:p$($),next:c$($),submit:a$($),complete:v$($),attempts:E$($),attemptDetails:S$($)}}async function a($,J){let Z=await T2($.identity,J);if(!Z)return null;if(Z.timebackId)return Z.timebackId;return await B2({email:Z.email,client:$.getClient()})}async function i$($,J){let Z=await T2($.identity,J);return Boolean(Z)}var A0=R("handlers:lessons");function c($,J){if($ instanceof d)return M("USER_RESOLUTION_FAILED","Unable to resolve Timeback identity",_2($));if($ instanceof X8)return M("LESSON_TYPE_MISMATCH",$.message,400);let Z=$ instanceof Error?$.message:"Unknown error";return A0.error(J,{error:Z}),M("INTERNAL_ERROR",Z,500)}import*as i from"zod";var z0=i.object({course:U2.optional()}).partial(),P0=i.object({lessonId:E,forceNew:i.boolean().optional()}),T0=i.object({lessonId:E,lessonType:E.optional()}),R0=i.object({lessonId:E,questionId:E,response:E}),N0=i.object({lessonId:E}),I0=i.object({lessonId:E}),b0=i.object({lessonId:E,attempt:i.number().int().positive()});async function h0($){try{let J=await $.json();if(!J||typeof J!=="object"||Array.isArray(J))return null;return J}catch{return null}}async function j2($,J){let Z=await h0($);if(!Z)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid JSON body",400)};let K=J.safeParse(Z);if(!K.success)return{ok:!1,response:M("INVALID_PAYLOAD","Invalid payload",400,{details:K.error.flatten()})};return{ok:!0,payload:K.data}}async function s$($){return await j2($,z0)}async function o$($){return await j2($,P0)}async function n$($){return await j2($,T0)}async function r$($){return await j2($,R0)}async function t$($){return await j2($,N0)}async function e$($){return await j2($,I0)}async function $J($){return await j2($,b0)}function W8($){let J=m($);return async(Z)=>{try{let K=await $J(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.attemptDetails({lesson:K.payload.lessonId,attempt:K.payload.attempt,student:H});return P(W)}catch(K){return c(K,"Failed to fetch lesson attempt details")}}}function Y8($){let J=m($);return async(Z)=>{try{let K=await e$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.attempts({lesson:K.payload.lessonId,student:H});return P({attempts:W})}catch(K){return c(K,"Failed to list lesson attempts")}}}function Q8($){let J=m($);return async(Z)=>{try{let K=await t$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.complete({lesson:K.payload.lessonId,student:H});return P(W)}catch(K){return c(K,"Failed to complete lesson")}}}function G8($){let J=m($);return async(Z)=>{try{if(!await i$($,Z))return M("UNAUTHORIZED","Unauthorized",401);let K=await s$(Z);if(!K.ok)return K.response;let H=await J.list({course:K.payload.course});return P({lessons:H})}catch(K){return c(K,"Failed to list lessons")}}}function B8($){let J=m($);return async(Z)=>{try{let K=await n$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.next({lesson:K.payload.lessonId,lessonType:K.payload.lessonType,student:H});return P(W)}catch(K){return c(K,"Failed to fetch next lesson question")}}}function _8($){let J=m($);return async(Z)=>{try{let K=await o$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.start({lesson:K.payload.lessonId,student:H,forceNew:K.payload.forceNew});return P(W)}catch(K){return c(K,"Failed to start lesson")}}}function F8($){let J=m($);return async(Z)=>{try{let K=await r$(Z);if(!K.ok)return K.response;let H=await a($,Z);if(!H)return M("UNAUTHORIZED","Unauthorized",401);let W=await J.submit({lesson:K.payload.lessonId,question:K.payload.questionId,response:K.payload.response,student:H});return P(W)}catch(K){return c(K,"Failed to submit lesson answer")}}}function JJ($,J){let Z=new Map;for(let K of $){let H=K.ids?.[J];if(H)Z.set(H,K)}return Z}function ZJ($,J){return $.map((Z)=>{let K=J.get(Z.course.id);return{id:Z.course.id,code:K?.courseCode??Z.course.id,name:Z.course.title}})}function KJ($){return $.map((J)=>J.metadata?.goals).find(Boolean)}function HJ($){let J=new Date(Date.UTC($.getUTCFullYear(),$.getUTCMonth(),$.getUTCDate())),Z=new Date(Date.UTC($.getUTCFullYear(),$.getUTCMonth(),$.getUTCDate(),23,59,59,999));return{start:J,end:Z}}function g8($){return Object.values($).reduce((J,Z)=>{return J+Object.values(Z).reduce((K,H)=>{return K+(H.activityMetrics?.xpEarned??0)},0)},0)}async function O8($,J,Z,K){let H=await $.edubridge.enrollments.list({userId:J.id}),W=JJ(Z.courses,K),F=ZJ(H,W),_=KJ(H),{start:O,end:D}=HJ(new Date),[j,A]=await Promise.all([$.edubridge.analytics.getActivity({studentId:J.id,startDate:O.toISOString(),endDate:D.toISOString()}),$.edubridge.analytics.getActivity({studentId:J.id,startDate:"2000-01-01",endDate:D.toISOString()})]);return{id:J.id,email:J.email,name:J.name,school:J.school,grade:J.grade,courses:F.length?F:void 0,goals:_,xp:{today:g8(j),all:g8(A)}}}var d8=R("handlers:user");async function S0($,J){if($.mode==="custom"){let K=await $.getEmail(J);if(!K)return;return{sub:K,email:K}}let Z=await $.getUser(J);if(!Z)return;return{sub:Z.id,email:Z.email}}function E0($){if(d8.warn("Timeback user resolution failed",{code:$.code}),$.code==="timeback_user_ambiguous")return M("USER_AMBIGUOUS","Timeback user resolution ambiguous",409);if($.code==="timeback_user_not_found")return M("USER_NOT_FOUND","Timeback user not found",404);return M("USER_RESOLUTION_FAILED",$.message,502)}function x8($){return async(J)=>{try{let Z=await S0($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=u($.env),H=$.getClient();try{let W=await F2({env:$.env,apiCredentials:$.api,userInfo:Z,client:H}),F=await O8(H,W,$.appConfig,K);return P(F)}catch(W){if(W instanceof d)return E0(W);let F=W instanceof Error?W.message:"Unknown error";return d8.error("Failed to build user profile",{error:F}),M("INTERNAL_ERROR",F,502)}}catch(Z){let K=Z instanceof Error?Z.message:"Unknown error";return d8.error("Unhandled error in user handler",{error:K}),M("INTERNAL_ERROR",K,500)}}}var m8=R("handlers:user:verify");async function v0($,J){if($.mode==="custom"){let K=await $.getEmail(J);if(!K)return;return{sub:K,email:K}}let Z=await $.getUser(J);if(!Z)return;return{sub:Z.id,email:Z.email}}function w8($){return async(J)=>{try{let Z=await v0($.identity,J);if(!Z)return M("UNAUTHORIZED","Unauthorized",401);let K=$.getClient();try{let H=await F2({env:$.env,apiCredentials:$.api,userInfo:Z,client:K});return P({verified:!0,timebackId:H.id})}catch(H){if(H instanceof d){if(m8.warn("Timeback user resolution failed",{code:H.code}),H.code==="timeback_user_ambiguous")return M("USER_AMBIGUOUS","Timeback user resolution ambiguous",409);if(H.code==="timeback_user_not_found")return P({verified:!1});return M("USER_RESOLUTION_FAILED",H.message,502)}let W=H instanceof Error?H.message:"Unknown error";return m8.error("Failed to verify user",{error:W}),M("INTERNAL_ERROR",W,502)}}catch(Z){let K=Z instanceof Error?Z.message:"Unknown error";return m8.error("Unhandled error in verify handler",{error:K}),M("INTERNAL_ERROR",K,500)}}}import*as T from"zod";var y0=T.object({email:T.email(),timebackId:T.string().optional()}),f0=T.object({id:E,name:E,course:U2}),g0=T.object({totalQuestions:T.number().int().nonnegative().optional(),correctQuestions:T.number().int().nonnegative().optional(),xpEarned:T.number(),masteredUnits:T.number().int().nonnegative().optional(),pctComplete:T.number().min(0).max(100).optional()}).superRefine(o2),d0=T.object({startedAt:T.union([T.iso.datetime(),T.date()]).optional(),endedAt:T.union([T.iso.datetime(),T.date()]).optional(),activeMs:T.number().int().nonnegative().optional(),inactiveMs:T.number().int().nonnegative().optional()}),m0=T.uuid().optional(),XJ=T.object({user:y0,activity:f0,metrics:g0,time:d0.optional(),runId:m0});var WJ=R("activity:record");class YJ extends Error{code="VALIDATION_ERROR";details;constructor($,J){super($);this.name="ActivityRecordValidationError",this.details=J}}class l8 extends Error{code="COURSE_ERROR";constructor($){super($);this.name="ActivityRecordCourseError"}}function l0($){let J=$.time?.endedAt?typeof $.time.endedAt==="string"?$.time.endedAt:$.time.endedAt.toISOString():new Date().toISOString();return{id:$.activity.id,name:$.activity.name,course:$.activity.course,endedAt:J,metrics:{totalQuestions:$.metrics.totalQuestions,correctQuestions:$.metrics.correctQuestions,xpEarned:$.metrics.xpEarned,masteredUnits:$.metrics.masteredUnits},pctComplete:$.metrics.pctComplete}}function u0($,J){let Z=$.time,K=Z.activeMs??0,H=Z.inactiveMs??0,W;if(Z.startedAt)W=typeof Z.startedAt==="string"?Z.startedAt:Z.startedAt.toISOString();else if(Z.activeMs!==void 0||Z.inactiveMs!==void 0){let F=new Date(J),_=K+H;W=new Date(F.getTime()-_).toISOString()}else W=J;return{id:$.activity.id,name:$.activity.name,course:$.activity.course,startedAt:W,endedAt:J,elapsedMs:K,pausedMs:H}}function c0($,J,Z){let K;try{K=M2($.courses,J)}catch(W){if(W instanceof G2)throw new l8(W.code==="unknown_course"?`Unknown course: ${JSON.stringify(J)}`:"Ambiguous course selector in timeback.config.json");throw W}let H=h2($,K,Z);if(!H)throw new l8(`Course "${JSON.stringify(J)}" has no sensor configured.`);return{course:K,sensor:H}}var p0={recordCompletion:n2,sendTimeSpent:V$};function u8($,J=p0){return async(Z)=>{let K=XJ.safeParse(Z);if(!K.success)throw WJ.warn("Invalid record input",{error:K.error.flatten()}),new YJ("Invalid activity record input",K.error.flatten());let H=K.data,{course:W,sensor:F}=c0($.appConfig,H.activity.course,$.env),_=l0(H),O={env:$.env,api:$.api,appConfig:$.appConfig,getClient:$.getClient,hooks:$.hooks};if(await J.recordCompletion(O,{userInfo:{email:H.user.email,timebackId:H.user.timebackId},payload:_,course:W,sensor:F,preview:!1,runId:H.runId}),H.time){let D=u0(H,_.endedAt);await J.sendTimeSpent(O,{userInfo:{email:H.user.email,timebackId:H.user.timebackId},payload:D,course:W,sensor:F,runId:H.runId})}WJ.debug("Recorded activity",{activityId:H.activity.id,hasTime:!!H.time})}}var D8=R("user:verify");function c8($){return async(J)=>{D8.debug("Verifying user by email");let Z=$.getClient();try{let K=await B2({email:J,client:Z});return D8.debug("User verified",{timebackId:K}),{verified:!0,timebackId:K}}catch(K){if(K instanceof d){if(K.code==="timeback_user_not_found")return D8.debug("User not found in Timeback"),{verified:!1};throw K}let H=K instanceof Error?K.message:"Unknown error";throw D8.error("Failed to verify user",{error:H}),K}}}var p8=R("user:getProfile");function a8($){return async(J)=>{p8.debug("Building user profile by email");let Z=$.getClient(),K=u($.env);try{let H=await F2({env:$.env,apiCredentials:$.api,userInfo:{sub:J,email:J},client:Z}),W=await O8(Z,H,$.appConfig,K);return p8.debug("User profile built",{userId:W.id}),W}catch(H){if(H instanceof d)throw H;let W=H instanceof Error?H.message:"Unknown error";throw p8.error("Failed to build user profile",{error:W}),H}}}async function i0($){let{loadConfig:J}=await import("./chunk-2c0emnzy.js");return await J($)}function s0($){return $.map((J)=>{if(J.grade!==void 0)return J;if(J.courseCode)return J;throw Error(`Invalid course config: missing both grade and courseCode for subject "${J.subject}"`)})}async function _J($){if(!globalThis.process?.versions?.node&&!globalThis.Bun)throw Error("createTimeback() requires Node.js or Bun — it reads timeback.config.json from the filesystem. "+"For edge runtimes (Cloudflare Workers, Vercel Edge, etc.), use createTimebackIdentity() from '@timeback/sdk' instead.");QJ({logger:$.logger,logLevel:$.logLevel});let J=GJ($.env),Z=await i0({configPath:$.configPath});if(!Z.success)throw Error(`Failed to load timeback config: ${Z.error}`);let K=Z.config,H,W=()=>{if(!H)H=new a0({env:u(J),auth:{clientId:$.api.clientId,clientSecret:$.api.clientSecret}});return H},F=$.hooks,_=(j,A)=>BJ(j,F,A),O={env:J,identity:$.identity,appConfig:{name:K.name,sensor:K.sensor,launchUrl:K.launchUrl,courses:s0(K.courses)},api:$.api,getClient:W,hooks:F},D={env:J,identity:$.identity,api:{credentials:$.api,getClient:W}};return{config:$,handle:{activity:{heartbeat:_("activity.heartbeat",e2(O)),submit:_("activity.submit",r2(O))},identity:{signIn:_("identity.signIn",J8(D)),callback:_("identity.callback",Z8(D)),signOut:K8()},lessons:{list:_("lessons.list",G8(O)),start:_("lessons.start",_8(O)),next:_("lessons.next",B8(O)),submit:_("lessons.submit",F8(O)),complete:_("lessons.complete",Q8(O)),attempts:_("lessons.attempts",Y8(O)),attemptDetails:_("lessons.attemptDetails",W8(O))},user:{me:_("user.me",x8(O)),verify:_("user.verify",w8(O))}},activity:{record:u8({...O})},lessons:m({...O}),user:{verify:c8({...O}),getProfile:a8({...O})},get api(){return W()},close(){if(H)H.close(),H=void 0}}}import{TimebackClient as AH}from"@timeback/core";import{ApiError as PH,ForbiddenError as TH,isApiError as RH,NotFoundError as NH,UnauthorizedError as IH,ValidationError as bH}from"@timeback/core";export{n0 as toNativeHandler,RH as isApiError,FJ as createTimebackIdentity,_J as createTimeback,bH as ValidationError,IH as UnauthorizedError,AH as TimebackClient,o0 as ROUTES,NH as NotFoundError,TH as ForbiddenError,PH as ApiError};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timeback/sdk",
3
- "version": "0.2.2",
3
+ "version": "0.2.3-beta.20260326001827",
4
4
  "description": "Timeback SDK for frontend and backend integration",
5
5
  "type": "module",
6
6
  "exports": {
@@ -1 +0,0 @@
1
- import{z as q}from"zod/v4";import{z as X}from"zod/v4";var f_=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/,V=X.string().min(1).regex(f_,"must be a valid ISO 8601 datetime"),O=X.string().min(1).regex(/^\d{4}-\d{2}-\d{2}$/,"must be a valid ISO 8601 date (YYYY-MM-DD)"),_=X.string().trim().min(1),L=X.enum(["Reading","Language","Vocabulary","Social Studies","Writing","Science","FastMath","Math","None","Other"]).meta({id:"TimebackSubject",description:"Subject area"}),G=X.union([X.literal(-1),X.literal(0),X.literal(1),X.literal(2),X.literal(3),X.literal(4),X.literal(5),X.literal(6),X.literal(7),X.literal(8),X.literal(9),X.literal(10),X.literal(11),X.literal(12),X.literal(13)]).meta({id:"TimebackGrade",description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}),E=X.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),o=X.enum(["department","school","district","local","state","national"]),D=X.enum(["administrator","aide","guardian","parent","proctor","relative","student","teacher"]),g=X.enum(["administrator","proctor","student","teacher"]),m=X.enum(["qti","text","audio","video","interactive","visual","course-material","assessment-bank"]),S=X.enum(["qti-test","qti-question","qti-stimulus","qti-test-bank"]),a=X.enum(["unit","course","resource-collection"]),r=X.enum(["choice","order","associate","match","hotspot","hottext","select-point","graphic-order","graphic-associate","graphic-gap-match","text-entry","extended-text","inline-choice","upload","slider","drawing","media","custom"]),i=X.enum(["easy","medium","hard"]),e=X.array(X.object({source:X.string(),learningObjectiveIds:X.array(X.string())})),n=X.object({consecutive_failures:X.number().int().min(1).optional(),stagnation_limit:X.number().int().min(1).optional()}).optional(),yZ=X.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]).nullable(),NZ=X.object({imsx_codeMajor:X.enum(["failure","success"]),imsx_severity:X.enum(["error","warning","status"]),imsx_description:X.string(),imsx_CodeMinor:X.object({imsx_codeMinorField:X.array(X.object({imsx_codeMinorFieldName:X.string(),imsx_codeMinorFieldValue:X.string()}))}).optional()});var D_=q.object({staging:q.string().meta({description:"Course ID in staging environment"}).optional(),production:q.string().meta({description:"Course ID in production environment"}).optional()}).meta({id:"CourseIds",description:"Environment-specific course IDs (populated by sync)"}),T_=q.enum(["base","hole-filling","optional"]).meta({id:"CourseType",description:"Course classification type"}),u_=q.enum(["draft","testing","published","deactivated"]).meta({id:"PublishStatus",description:"Course publication status"}),C_=q.object({dailyXp:q.number().int().positive().meta({description:"Target XP to earn per day"}).optional(),dailyLessons:q.number().int().positive().meta({description:"Target lessons to complete per day"}).optional(),dailyActiveMinutes:q.number().int().positive().meta({description:"Target active learning minutes per day"}).optional(),dailyAccuracy:q.number().int().min(0).max(100).meta({description:"Target accuracy percentage (0-100)"}).optional(),dailyMasteredUnits:q.number().int().positive().meta({description:"Target units to master per day"}).optional()}).meta({id:"CourseGoals",description:"Daily learning goals for a course"}),R_=q.object({totalXp:q.number().int().positive().meta({description:"Total XP available in the course"}).optional(),totalLessons:q.number().int().positive().meta({description:"Total number of lessons/activities"}).optional(),totalGrades:q.number().int().positive().meta({description:"Total grade levels covered"}).optional()}).meta({id:"CourseMetrics",description:"Aggregate metrics for a course"}),t=q.object({courseType:T_.optional(),isSupplemental:q.boolean().meta({description:"Whether this is supplemental to a base course"}).optional(),isCustom:q.boolean().meta({description:"Whether this is a custom course for an individual student"}).optional(),publishStatus:u_.optional(),contactEmail:q.email().meta({description:"Contact email for course issues"}).optional(),primaryApp:q.string().meta({description:"Primary application identifier"}).optional(),goals:C_.optional(),metrics:R_.optional()}).meta({id:"CourseMetadata",description:"Course metadata (matches API metadata object)"}),__=q.object({courseCode:q.string().meta({description:"Course code (e.g., 'MATH101')"}).optional(),level:q.string().meta({description:"Course level (e.g., 'AP', 'Honors')"}).optional(),metadata:t.optional()}).meta({id:"CourseDefaults",description:"Default properties that apply to all courses unless overridden"}),z=q.object({level:q.string().meta({description:"Course level for this environment"}).optional(),sensor:q.url().meta({description:"Caliper sensor endpoint URL for this environment"}).optional(),launchUrl:q.url().meta({description:"LTI launch URL for this environment"}).optional(),metadata:t.optional()}).meta({id:"CourseEnvOverrides",description:"Environment-specific course overrides (non-identity fields)"}),l_=q.object({staging:z.meta({description:"Overrides for staging environment"}).optional(),production:z.meta({description:"Overrides for production environment"}).optional()}).meta({id:"CourseOverrides",description:"Per-environment course overrides"}),d_=__.extend({subject:L.meta({description:"Subject area for this course"}),grade:G.meta({description:"Grade level (-1 = Pre-K, 0 = K, 1-12 = grades, 13 = AP)"}).optional(),ids:D_.nullable().optional(),sensor:q.url().meta({description:"Caliper sensor endpoint URL for this course"}).optional(),launchUrl:q.url().meta({description:"LTI launch URL for this course"}).optional(),overrides:l_.optional()}).meta({id:"CourseConfig",description:"Configuration for a single course. Must have either grade or courseCode (or both)."}),mZ=q.object({$schema:q.string().meta({description:"JSON Schema reference for editor support"}).optional(),name:q.string().min(1,"App name is required").meta({description:"Display name for your app"}),defaults:__.meta({description:"Default properties applied to all courses"}).optional(),courses:q.array(d_).min(1,"At least one course is required").meta({description:"Courses available in this app"}),sensor:q.url().meta({description:"Default Caliper sensor endpoint URL for all courses"}).optional(),launchUrl:q.url().meta({description:"Default LTI launch URL for all courses"}).optional(),studio:q.object({telemetry:q.boolean().meta({description:"Enable anonymous usage telemetry for Studio (default: true)"}).optional().default(!0)}).meta({description:"Studio-specific configuration"}).optional()}).meta({id:"TimebackConfig",title:"Timeback Config",description:"Configuration schema for timeback.config.json files"}).refine((J)=>{return J.courses.every((W)=>W.grade!==void 0||W.courseCode!==void 0)},{message:"Each course must have either a grade or a courseCode",path:["courses"]}).refine((J)=>{let F=J.courses.filter((A)=>A.grade!==void 0).map((A)=>`${A.subject}:${A.grade}`);return new Set(F).size===F.length},{message:"Duplicate (subject, grade) pair found; each must be unique",path:["courses"]}).refine((J)=>{let F=J.courses.filter((A)=>A.courseCode!==void 0).map((A)=>A.courseCode);return new Set(F).size===F.length},{message:"Duplicate courseCode found; each must be unique",path:["courses"]}).refine((J)=>{return J.courses.every((W)=>{if(W.sensor!==void 0||J.sensor!==void 0)return!0;return[W.launchUrl,J.launchUrl,W.overrides?.staging?.launchUrl,W.overrides?.production?.launchUrl].filter(Boolean).length>0})},{message:"Each course must have an effective sensor. Either set `sensor` explicitly (top-level or per-course), or provide a `launchUrl` so sensor can be derived from its origin.",path:["courses"]});import{z as Z}from"zod/v4";var c_=Z.union([Z.url(),Z.string().regex(/^urn:/,"Must be a URL or URN")]),b=Z.object({id:Z.url(),type:Z.literal("TimebackUser"),email:Z.string()}),R=Z.object({id:Z.url(),type:Z.literal("TimebackActivityContext"),subject:L,app:Z.object({name:Z.string()}),activity:Z.object({id:Z.url().optional(),name:Z.string()}).strict().optional(),course:Z.object({id:Z.url().optional(),name:Z.string().optional()}).strict(),process:Z.boolean().optional()}),Z_=Z.object({"@context":Z.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),id:Z.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Z.string(),eventTime:V,profile:Z.literal("TimebackProfile"),actor:b,action:Z.string(),object:R,edApp:Z.object({id:Z.string(),name:Z.string().optional()}).optional()}),x_=Z.object({type:Z.enum(["totalQuestions","correctQuestions","xpEarned","masteredUnits"]),value:Z.number()}),p_=Z.object({id:Z.url(),type:Z.literal("TimebackActivityMetricsCollection"),attempt:Z.number().optional(),items:Z.array(x_),extensions:Z.record(Z.string(),Z.unknown()).optional()}),y_=Z_.extend({type:Z.literal("ActivityEvent"),action:Z.literal("Completed"),generated:p_}),H_=Z.object({type:Z.enum(["active","inactive","waste","unknown","anti-pattern"]),value:Z.number(),subType:Z.string().optional()}),N_=Z.object({id:Z.url(),type:Z.literal("TimebackTimeSpentMetricsCollection"),items:Z.array(H_)}),E_=Z_.extend({type:Z.literal("TimeSpentEvent"),action:Z.literal("SpentTime"),generated:N_}),iZ=Z.object({actor:b,object:R,metrics:Z.array(x_).min(1,"metrics must contain at least one metric"),eventTime:V.optional(),metricsId:Z.string().optional(),id:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional(),edApp:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),session:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),attempt:Z.number().int().min(1).optional(),generatedExtensions:Z.object({pctCompleteApp:Z.number().optional()}).loose().optional()}).strict(),eZ=Z.object({actor:b,object:R,metrics:Z.array(H_).min(1,"metrics must contain at least one metric"),eventTime:V.optional(),metricsId:Z.string().optional(),id:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional(),edApp:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),session:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional()}).strict(),o_=Z.union([y_,E_]),nZ=Z.object({sensor:Z.string(),sendTime:V,dataVersion:Z.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Z.array(o_)}),g_=Z.enum(["AnnotationProfile","AssessmentProfile","ToolUseProfile","GeneralProfile","FeedbackProfile","MediaProfile","SurveyProfile","ResourceManagementProfile","ForumProfile","AssignableProfile","GradingProfile","ReadingProfile","SessionProfile","SearchProfile","ToolLaunchProfile","TimebackProfile"]),B=Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]),T=Z.object({id:c_,type:Z.string(),name:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),K_=Z.object({"@context":Z.string().optional(),id:Z.string().regex(/^urn:uuid:/,"Event id must start with urn:uuid:"),type:Z.string(),actor:Z.union([Z.string(),T,b]),action:Z.string(),object:B,eventTime:V,profile:g_,edApp:B.optional(),generated:B.optional(),target:B.optional(),referrer:B.optional(),group:B.optional(),membership:B.optional(),session:B.optional(),federatedSession:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),zZ=Z.object({sensor:_,sendTime:V,dataVersion:Z.literal("http://purl.imsglobal.org/ctx/caliper/v1p2"),data:Z.array(K_).min(1,"data must contain at least one event")}),tZ=Z.object({sensor:_,events:Z.array(K_).min(1,"events must contain at least one event")}),_x=Z.object({limit:Z.number().int().positive().optional(),offset:Z.number().int().min(0).optional(),sensor:_.optional(),startDate:V.optional(),endDate:V.optional(),actorId:_.optional(),actorEmail:Z.email().optional()}).strict(),Y_=Z.object({id:Z.string(),name:Z.string().optional(),isPartOf:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}),m_=Z.object({id:Z.string(),attempt:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),startedAtTime:V.optional(),endedAtTime:V.optional(),duration:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}),S_=Z.object({id:Z.string().optional(),scoreGiven:Z.number(),maxScore:Z.number().optional(),attempt:Z.union([Z.string(),Z.record(Z.string(),Z.unknown())]).optional(),comment:Z.string().optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}),Zx=Z.object({actor:Z.union([Z.string(),T,b]),object:Y_,edApp:B,id:Z.string().optional(),eventTime:V.optional(),session:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),xx=Z.object({actor:Z.union([Z.string(),T,b]),object:Y_,edApp:B,generated:m_.optional(),id:Z.string().optional(),eventTime:V.optional(),session:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict(),Hx=Z.object({actor:Z.union([Z.string(),T,b]),object:Z.string(),generated:S_,edApp:B,id:Z.string().optional(),eventTime:V.optional(),session:B.optional(),extensions:Z.record(Z.string(),Z.unknown()).optional()}).strict();import{z as U}from"zod/v4";var jx=U.object({name:_,targetUrl:U.url("targetUrl must be a valid URL"),secret:_,active:U.boolean(),sensor:U.string().nullable().optional(),description:U.string().nullable().optional()}).strict();var a_=U.enum(["string","number","boolean"]),r_=U.enum(["eq","neq","gt","gte","lt","lte","contains","notContains","in","notIn","startsWith","endsWith","regexp"]),Jx=U.object({webhookId:_,filterKey:_,filterValue:_,filterType:a_,filterOperator:r_,active:U.boolean()}).strict();import{z as j}from"zod/v4";var u=j.string().uuid(),$_=j.object({title:_,identifier:u,uri:_}),i_=j.object({identifier:u,uri:_,lastChangeDateTime:_,title:_,creator:_,officialSourceURL:j.string().optional(),publisher:j.string().optional(),description:j.string().optional(),language:j.string().optional(),version:j.string().optional(),caseVersion:j.string().optional(),adoptionStatus:j.string().optional(),statusStartDate:j.string().optional(),statusEndDate:j.string().optional(),licenseUri:j.string().optional(),notes:j.string().optional(),subject:j.array(j.string()).optional(),extensions:j.unknown().optional()}),e_=j.object({identifier:u,uri:_,lastChangeDateTime:_,fullStatement:_,alternativeLabel:j.string().optional(),CFItemType:j.string().optional(),cfItemType:j.string().optional(),humanCodingScheme:j.string().optional(),listEnumeration:j.string().optional(),abbreviatedStatement:j.string().optional(),conceptKeywords:j.array(j.string()).optional(),notes:j.string().optional(),subject:j.array(j.string()).optional(),language:j.string().optional(),educationLevel:j.array(j.string()).optional(),CFItemTypeURI:j.unknown().optional(),licenseURI:j.unknown().optional(),statusStartDate:j.string().optional(),statusEndDate:j.string().optional(),extensions:j.unknown().optional()}),n_=j.object({identifier:u,uri:_,lastChangeDateTime:_,associationType:_,originNodeURI:$_,destinationNodeURI:$_,sequenceNumber:j.number().optional(),extensions:j.unknown().optional()}),z_=j.object({CFItemTypes:j.array(j.unknown()).optional(),CFSubjects:j.array(j.unknown()).optional(),CFConcepts:j.array(j.unknown()).optional(),CFLicenses:j.array(j.unknown()).optional(),CFAssociationGroupings:j.array(j.unknown()).optional(),extensions:j.unknown().optional()}),Vx=j.object({CFDocument:i_,CFItems:j.array(e_),CFAssociations:j.array(n_),CFDefinitions:z_.optional(),extensions:j.unknown().optional()});import{z as $}from"zod/v4";var j_="https://www.w3.org/ns/credentials/v2",t_=$.array($.url()).min(3,"@context must include W3C, CLR, and OB context URLs").refine((J)=>J[0]===j_,`First @context entry must be "${j_}"`),J_=$.object({id:$.url(),type:$.literal("Image"),caption:$.string().optional()}),l=$.object({id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("Profile"),'type must include "Profile"'),name:$.string().optional(),url:$.string().url().optional(),phone:$.string().optional(),description:$.string().optional(),image:J_.optional(),email:$.string().email().optional()}),X_=$.object({type:_,proofPurpose:_,verificationMethod:_,created:$.iso.datetime(),proofValue:_,cryptosuite:$.string().optional()}),_Z=$.object({id:_,type:$.literal("1EdTechJsonSchemaValidator2019")}),ZZ=$.object({id:$.string().url().optional(),narrative:$.string().optional()}),xZ=$.object({id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("Achievement"),'type must include "Achievement"'),name:_,description:_,criteria:ZZ,image:J_.optional(),achievementType:$.string().optional(),creator:l.optional()}),HZ=$.object({type:$.literal("IdentityObject"),identityHash:_,identityType:_,hashed:$.boolean(),salt:$.string().optional()}),KZ=$.enum(["exactMatchOf","isChildOf","isParentOf","isPartOf","isPeerOf","isRelatedTo","precedes","replacedBy"]),YZ=$.object({type:$.literal("Association"),associationType:KZ,sourceId:$.url(),targetId:$.url()}),$Z=$.object({"@context":$.array($.string()).min(1),id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("VerifiableCredential"),'type must include "VerifiableCredential"'),issuer:l,validFrom:$.iso.datetime(),validUntil:$.string().datetime().optional(),credentialSubject:$.object({id:$.string().optional()}),proof:$.array(X_).optional()}),jZ=$.object({id:$.string().url().optional(),type:$.array($.string()).min(1).refine((J)=>J.includes("ClrSubject"),'type must include "ClrSubject"'),identifier:$.array(HZ).optional(),achievement:$.array(xZ).optional(),verifiableCredential:$.array($Z).min(1),association:$.array(YZ).optional()}),Px=$.object({"@context":t_,id:$.url(),type:$.array($.string()).min(1).refine((J)=>J.includes("VerifiableCredential")&&J.includes("ClrCredential"),'type must include "VerifiableCredential" and "ClrCredential"'),issuer:l,name:_,description:$.string().optional(),validFrom:$.iso.datetime(),validUntil:$.iso.datetime().optional(),credentialSubject:jZ,proof:$.array(X_).optional(),credentialSchema:$.array(_Z).optional()});import{z as Y}from"zod/v4";var v=Y.union([V,O]),f=v.transform((J)=>J.includes("T")?J:`${J}T00:00:00.000Z`),Lx=Y.object({id:Y.string(),role:Y.string(),beginDate:v.nullable(),endDate:v.nullable(),metadata:Y.object({goals:Y.object({dailyXp:Y.number().optional()}).optional(),metrics:Y.object({totalXp:Y.number().optional(),totalLessons:Y.number().optional()}).optional()}).optional(),course:Y.object({id:Y.string(),title:Y.string(),subjects:Y.array(Y.string()).nullable(),grades:Y.array(Y.string()).nullable()}),school:Y.object({id:Y.string(),name:Y.string()}),testOutSupported:Y.boolean(),testOutEligible:Y.boolean()}),JZ=Y.object({activityMetrics:Y.object({xpEarned:Y.number(),totalQuestions:Y.number(),correctQuestions:Y.number(),masteredUnits:Y.number()}),timeSpentMetrics:Y.object({activeSeconds:Y.number(),inactiveSeconds:Y.number(),wasteSeconds:Y.number()}),apps:Y.array(Y.string())}),XZ=Y.record(Y.string(),Y.record(Y.string(),JZ)),Fx=Y.object({message:Y.string(),enrollmentId:Y.string(),startDate:v,endDate:v,facts:XZ,factsByApp:Y.unknown()}),q_=Y.object({email:Y.email().optional(),studentId:_.optional()}).superRefine((J,W)=>{if(!J.email&&!J.studentId)W.addIssue({code:Y.ZodIssueCode.custom,message:"must provide either email or studentId",path:["email"]}),W.addIssue({code:Y.ZodIssueCode.custom,message:"must provide either email or studentId",path:["studentId"]})}),Ux=Y.object({subject:_,grade:_,courseId:_,orgSourcedId:_.optional()});var Ox=Y.object({userId:_}),Mx=Y.object({sourcedId:_.optional(),role:g.optional(),beginDate:V.optional(),metadata:Y.record(Y.string(),Y.unknown()).optional()}),sx=Y.object({fields:Y.string().optional(),limit:Y.number().int().positive().optional(),offset:Y.number().int().nonnegative().optional(),sort:Y.string().optional(),orderBy:Y.enum(["asc","desc"]).optional(),filter:Y.string().optional(),search:Y.string().optional(),roles:Y.array(D).min(1),orgSourcedIds:Y.array(_).optional()}),bx=q_.extend({startDate:f,endDate:f,timezone:Y.string().optional()}),hx=q_.extend({weekDate:f,timezone:Y.string().optional()}),Ix=Y.object({enrollmentId:_,startDate:f.optional(),endDate:f.optional(),timezone:Y.string().optional()});import{z as k}from"zod/v4";var Tx=k.object({email:k.email()}),ux=k.object({name:_.optional(),timeback_id:_.optional(),grade:_.optional(),subject:_.optional(),all:k.boolean().optional()}),Cx=k.object({student_email:k.email(),timeback_id:_.optional(),subject:_.optional(),grade_rank:k.number().int().min(0).max(12).optional(),assessment_line_item_sourced_id:_.optional(),assessment_result_sourced_id:_.optional()}).superRefine((J,W)=>{let F=!!J.timeback_id,A=!!J.subject,C=J.grade_rank!==void 0;if(!F&&!A)W.addIssue({code:k.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["timeback_id"]}),W.addIssue({code:k.ZodIssueCode.custom,message:"must provide either timeback_id or subject",path:["subject"]});if(C&&!A)W.addIssue({code:k.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]});let N=!!J.assessment_line_item_sourced_id,v_=!!J.assessment_result_sourced_id;if(N!==v_)W.addIssue({code:k.ZodIssueCode.custom,message:"assessment_line_item_sourced_id and assessment_result_sourced_id must be provided together",path:N?["assessment_result_sourced_id"]:["assessment_line_item_sourced_id"]})}),Rx=k.object({student_email:k.email(),assignment_id:k.number().int().positive().optional(),timeback_id:_.optional(),subject:_.optional(),grade_rank:k.number().int().min(0).max(12).optional()}).superRefine((J,W)=>{let F=J.assignment_id!==void 0,A=!!J.timeback_id,C=!!J.subject&&J.grade_rank!==void 0;if(!F&&!A&&!C)W.addIssue({code:k.ZodIssueCode.custom,message:"Either assignment_id, timeback_id, or (subject and grade_rank) is required",path:["assignment_id"]});if(J.grade_rank!==void 0&&!J.subject)W.addIssue({code:k.ZodIssueCode.custom,message:"grade_rank requires subject",path:["grade_rank"]})});import{z as H}from"zod/v4";var P=H.enum(["active","tobedeleted"]),Q=H.record(H.string(),H.unknown()).nullable().optional(),w=H.object({sourcedId:_,type:H.string().optional(),href:H.string().optional()}).strict(),M=H.union([O,V]).transform((J)=>J.includes("T")?J:`${J}T00:00:00Z`),qZ=H.object({roleType:H.enum(["primary","secondary"]),role:D,org:w,userProfile:H.string().optional(),metadata:Q,beginDate:M.optional(),endDate:M.optional()}).strict(),px=H.object({sourcedId:_.describe("sourcedId must be a non-empty string"),status:P.optional(),enabledUser:H.boolean(),givenName:_.describe("givenName must be a non-empty string"),familyName:_.describe("familyName must be a non-empty string"),middleName:_.optional(),username:_.optional(),email:H.email(),roles:H.array(qZ).min(1,"roles must include at least one role"),userIds:H.array(H.object({type:_,identifier:_}).strict()).optional(),agents:H.array(w).optional(),grades:H.array(G).optional(),identifier:_.optional(),sms:_.optional(),phone:_.optional(),pronouns:_.optional(),password:_.optional(),metadata:Q}).strict(),yx=H.object({sourcedId:_.describe("sourcedId must be a non-empty string").optional(),status:P.optional(),title:_.describe("title must be a non-empty string"),org:w,courseCode:_.optional(),subjects:H.array(L).optional(),grades:H.array(G).optional(),level:_.optional(),metadata:Q}).strict(),Nx=H.object({sourcedId:_.describe("sourcedId must be a non-empty string").optional(),status:P.optional(),title:_.describe("title must be a non-empty string"),terms:H.array(w).min(1,"terms must have at least one item"),course:w,org:w,classCode:_.optional(),classType:H.enum(["homeroom","scheduled"]).optional(),location:_.optional(),grades:H.array(G).optional(),subjects:H.array(L).optional(),subjectCodes:H.array(_).optional(),periods:H.array(_).optional(),metadata:Q}).strict(),w_=H.enum(["true","false"]),Ex=H.object({sourcedId:_.describe("sourcedId must be a non-empty string").optional(),status:P.optional(),user:w,class:w,school:w.optional(),role:H.enum(["administrator","proctor","student","teacher"]),primary:w_.optional(),beginDate:O.optional(),endDate:O.optional(),metadata:Q}).strict(),ox=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),status:P,weight:H.number().nullable().optional(),metadata:Q}).strict(),gx=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),class:w,school:w,category:w,assignDate:M,dueDate:M,status:P,description:H.string().optional(),resultValueMin:H.number().nullable().optional(),resultValueMax:H.number().nullable().optional(),scoreScale:w.optional(),metadata:Q}).strict(),mx=H.object({sourcedId:_.optional(),lineItem:w,student:w,class:w.optional(),scoreDate:M,scoreStatus:H.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),score:H.number().nullable().optional(),textScore:H.string().nullable().optional(),status:P,comment:H.string().nullable().optional(),metadata:Q}).strict(),Sx=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),status:P.optional(),type:H.string(),class:w,course:w.nullable().optional(),scoreScaleValue:H.array(H.object({itemValueLHS:_,itemValueRHS:_,value:H.string().optional(),description:H.string().optional()}).strict()),minScore:H.number().optional(),maxScore:H.number().optional(),metadata:Q}).strict(),ax=H.object({sourcedId:_.optional(),status:P.optional(),dateLastModified:V.optional(),title:_.describe("title must be a non-empty string"),description:H.string().nullable().optional(),class:w.nullable().optional(),parentAssessmentLineItem:w.nullable().optional(),scoreScale:w.nullable().optional(),resultValueMin:H.number().nullable().optional(),resultValueMax:H.number().nullable().optional(),component:w.nullable().optional(),componentResource:w.nullable().optional(),learningObjectiveSet:H.array(H.object({source:H.string(),learningObjectiveIds:H.array(H.string())})).optional().nullable(),course:w.nullable().optional(),metadata:Q}).strict(),wZ=H.object({learningObjectiveId:H.string(),score:H.number().optional(),textScore:H.string().optional()}),VZ=H.array(H.object({source:H.string(),learningObjectiveResults:H.array(wZ)})),rx=H.object({sourcedId:_.optional(),status:P.optional(),dateLastModified:V.optional(),metadata:Q,assessmentLineItem:w,student:w,score:H.number().nullable().optional(),textScore:H.string().nullable().optional(),scoreDate:M,scoreScale:w.nullable().optional(),scorePercentile:H.number().nullable().optional(),scoreStatus:H.enum(["exempt","fully graded","not submitted","partially graded","submitted"]),comment:H.string().nullable().optional(),learningObjectiveSet:VZ.nullable().optional(),inProgress:H.string().nullable().optional(),incomplete:H.string().nullable().optional(),late:H.string().nullable().optional(),missing:H.string().nullable().optional()}).strict(),ix=H.object({sourcedId:_.optional(),status:P.optional(),name:_.describe("name must be a non-empty string"),type:o,identifier:_.optional(),parent:w.optional(),metadata:Q}).strict(),ex=H.object({sourcedId:_.optional(),status:P.optional(),name:_.describe("name must be a non-empty string"),type:H.literal("school").optional(),identifier:_.optional(),parent:w.optional(),metadata:Q}).strict(),nx=H.object({sourcedId:_.describe("sourcedId must be a non-empty string"),status:P,title:_.describe("title must be a non-empty string"),startDate:M,endDate:M,type:H.enum(["gradingPeriod","semester","schoolYear","term"]),schoolYear:_.describe("schoolYear must be a non-empty string"),org:w,parent:w.optional(),children:H.array(w).optional(),metadata:Q}).strict(),zx=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),courseComponent:w,resource:w,status:P,metadata:Q}).strict(),tx=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),course:w,status:P,metadata:Q}).strict(),_2=H.object({sourcedId:_.describe("sourcedId must be a non-empty string"),role:H.enum(["student","teacher"]),primary:w_.optional(),beginDate:O.optional(),endDate:O.optional(),metadata:Q}).strict(),Z2=H.object({agentSourcedId:_.describe("agentSourcedId must be a non-empty string")}).strict(),x2=H.object({applicationName:_.describe("applicationName must be a non-empty string"),credentials:H.object({username:_.describe("username must be a non-empty string"),password:_.describe("password must be a non-empty string")})}).strict(),H2=H.object({sourcedId:_.describe("sourcedId must be a non-empty string")}).loose(),s=H.object({type:m,subject:L.nullish(),grades:H.array(G).nullish(),language:H.string().nullish(),xp:H.number().nullish(),url:H.url().nullish(),keywords:H.array(H.string()).nullish(),learningObjectiveSet:e.nullish(),lessonType:H.string().nullish()}).passthrough(),WZ=s.extend({type:H.literal("qti"),subType:S,questionType:r.optional(),difficulty:i.optional()}),QZ=s.extend({type:H.literal("text"),format:H.string(),author:H.string().optional(),pageCount:H.number().optional()}),kZ=s.extend({type:H.literal("audio"),duration:H.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),format:H.string(),speaker:H.string().optional()}),PZ=s.extend({type:H.literal("video"),duration:H.string().regex(/^\d{2}:\d{2}:\d{2}(\.\d{2})?$/).optional(),captionsAvailable:H.boolean().optional(),format:H.string()}),BZ=s.extend({type:H.literal("interactive"),launchUrl:H.url().optional(),toolProvider:H.string().optional(),instructionalMethod:H.string().optional(),courseIdOnFail:H.string().nullable().optional(),fail_fast:n}),GZ=s.extend({type:H.literal("visual"),format:H.string(),resolution:H.string().optional()}),AZ=s.extend({type:H.literal("course-material"),subType:a,author:H.string().optional(),format:H.string(),instructionalMethod:H.string().optional()}),LZ=s.extend({type:H.literal("assessment-bank"),resources:H.array(H.string())}),FZ=H.discriminatedUnion("type",[WZ,QZ,kZ,PZ,BZ,GZ,AZ,LZ]),K2=H.object({sourcedId:_.optional(),title:_.describe("title must be a non-empty string"),vendorResourceId:_.describe("vendorResourceId must be a non-empty string"),roles:H.array(H.enum(["primary","secondary"])).optional(),importance:H.enum(["primary","secondary"]).optional(),vendorId:H.string().optional(),applicationId:H.string().optional(),status:P.optional(),metadata:FZ.nullable().optional()}).strict(),UZ=H.object({url:_.describe("courseStructure.url must be a non-empty string"),skillCode:_.describe("courseStructure.skillCode must be a non-empty string"),lessonCode:_.describe("courseStructure.lessonCode must be a non-empty string"),title:_.describe("courseStructure.title must be a non-empty string"),"unit-title":_.describe("courseStructure.unit-title must be a non-empty string"),status:_.describe("courseStructure.status must be a non-empty string"),xp:H.number()}).loose(),Y2=H.object({course:H.object({sourcedId:_.describe("course.sourcedId must be a non-empty string").optional(),title:_.describe("course.title must be a non-empty string"),org:w,status:P,metadata:Q}).strict(),courseStructure:H.record(H.string(),UZ)}).strict(),OZ=H.object({student:w}).loose(),$2=H.array(OZ).min(1,"results must have at least one item");import{z as K}from"zod/v4";var MZ=K.enum(["edulastic","mastery-track"]),sZ=K.enum(["powerpath-100","quiz","test-out","placement","unit-test","alpha-read-article"]),W_=K.array(G),Q_=K.record(K.string(),K.unknown()).optional(),k_=K.object({courseId:_,lessonTitle:_.optional(),launchUrl:_.optional(),toolProvider:MZ,unitTitle:_.optional(),courseComponentSourcedId:_.optional(),vendorId:_.optional(),description:_.optional(),resourceMetadata:Q_.nullable().optional(),grades:W_}),q2=k_.extend({lessonType:K.literal("test-out"),xp:K.number()}),w2=k_.extend({lessonType:K.literal("placement"),courseIdOnFail:_.nullable().optional(),xp:K.number().optional()});var V_=K.object({courseId:_,lessonType:sZ,lessonTitle:_.optional(),unitTitle:_.optional(),courseComponentSourcedId:_.optional(),resourceMetadata:Q_.nullable().optional(),xp:K.number().optional(),grades:W_.optional(),courseIdOnFail:_.nullable().optional()}),V2=K.discriminatedUnion("testType",[V_.extend({testType:K.literal("qti"),qti:K.object({url:K.url(),title:_.optional(),metadata:K.record(K.string(),K.unknown()).optional()})}),V_.extend({testType:K.literal("assessment-bank"),assessmentBank:K.object({resources:K.array(K.object({url:K.url(),title:_.optional(),metadata:K.record(K.string(),K.unknown()).optional()})).min(1)})})]),W2=K.object({student:_,lesson:_}),Q2=K.object({student:_,lesson:_}),k2=K.object({courseId:_,userId:_,classId:_.optional()}),h=K.object({type:K.enum(["component","resource"]),id:_}),bZ=K.union([K.object({type:K.literal("set-skipped"),payload:K.object({target:h,value:K.boolean()})}),K.object({type:K.literal("add-custom-resource"),payload:K.object({resource_id:_,parent_component_id:_,skipped:K.boolean().optional()})}),K.object({type:K.literal("move-item-before"),payload:K.object({target:h,reference_id:_})}),K.object({type:K.literal("move-item-after"),payload:K.object({target:h,reference_id:_})}),K.object({type:K.literal("move-item-to-start"),payload:K.object({target:h})}),K.object({type:K.literal("move-item-to-end"),payload:K.object({target:h})}),K.object({type:K.literal("change-item-parent"),payload:K.object({target:h,new_parent_id:_,position:K.enum(["start","end"]).optional()})})]),P2=K.object({operation:bZ,reason:_.optional()}),B2=K.object({studentId:_,componentResourceId:_,result:K.object({status:K.enum(["active","tobedeleted"]),metadata:K.record(K.string(),K.unknown()).optional(),score:K.number().optional(),textScore:_.optional(),scoreDate:K.string().datetime(),scorePercentile:K.number().optional(),scoreStatus:E,comment:_.optional(),learningObjectiveSet:K.array(K.object({source:_,learningObjectiveResults:K.array(K.object({learningObjectiveId:_,score:K.number().optional(),textScore:_.optional()}))})).optional(),inProgress:_.optional(),incomplete:_.optional(),late:_.optional(),missing:_.optional()})}),G2=K.object({student:_,lesson:_,applicationName:_.optional(),testId:_.optional(),skipCourseEnrollment:K.boolean().optional()}),A2=K.object({student:_,subject:L}),L2=K.object({student:_,lesson:_}),F2=K.object({userId:_}),U2=K.object({userId:_,subject:K.enum(["Math","Reading","Language","Science"])}),O2=K.object({student:_,subject:L,grade:G,testName:_.optional()}),M2=K.object({testName:_}),hZ=K.object({student:_,subject:L,grade:G,testName:_.optional()}),s2=K.object({items:K.array(hZ)}),b2=K.object({spreadsheetUrl:K.url(),sheet:_}),h2=K.object({student:_,status:K.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:_.optional(),grade:G.optional(),limit:K.number().int().positive().max(3000).optional(),offset:K.number().int().nonnegative().optional()}),I2=K.object({student:_.optional(),status:K.enum(["assigned","in_progress","completed","failed","expired","cancelled"]).optional(),subject:_.optional(),grade:G.optional(),limit:K.number().int().positive().max(3000).optional(),offset:K.number().int().nonnegative().optional()}),v2=K.object({student:_,question:_,response:K.union([_,K.array(_)]).optional(),responses:K.record(K.string(),K.union([_,K.array(_)])).optional(),lesson:_,rendererOutcomes:K.object({score:K.number(),maxScore:K.number().min(0),isCorrect:K.boolean()}).optional(),playerState:K.string().optional()}).refine((J)=>J.response!==void 0||J.responses!==void 0,{message:"Either 'response' or 'responses' must be provided",path:["response","responses"]}).transform((J)=>{if(J.response!==void 0&&J.responses===void 0)return{...J,responses:{RESPONSE:J.response}};return J}),f2=K.object({student:_,lesson:_,attempt:K.number().int().positive().optional()}),D2=K.object({student:_,lesson:_}),T2=K.object({student:_,lesson:_}),u2=K.object({student:_,course:_}),C2=K.object({student:_,lesson:_,applicationName:_.optional()}),R2=K.object({student:_,subject:L}),l2=K.object({oneRosterSourcedId:_,subject:_}),d2=K.object({courseIds:K.array(_).min(1),rendererId:_,rendererUrl:K.url(),rendererVersion:_.optional(),suppressFeedback:K.boolean().optional(),suppressCorrectResponse:K.boolean().optional()}),c2=K.object({status:K.enum(["active","tobedeleted"]).optional()});import{z as x}from"zod/v4";var P_=x.enum(["choice","text-entry","extended-text","inline-choice","match","order","associate","select-point","graphic-order","graphic-associate","graphic-gap-match","hotspot","hottext","slider","drawing","media","upload"]),d=x.enum(["single","multiple","ordered","record"]),c=x.enum(["identifier","boolean","integer","float","string","point","pair","directedPair","duration","file","uri"]),IZ=x.enum(["easy","medium","hard"]),vZ=x.enum(["linear","nonlinear"]),fZ=x.enum(["individual","simultaneous"]),p=x.enum(["show","hide"]),B_=x.enum(["test","item","stimulus"]),E2=x.enum(["QUESTION","LESSON"]),DZ=x.object({value:x.array(x.string())}).strict(),G_=x.object({identifier:_,cardinality:d,baseType:c.optional(),correctResponse:DZ}).strict(),A_=x.object({identifier:_,cardinality:d,baseType:c.optional()}).strict(),L_=x.object({identifier:_,cardinality:d.optional(),baseType:c,normalMaximum:x.number().optional(),normalMinimum:x.number().optional(),defaultValue:x.object({value:x.unknown().optional()}).strict().optional()}).strict(),TZ=x.object({outcomeIdentifier:_,variableIdentifier:_}).strict(),F_=x.object({templateType:x.enum(["match_correct","map_response"]),responseDeclarationIdentifier:_,outcomeIdentifier:_,correctResponseIdentifier:_,incorrectResponseIdentifier:_,inlineFeedback:TZ.optional()}).strict(),uZ=x.object({source:_,learningObjectiveIds:x.array(x.string())}).strict(),y=x.object({subject:x.string().optional(),grade:G.optional(),difficulty:IZ.optional(),learningObjectiveSet:x.array(uZ).optional()}).loose(),U_=x.object({outcomeIdentifier:_,identifier:_,showHide:p,content:x.string(),title:x.string()}).strict(),O_=x.object({outcomeIdentifier:_,identifier:_,showHide:p,content:x.string(),class:x.array(x.string())}).strict(),M_=x.object({outcomeIdentifier:_,identifier:_,showHide:p,content:x.string(),class:x.array(x.string())}).strict(),s_=x.object({href:_,type:_}).strict(),b_=x.object({id:_,support:x.string(),content:x.string()}).strict(),o2=x.object({page:x.number().int().positive().optional(),limit:x.number().int().positive().optional(),sort:x.string().optional(),order:x.enum(["asc","desc"]).optional()}).strict(),CZ=x.object({format:x.string().pipe(x.literal("xml")),xml:_,metadata:y.optional()}).strict(),RZ=x.object({identifier:_,title:_,type:P_,qtiVersion:x.string().optional(),timeDependent:x.boolean().optional(),adaptive:x.boolean().optional(),responseDeclarations:x.array(G_).optional(),outcomeDeclarations:x.array(A_).optional(),responseProcessing:F_.optional(),metadata:y.optional(),modalFeedback:x.array(U_).optional(),feedbackInline:x.array(O_).optional(),feedbackBlock:x.array(M_).optional()}).strict(),g2=x.union([CZ,RZ]),m2=x.object({identifier:_.optional(),title:_,type:P_,qtiVersion:x.string().optional(),timeDependent:x.boolean().optional(),adaptive:x.boolean().optional(),responseDeclarations:x.array(G_).optional(),outcomeDeclarations:x.array(A_).optional(),responseProcessing:F_.optional(),metadata:y.optional(),modalFeedback:x.array(U_).optional(),feedbackInline:x.array(O_).optional(),feedbackBlock:x.array(M_).optional(),rawXml:x.string(),content:x.record(x.string(),x.unknown())}).strict(),S2=x.object({identifier:_,response:x.union([x.string(),x.array(x.string())])}).strict(),h_=x.object({identifier:_,href:_,sequence:x.number().int().positive().optional()}).strict(),lZ=x.object({identifier:_,title:_,visible:x.boolean(),required:x.boolean().optional(),fixed:x.boolean().optional(),sequence:x.number().int().positive(),"qti-assessment-item-ref":x.array(h_).optional()}).strict(),I_=x.object({identifier:_,navigationMode:x.string().pipe(vZ),submissionMode:x.string().pipe(fZ),"qti-assessment-section":x.array(lZ)}).strict(),a2=x.object({items:x.array(h_).min(1)}).strict(),r2=x.object({metadata:x.record(x.string(),x.unknown()).optional()}).strict(),i2=x.object({identifier:_,title:_,qtiVersion:x.string().optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),timeLimit:x.number().optional(),maxAttempts:x.number().optional(),toolsEnabled:x.record(x.string(),x.boolean()).optional(),metadata:x.record(x.string(),x.unknown()).optional(),"qti-test-part":x.array(I_),"qti-outcome-declaration":x.array(L_).optional()}).strict(),e2=x.object({identifier:_.optional(),title:_,qtiVersion:x.string().optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),timeLimit:x.number().optional(),maxAttempts:x.number().optional(),toolsEnabled:x.record(x.string(),x.boolean()).optional(),metadata:x.record(x.string(),x.unknown()).optional(),"qti-test-part":x.array(I_),"qti-outcome-declaration":x.array(L_).optional()}).strict(),n2=x.object({identifier:_,title:_,label:x.string().optional(),language:x.string().optional(),stylesheet:s_.optional(),content:x.string(),catalogInfo:x.array(b_).optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),metadata:x.record(x.string(),x.unknown()).optional()}).strict(),z2=x.object({identifier:_.optional(),title:_,label:x.string().optional(),language:x.string().optional(),stylesheet:s_.optional(),content:x.string(),catalogInfo:x.array(b_).optional(),toolName:x.string().optional(),toolVersion:x.string().optional(),metadata:x.record(x.string(),x.unknown()).optional()}).strict(),t2=x.object({xml:x.string().optional(),schema:B_,entityId:x.string().optional()}).strict(),_H=x.object({xml:x.array(x.string()),schema:B_,entityIds:x.array(x.string())}).strict(),ZH=x.object({questionId:x.string().optional(),userId:_,feedback:_,lessonId:_,humanApproved:x.boolean().optional()}).strict();import{z as I}from"zod/v4";var dZ=I.enum(["creator_only","same_org","all_orgs"]),cZ=I.string().uuid(),YH=I.email(),$H=I.object({sql:_}),jH=I.object({endpointName:_,sql:_,authMode:dZ,description:_.optional()}),JH=I.object({endpointId:cZ});export{_ as a,L as b,G as c,mZ as d};