[{"data":1,"prerenderedAt":369},["ShallowReactive",2],{"changelog-nav":3,"\u002Fchangelog\u002Fapi":35},[4,7,11,15,19,23,27,31],{"path":5,"title":6},"\u002Fchangelog","Changelog home",{"title":8,"path":9,"stem":10},"Product changelog","\u002Fchangelog\u002Fproduct","3.changelog\u002F2.product",{"title":12,"path":13,"stem":14},"JavaScript changelog","\u002Fchangelog\u002Fjavascript","3.changelog\u002F3.javascript",{"title":16,"path":17,"stem":18},"API (Node.js) changelog","\u002Fchangelog\u002Fapi","3.changelog\u002F4.api",{"title":20,"path":21,"stem":22},"API (.NET) changelog","\u002Fchangelog\u002Fdotnet","3.changelog\u002F5.dotnet",{"title":24,"path":25,"stem":26},"iOS changelog","\u002Fchangelog\u002Fios","3.changelog\u002F6.iOS",{"title":28,"path":29,"stem":30},"Android changelog","\u002Fchangelog\u002Fandroid","3.changelog\u002F7.android",{"title":32,"path":33,"stem":34},"React Native changelog","\u002Fchangelog\u002Freact-native","3.changelog\u002F8.react native",{"id":36,"title":16,"body":37,"description":362,"extension":363,"meta":364,"navigation":365,"path":17,"seo":366,"sitemap":367,"stem":18,"__hash__":368},"changelog\u002F3.changelog\u002F4.api.md",{"type":38,"value":39,"toc":333},"minimark",[40,45,64,79,84,94,99,130,134,146,150,154,217,220,230,233,245,248,254,258,261,268,272,275,295,299,302,307,311,314,321,325,328],[41,42,44],"h1",{"id":43},"api-nodejs-sdk-changelog","API (Node.js) SDK changelog",[46,47,48,49,59,60,63],"p",{},"The server-side SDK for Node.js, published as ",[50,51,55],"a",{"href":52,"rel":53},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@ruptjs\u002Fapi",[54],"nofollow",[56,57,58],"code",{},"@ruptjs\u002Fapi",". It replaces the earlier ",[56,61,62],{},"@ruptjs\u002Fcore"," package.",[46,65,66,67,72,73,78],{},"The format is based on ",[50,68,71],{"href":69,"rel":70},"https:\u002F\u002Fkeepachangelog.com\u002Fen\u002F1.0.0\u002F",[54],"Keep a Changelog",",\nand this project adheres to ",[50,74,77],{"href":75,"rel":76},"https:\u002F\u002Fsemver.org\u002Fspec\u002Fv2.0.0.html",[54],"Semantic Versioning",".",[80,81,83],"h2",{"id":82},"_301-2026-07-27","[3.0.1] - 2026-07-27",[46,85,86,87,90,91,78],{},"Breaking type changes in a patch release, which isn't how we like to do it, and we're sorry for the odd bump. The old fields described a response the API had already stopped sending, so leaving them in place only produced type errors against real data. We checked with every customer on the SDK before shipping and none of them read ",[56,88,89],{},"category"," or ",[56,92,93],{},"risk_summary",[95,96,98],"h3",{"id":97},"changed","Changed",[100,101,102],"ul",{},[103,104,105,108,109,112,113,116,117,120,121,123,124,126,127,129],"li",{},[56,106,107],{},"EvaluationRisk"," now has ",[56,110,111],{},"id",", ",[56,114,115],{},"definition",", and ",[56,118,119],{},"name"," in place of ",[56,122,89],{},", matching the API. Branch on ",[56,125,115],{},", the id of the risk definition the risk was raised against. ",[56,128,119],{}," is a display label and can be renamed in the dashboard.",[95,131,133],{"id":132},"removed","Removed",[100,135,136],{},[103,137,138,141,142,145],{},[56,139,140],{},"Evaluation.risk_summary",". The API no longer returns it, and it repeated ",[56,143,144],{},"risks"," one for one.",[80,147,149],{"id":148},"_300-2026-06-02","[3.0.0] - 2026-06-02",[95,151,153],{"id":152},"added","Added",[100,155,156,162,172,178,184,190,202],{},[103,157,158,159,161],{},"Initial release as ",[56,160,58],{},", targeting the Rupt V3 API.",[103,163,164,167,168,171],{},[56,165,166],{},"getEvaluation"," and ",[56,169,170],{},"consumeEvaluation"," to confirm evaluations server-side. Consuming is single-use: a replayed evaluation returns a 409.",[103,173,174,177],{},[56,175,176],{},"getChallenge"," to retrieve a challenge and its status.",[103,179,180,183],{},[56,181,182],{},"getUserDevices"," to list a user's devices.",[103,185,186,189],{},[56,187,188],{},"updateUser"," for partial updates to email, phone, metadata, and groups.",[103,191,192,193,112,196,116,199,78],{},"Automatic retries with exponential backoff on network errors and 5xx responses, plus typed errors: ",[56,194,195],{},"RuptApiError",[56,197,198],{},"RuptNetworkError",[56,200,201],{},"RuptTimeoutError",[103,203,204,205,112,208,112,211,116,214,78],{},"Configurable ",[56,206,207],{},"domain",[56,209,210],{},"timeout",[56,212,213],{},"retries",[56,215,216],{},"maxRetryDelay",[95,218,98],{"id":219},"changed-1",[100,221,222],{},[103,223,224,225,227,228,78],{},"Package renamed from ",[56,226,62],{}," to ",[56,229,58],{},[95,231,133],{"id":232},"removed-1",[100,234,235],{},[103,236,237,240,241,90,243,78],{},[56,238,239],{},"evaluate",". In V3, evaluations are created by the client SDKs and confirmed server-side with ",[56,242,166],{},[56,244,170],{},[246,247],"hr",{},[46,249,250,251,253],{},"The versions below shipped as ",[56,252,62],{}," against the V2 API.",[80,255,257],{"id":256},"_010-2025-08-25","[0.1.0] - 2025-08-25",[95,259,153],{"id":260},"added-1",[100,262,263],{},[103,264,265,267],{},[56,266,188],{}," method to update a user.",[80,269,271],{"id":270},"_0013-2024-11-11","[0.0.13] - 2024-11-11",[95,273,153],{"id":274},"added-2",[100,276,277],{},[103,278,279,281,282,112,285,112,288,116,291,294],{},[56,280,239],{}," method now accepts ",[56,283,284],{},"email",[56,286,287],{},"phone",[56,289,290],{},"ip",[56,292,293],{},"metadata"," parameters.",[80,296,298],{"id":297},"_0012-2024-11-05","[0.0.12] - 2024-11-05",[95,300,98],{"id":301},"changed-2",[100,303,304],{},[103,305,306],{},"Updated readme.",[80,308,310],{"id":309},"_0011-2024-11-05","[0.0.11] - 2024-11-05",[95,312,153],{"id":313},"added-3",[100,315,316],{},[103,317,318,320],{},[56,319,239],{}," method to evaluate an action for a user.",[80,322,324],{"id":323},"_0010-2024-09-16","[0.0.10] - 2024-09-16",[95,326,98],{"id":327},"changed-3",[100,329,330],{},[103,331,332],{},"Initial release of the Core SDK.",{"title":334,"searchDepth":335,"depth":335,"links":336},"",2,[337,342,347,350,353,356,359],{"id":82,"depth":335,"text":83,"children":338},[339,341],{"id":97,"depth":340,"text":98},3,{"id":132,"depth":340,"text":133},{"id":148,"depth":335,"text":149,"children":343},[344,345,346],{"id":152,"depth":340,"text":153},{"id":219,"depth":340,"text":98},{"id":232,"depth":340,"text":133},{"id":256,"depth":335,"text":257,"children":348},[349],{"id":260,"depth":340,"text":153},{"id":270,"depth":335,"text":271,"children":351},[352],{"id":274,"depth":340,"text":153},{"id":297,"depth":335,"text":298,"children":354},[355],{"id":301,"depth":340,"text":98},{"id":309,"depth":335,"text":310,"children":357},[358],{"id":313,"depth":340,"text":153},{"id":323,"depth":335,"text":324,"children":360},[361],{"id":327,"depth":340,"text":98},"The server-side SDK for Node.js, published as @ruptjs\u002Fapi. It replaces the earlier @ruptjs\u002Fcore package.","md",{},true,{"title":16,"description":362},{"loc":17},"cBKbHRexgZSNH-aYnoDknQxjqoYUdEQ_XR3ZkhPPUEk",1785260584296]