mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-08 04:42:53 +00:00
47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
parseOAuthAuthorizationInput,
|
|
resolveOAuthTokenExpiresAt,
|
|
resolveOAuthTokenLifetimeMs,
|
|
} from "./provider-oauth-runtime.js";
|
|
|
|
describe("provider OAuth runtime", () => {
|
|
it("parses authorization code input from redirect URLs, query strings, and raw codes", () => {
|
|
expect(
|
|
parseOAuthAuthorizationInput("http://localhost/callback?code=oauth-code&state=oauth-state"),
|
|
).toEqual({ code: "oauth-code", state: "oauth-state" });
|
|
expect(parseOAuthAuthorizationInput("code=oauth-code&state=oauth-state")).toEqual({
|
|
code: "oauth-code",
|
|
state: "oauth-state",
|
|
});
|
|
expect(parseOAuthAuthorizationInput("oauth-code#oauth-state")).toEqual({
|
|
code: "oauth-code",
|
|
state: "oauth-state",
|
|
});
|
|
expect(parseOAuthAuthorizationInput(" oauth-code ")).toEqual({ code: "oauth-code" });
|
|
expect(parseOAuthAuthorizationInput(" ")).toEqual({});
|
|
});
|
|
|
|
it("resolves safe OAuth token lifetimes and expiry timestamps", () => {
|
|
expect(resolveOAuthTokenLifetimeMs("30")).toBe(30_000);
|
|
expect(resolveOAuthTokenExpiresAt(30, { nowMs: 1_000, refreshSkewMs: 5_000 })).toBe(26_000);
|
|
});
|
|
|
|
it("rejects invalid OAuth token lifetimes and Date-invalid expiries", () => {
|
|
expect(resolveOAuthTokenLifetimeMs(0)).toBeUndefined();
|
|
expect(resolveOAuthTokenLifetimeMs(1.5)).toBeUndefined();
|
|
expect(resolveOAuthTokenLifetimeMs(Number.MAX_SAFE_INTEGER)).toBeUndefined();
|
|
expect(resolveOAuthTokenExpiresAt(Number.MAX_SAFE_INTEGER, { nowMs: 1_000 })).toBeUndefined();
|
|
expect(
|
|
resolveOAuthTokenExpiresAt(30, {
|
|
nowMs: 8_640_000_000_000_000,
|
|
}),
|
|
).toBeUndefined();
|
|
expect(
|
|
resolveOAuthTokenExpiresAt(30, {
|
|
nowMs: 8_640_000_000_000_001,
|
|
}),
|
|
).toBeUndefined();
|
|
});
|
|
});
|