Have ideas to improve npm?Join in the discussion! »

    resource-endpoint
    TypeScript icon, indicating that this package has built-in type declarations

    4.0.1 • Public • Published

    resource-endpoint

    CircleCI npm version npm downloads

    A simple resource wrapper for Axios and collection of useful Mixins for building Laravel APIs.

    Examples

    Here are two examples using the AuthEndpoint and UserEndpoint classes with several Mixin functions:

    // js/api/endpoints/auth.js
    import { AuthEndpoint, ApiMixin, HandleErrorMixin } from 'resource-endpoint'
    
    export class Auth extends HandleErrorMixin(ApiMixin(AuthEndpoint)) {
        /**
         * Override to set as version, default to empty
         * e.g. v1, v3, v5 and so on.
         *
         * @returns {string}
         */
        get version() {
            return 'v1'
        }
    }
    // js/api/endpoints/user.js
    import { ApiMixin, UserEndpoint, HandleErrorMixin } from 'resource-endpoint'
    
    export class User extends HandleErrorMixin(ApiMixin(UserEndpoint)) {
        /**
         * Override to set as version, default to empty
         * e.g. v1, v3, v5 and so on.
         *
         * @returns {string}
         */
        get version() {
            return 'v1'
        }
    }

    You can use a singleton/factory pattern with a base Api class:

    // js/api/index.js
    import { Auth } from './endpoints/auth'
    import { User } from './endpoints/user'
    
    class Api {
        /**
         *
         * @returns {Auth}
         */
        get auth() {
            return new Auth()
        }
    
        /**
         * @returns {User}
         */
        get user() {
            return new User()
        }
    }
    
    export const api = new Api()

    Usage

    // js/index.js
    import { api } from './api'
    import { safeResponseData } from 'resource-endpoint'
    
    // Usage shown in async functions, likely placed in the component onSubmit for the form
    // Not created as helper function necessarily as shown below.
    
    const currentUser = async () => {
        const { user, errors } = safeResponseData(await api.user.current())
        return { errors, user }
    }
    
    const confirmPassword = async (values) => {
        const { errors, confirmedAt } = safeResponseData(await api.user.confirmPassword(values.password))
        return { errors, confirmedAt }
    }
    
    const logoutUser = async () => {
        const { errors } = safeResponseData(await api.auth.logout())
        return { errors }
    }
    
    const loginUser = async (email, password) => {
        const { user, errors } = safeResponseData(await api.auth.login({ email, password }))
        return { errors, user }
    }
    
    const registerUser = async (values) => {
        const { user, errors } = safeResponseData(await api.auth.register({
            email: values.email,
            emailConfirmation: values.emailConfirmation,
            password: values.password,
            passwordConfirmation: values.passwordConfirmation,
            name: values.name,
        }))
        return { errors, user }
    }

    Install

    npm i resource-endpoint

    DownloadsWeekly Downloads

    147

    Version

    4.0.1

    License

    MIT

    Unpacked Size

    195 kB

    Total Files

    115

    Last publish

    Collaborators

    • avatar