@atlasauth/js 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/step-up.d.ts +52 -0
- package/dist/step-up.js +24 -0
- package/dist/step-up.js.map +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atlasauth/js changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.23.0 — 2026-10-25
|
|
6
|
+
|
|
7
|
+
- `stepUp(client, { strategy, … })` and `sendStepUpEmailCode(client)`: re-authenticate the signed-in user in place (`POST /v1/client/me/step_up`) and get a token with a fresh `auth_time`; `authenticatedWithin(claims, maxAgeSeconds)` checks it.
|
|
8
|
+
|
|
3
9
|
## 0.22.0 — 2026-10-24
|
|
4
10
|
|
|
5
11
|
- Per-call integration audiences (`getToken({ for, cbid })`), partner platforms, operator tokens for partner products.
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export * from './mfa-enrollment';
|
|
|
29
29
|
export * from './passkey-sign-in';
|
|
30
30
|
export * from './passkey-sign-up';
|
|
31
31
|
export * from './email-code-check';
|
|
32
|
+
export * from './step-up';
|
|
32
33
|
export * from './telegram';
|
|
33
34
|
export * from './siwe';
|
|
34
35
|
export * from './telemetry';
|
package/dist/index.js
CHANGED
|
@@ -72,6 +72,7 @@ __exportStar(require("./passkey-sign-in"), exports);
|
|
|
72
72
|
__exportStar(require("./passkey-sign-up"), exports);
|
|
73
73
|
// Check an emailed one-time code without using it up (sign-in, sign-up, step-up, email verification).
|
|
74
74
|
__exportStar(require("./email-code-check"), exports);
|
|
75
|
+
__exportStar(require("./step-up"), exports);
|
|
75
76
|
__exportStar(require("./telegram"), exports);
|
|
76
77
|
__exportStar(require("./siwe"), exports);
|
|
77
78
|
__exportStar(require("./telemetry"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,2CAAyB;AACzB,6CAA2B;AAC3B,yDAAyD;AACzD,kDAAgC;AAChC,sFAAsF;AACtF,mDAAiC;AACjC,gDAA8B;AAC9B,iDAA+B;AAC/B,4CAA0B;AAC1B,iDAA+B;AAC/B,kDAAgC;AAChC,uEAAuE;AACvE,2CAAyB;AACzB,6CAA2B;AAC3B,qFAAqF;AACrF,kDAAgC;AAChC,yCAAuB;AACvB,uEAAuE;AACvE,6CAA2B;AAC3B,mGAAmG;AACnG,2DAAyC;AACzC,4GAA4G;AAC5G,sDAAoC;AACpC,+CAA6B;AAC7B,+EAA+E;AAC/E,6CAA2B;AAC3B,8DAA4C;AAC5C,gGAAgG;AAChG,6CAA0G;AAAjG,gHAAA,iBAAiB,OAAA;AAAE,8GAAA,eAAe,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAClF,qDAW2B;AAVzB,oHAAA,iBAAiB,OAAA;AACjB,2HAAA,wBAAwB,OAAA;AACxB,oHAAA,iBAAiB,OAAA;AACjB,gHAAA,aAAa,OAAA;AACb,wHAAA,qBAAqB,OAAA;AACrB,uHAAA,oBAAoB,OAAA;AAMtB,iEAAiE;AACjE,iDAA+B;AAC/B,4CAA0B;AAC1B,yFAAyF;AACzF,oDAAkC;AAClC,2CAAyB;AACzB,mDAAiC;AACjC,4CAA0B;AAC1B,0GAA0G;AAC1G,mDAAiC;AACjC,uFAAuF;AACvF,oDAAkC;AAClC,4EAA4E;AAC5E,oDAAkC;AAClC,sGAAsG;AACtG,qDAAmC;AACnC,6CAA2B;AAC3B,yCAAuB;AACvB,8CAA4B;AAC5B,2CAAyB;AACzB,4DAA4D;AAC5D,6CAA2B;AAC3B,yDAAuC;AACvC,kDAAgC;AAChC,kDAAgC;AAChC,+DAA+D;AAC/D,kDAAgC;AAChC,qEAAqE;AACrE,4CAA0B;AAC1B,4CAA0B;AAC1B,mDAAiC;AACjC,kDAAgC;AAChC,gGAAgG;AAChG,uDAAqC;AACrC,sDAAsD;AACtD,wDAAsC;AACtC,+EAA+E;AAC/E,oDAAkC;AAClC,+EAA+E;AAC/E,2EAA2E;AAC3E,4CAA0B;AAC1B,kFAAkF;AAClF,mDAAiC;AACjC,4FAA4F;AAC5F,kDAAgC;AAChC,kFAAkF;AAClF,yEAAyE;AACzE,oEAAoE;AACpE,uDAAqC;AACrC,sDAAoC;AACpC,uEAAuE;AACvE,gDAA8B;AAC9B,0EAA0E;AAC1E,4EAA4E;AAC5E,0CAa0B;AARxB,iGAAA,QAAQ,OAAA;AACR,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AACtB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,2CAAyB;AACzB,6CAA2B;AAC3B,yDAAyD;AACzD,kDAAgC;AAChC,sFAAsF;AACtF,mDAAiC;AACjC,gDAA8B;AAC9B,iDAA+B;AAC/B,4CAA0B;AAC1B,iDAA+B;AAC/B,kDAAgC;AAChC,uEAAuE;AACvE,2CAAyB;AACzB,6CAA2B;AAC3B,qFAAqF;AACrF,kDAAgC;AAChC,yCAAuB;AACvB,uEAAuE;AACvE,6CAA2B;AAC3B,mGAAmG;AACnG,2DAAyC;AACzC,4GAA4G;AAC5G,sDAAoC;AACpC,+CAA6B;AAC7B,+EAA+E;AAC/E,6CAA2B;AAC3B,8DAA4C;AAC5C,gGAAgG;AAChG,6CAA0G;AAAjG,gHAAA,iBAAiB,OAAA;AAAE,8GAAA,eAAe,OAAA;AAAE,oHAAA,qBAAqB,OAAA;AAAE,6GAAA,cAAc,OAAA;AAClF,qDAW2B;AAVzB,oHAAA,iBAAiB,OAAA;AACjB,2HAAA,wBAAwB,OAAA;AACxB,oHAAA,iBAAiB,OAAA;AACjB,gHAAA,aAAa,OAAA;AACb,wHAAA,qBAAqB,OAAA;AACrB,uHAAA,oBAAoB,OAAA;AAMtB,iEAAiE;AACjE,iDAA+B;AAC/B,4CAA0B;AAC1B,yFAAyF;AACzF,oDAAkC;AAClC,2CAAyB;AACzB,mDAAiC;AACjC,4CAA0B;AAC1B,0GAA0G;AAC1G,mDAAiC;AACjC,uFAAuF;AACvF,oDAAkC;AAClC,4EAA4E;AAC5E,oDAAkC;AAClC,sGAAsG;AACtG,qDAAmC;AACnC,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,8CAA4B;AAC5B,2CAAyB;AACzB,4DAA4D;AAC5D,6CAA2B;AAC3B,yDAAuC;AACvC,kDAAgC;AAChC,kDAAgC;AAChC,+DAA+D;AAC/D,kDAAgC;AAChC,qEAAqE;AACrE,4CAA0B;AAC1B,4CAA0B;AAC1B,mDAAiC;AACjC,kDAAgC;AAChC,gGAAgG;AAChG,uDAAqC;AACrC,sDAAsD;AACtD,wDAAsC;AACtC,+EAA+E;AAC/E,oDAAkC;AAClC,+EAA+E;AAC/E,2EAA2E;AAC3E,4CAA0B;AAC1B,kFAAkF;AAClF,mDAAiC;AACjC,4FAA4F;AAC5F,kDAAgC;AAChC,kFAAkF;AAClF,yEAAyE;AACzE,oEAAoE;AACpE,uDAAqC;AACrC,sDAAoC;AACpC,uEAAuE;AACvE,gDAA8B;AAC9B,0EAA0E;AAC1E,4EAA4E;AAC5E,0CAa0B;AARxB,iGAAA,QAAQ,OAAA;AACR,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AACtB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step-up: re-authenticate the signed-in user in place, without a new session.
|
|
3
|
+
*
|
|
4
|
+
* A sensitive action ("re-authenticated within 5 minutes") reads `auth_time`
|
|
5
|
+
* on the session token: {@link authenticatedWithin} answers it. When it is too
|
|
6
|
+
* old, prove a credential again with {@link stepUp}; the response carries a
|
|
7
|
+
* fresh session token whose `auth_time` is now, `amr` names the method and
|
|
8
|
+
* `acr` is `urn:atlas:acr:step_up`. The refresh token is not rotated.
|
|
9
|
+
*
|
|
10
|
+
* password POST /v1/client/me/step_up { strategy: 'password', password }
|
|
11
|
+
* totp POST /v1/client/me/step_up { strategy: 'totp', code }
|
|
12
|
+
* backup_code POST /v1/client/me/step_up { strategy: 'backup_code', code }
|
|
13
|
+
* email_code POST /v1/client/me/step_up/email_code, then { strategy: 'email_code', code }
|
|
14
|
+
* passkey POST /v1/client/me/step_up/passkey (challenge), then the assertion
|
|
15
|
+
*/
|
|
16
|
+
import type { FapiClient, FapiResponse } from './fapi';
|
|
17
|
+
export type StepUpInput = {
|
|
18
|
+
strategy: 'password';
|
|
19
|
+
password: string;
|
|
20
|
+
} | {
|
|
21
|
+
strategy: 'totp' | 'backup_code' | 'email_code';
|
|
22
|
+
code: string;
|
|
23
|
+
} | {
|
|
24
|
+
strategy: 'passkey';
|
|
25
|
+
challenge: string;
|
|
26
|
+
credential_id: string;
|
|
27
|
+
authenticator_data: string;
|
|
28
|
+
client_data_json: string;
|
|
29
|
+
signature: string;
|
|
30
|
+
};
|
|
31
|
+
export interface StepUpResult {
|
|
32
|
+
object: 'client';
|
|
33
|
+
stepped_up: true;
|
|
34
|
+
/** Seconds since the epoch: the step-up just performed. */
|
|
35
|
+
auth_time: number;
|
|
36
|
+
amr: string[];
|
|
37
|
+
acr: string;
|
|
38
|
+
/** The re-minted session token carrying the fresh auth_time/amr/acr. */
|
|
39
|
+
jwt: string;
|
|
40
|
+
expires_in_seconds: number;
|
|
41
|
+
}
|
|
42
|
+
/** Prove a credential of the current session again. A wrong credential is a 401. */
|
|
43
|
+
export declare function stepUp(client: FapiClient, input: StepUpInput): Promise<FapiResponse<StepUpResult>>;
|
|
44
|
+
/** Email a one-time step-up code to the user's primary address (then `stepUp({ strategy: 'email_code', code })`). */
|
|
45
|
+
export declare function sendStepUpEmailCode(client: FapiClient): Promise<FapiResponse<unknown>>;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the token's `auth_time` (first-factor sign-in or the last step-up)
|
|
48
|
+
* is within `maxAgeSeconds` of now. A token without `auth_time` never is.
|
|
49
|
+
*/
|
|
50
|
+
export declare function authenticatedWithin(claims: {
|
|
51
|
+
auth_time?: unknown;
|
|
52
|
+
}, maxAgeSeconds: number, nowMs?: number): boolean;
|
package/dist/step-up.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stepUp = stepUp;
|
|
4
|
+
exports.sendStepUpEmailCode = sendStepUpEmailCode;
|
|
5
|
+
exports.authenticatedWithin = authenticatedWithin;
|
|
6
|
+
/** Prove a credential of the current session again. A wrong credential is a 401. */
|
|
7
|
+
function stepUp(client, input) {
|
|
8
|
+
return client.post('/v1/client/me/step_up', input);
|
|
9
|
+
}
|
|
10
|
+
/** Email a one-time step-up code to the user's primary address (then `stepUp({ strategy: 'email_code', code })`). */
|
|
11
|
+
function sendStepUpEmailCode(client) {
|
|
12
|
+
return client.post('/v1/client/me/step_up/email_code', {});
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Whether the token's `auth_time` (first-factor sign-in or the last step-up)
|
|
16
|
+
* is within `maxAgeSeconds` of now. A token without `auth_time` never is.
|
|
17
|
+
*/
|
|
18
|
+
function authenticatedWithin(claims, maxAgeSeconds, nowMs = Date.now()) {
|
|
19
|
+
const at = claims.auth_time;
|
|
20
|
+
if (typeof at !== 'number' || !Number.isFinite(at))
|
|
21
|
+
return false;
|
|
22
|
+
return nowMs / 1000 - at <= maxAgeSeconds;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=step-up.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-up.js","sourceRoot":"","sources":["../src/step-up.ts"],"names":[],"mappings":";;AA0CA,wBAEC;AAGD,kDAEC;AAMD,kDAIC;AAlBD,oFAAoF;AACpF,SAAgB,MAAM,CAAC,MAAkB,EAAE,KAAkB;IAC3D,OAAO,MAAM,CAAC,IAAI,CAAe,uBAAuB,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,qHAAqH;AACrH,SAAgB,mBAAmB,CAAC,MAAkB;IACpD,OAAO,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAA+B,EAAE,aAAqB,EAAE,QAAgB,IAAI,CAAC,GAAG,EAAE;IACpH,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;IAC5B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,aAAa,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlasauth/js",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
],
|
|
34
34
|
"scripts": {
|
|
35
35
|
"build": "tsc -p tsconfig.build.json",
|
|
36
|
-
"typecheck": "
|
|
36
|
+
"typecheck": "tsgo -p tsconfig.json --noEmit --module preserve --moduleResolution bundler --incremental --tsBuildInfoFile node_modules/.cache/typecheck.tsbuildinfo",
|
|
37
37
|
"test": "vitest run"
|
|
38
38
|
}
|
|
39
39
|
}
|