-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathparse-auth-params.ts
More file actions
37 lines (30 loc) · 1.26 KB
/
parse-auth-params.ts
File metadata and controls
37 lines (30 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import * as Effect from 'effect/Effect';
import * as Either from 'effect/Either';
import * as Schema from 'effect/Schema';
import { ConnectAuthPayload, FailedToParseConnectAuthUrl } from '../types.js';
type ParseAuthUrlParams = {
data: unknown;
redirect: string;
nonce: string;
};
const decodePayload = Schema.decodeEither(ConnectAuthPayload);
export const parseAuthParams = (
params: ParseAuthUrlParams,
): Effect.Effect<{ payload: ConnectAuthPayload; redirect: string; nonce: string }, FailedToParseConnectAuthUrl> => {
const { data, redirect, nonce } = params;
if (!data || !redirect || !nonce) {
return Effect.fail(new FailedToParseConnectAuthUrl({ message: 'Missing data or redirect in callback URL' }));
}
if (nonce.length !== 64) {
return Effect.fail(new FailedToParseConnectAuthUrl({ message: 'Invalid nonce' }));
}
try {
const result = decodePayload(data as ConnectAuthPayload);
if (Either.isLeft(result)) {
return Effect.fail(new FailedToParseConnectAuthUrl({ message: 'Failed to parse connect auth payload' }));
}
return Effect.succeed({ payload: result.right, redirect, nonce });
} catch (_error) {
return Effect.fail(new FailedToParseConnectAuthUrl({ message: 'Failed to parse connect auth payload' }));
}
};