Skip to main content

fp-async

Demonstrates practical async patterns in TypeScript using TaskEither for clean error handling and API interactions.

Install this skill

or
0/100

Security score

The fp-async skill was audited on May 15, 2026 and we found 20 security issues across 1 threat category. Review the findings below before installing.

Categories Tested

Security Issues

medium line 45

Template literal with variable interpolation in command context

SourceSKILL.md
45const response = await fetch(`/api/users/${userId}`)
medium line 47

Template literal with variable interpolation in command context

SourceSKILL.md
47throw new Error(`HTTP ${response.status}`)
medium line 52

Template literal with variable interpolation in command context

SourceSKILL.md
52const posts = await fetch(`/api/users/${userId}/posts`)
medium line 54

Template literal with variable interpolation in command context

SourceSKILL.md
54throw new Error(`HTTP ${posts.status}`)
medium line 84

Template literal with variable interpolation in command context

SourceSKILL.md
84throw new Error(`HTTP ${response.status}: ${response.statusText}`)
medium line 92

Template literal with variable interpolation in command context

SourceSKILL.md
92const getUser = (userId: string) => fetchJson<User>(`/api/users/${userId}`)
medium line 93

Template literal with variable interpolation in command context

SourceSKILL.md
93const getPosts = (userId: string) => fetchJson<Post[]>(`/api/users/${userId}/posts`)
medium line 125

Template literal with variable interpolation in command context

SourceSKILL.md
125(n) => new Error(`Expected positive, got ${n}`)
medium line 429

Template literal with variable interpolation in command context

SourceSKILL.md
429const res = await fetch(`/api/users/${id}`)
medium line 432

Template literal with variable interpolation in command context

SourceSKILL.md
432if (!res.ok) throw { _tag: 'NetworkError', cause: new Error(`HTTP ${res.status}`) }
medium line 599

Template literal with variable interpolation in command context

SourceSKILL.md
599const getUser = (id: string) => api.get<User>(`/api/users/${id}`)
medium line 601

Template literal with variable interpolation in command context

SourceSKILL.md
601const updateUser = (id: string, data: UpdateUserDto) => api.put<User>(`/api/users/${id}`, data)
medium line 602

Template literal with variable interpolation in command context

SourceSKILL.md
602const deleteUser = (id: string) => api.delete(`/api/users/${id}`)
medium line 743

Template literal with variable interpolation in command context

SourceSKILL.md
743(error) => T.of(`Error: ${error.message}`),
medium line 744

Template literal with variable interpolation in command context

SourceSKILL.md
744(user) => T.of(`Welcome, ${user.name}!`)
medium line 828

Template literal with variable interpolation in command context

SourceSKILL.md
828user => new Error(`User ${user.id} is not active`)
medium line 839

Template literal with variable interpolation in command context

SourceSKILL.md
839TE.tap(user => TE.fromIO(() => console.log(`Fetched user: ${user.id}`)))
medium line 845

Template literal with variable interpolation in command context

SourceSKILL.md
845TE.tapError(error => TE.fromIO(() => console.error(`Failed: ${error.message}`)))
medium line 904

Template literal with variable interpolation in command context

SourceSKILL.md
904const res = await fetch(`/api/users/${id}`)
medium line 917

Template literal with variable interpolation in command context

SourceSKILL.md
917const res = await fetch(`/api/users/${id}`)
Scanned on May 15, 2026
View Security Dashboard
Installation guide →