This is a Typescript library to interact with the Internet Archive's User Service.
import { UserService } from '@internetarchive/user-service';
// instantiate a UserService object
const userService = new UserService();
// get the result
const result = await userService.getLoggedInUser();
// if the user is logged in, the User object will be in `result.success`
const user = result.success;
if (user) {
console.debug(
'User:', user.username, user.itemname, user.screenanme, user.privs
)
return;
}
// if the user is not logged in or you an error occurred,
// you'll get a `result.error` and can inspect `result.error.type`:
switch (result.error?.type) {
case UserServiceErrorType.userNotLoggedIn:
console.info('User not logged in');
break;
case UserServiceErrorType.networkError:
console.error('There was a network error fetching the user');
break;
case UserServiceErrorType.decodingError:
console.error('There was an error decoding the user service response');
break;
default:
console.error('An unknown error occurred fetching the user');
}
You can pass in a cache handler that implements UserServiceCacheInterface
and the results will be cached:
import { LocalCache } from '@internetarchive/local-cache';
const cache = new LocalCache();
const service = new UserService({
cache,
cacheTTL: 15 * 60 // seconds, optional
})
const result = await service.getLoggedInUser();
// subsequent calls will be cached
yarn start
To run a local development server that serves the basic demo located in demo/index.html
To run the suite of Web Test Runner tests, run
yarn run test
To run the tests in watch mode (for <abbr title="test driven development">TDD</abbr>, for example), run
yarn run test:watch
To scan the project for linting errors, run
yarn run lint
You can lint with ESLint and Prettier individually as well
yarn run lint:eslint
yarn run lint:prettier
To automatically fix many linting errors, run
yarn run format
You can format using ESLint and Prettier individually as well
yarn run format:eslint
yarn run format:prettier
For most of the tools, the configuration is in the package.json
to reduce the amount of files in your project.
If you customize the configuration a lot, you can consider moving them to individual files.