0.1.1 • Published 9 months ago

approvalkit v0.1.1

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
9 months ago

Indent ApprovalKit

ApprovalKit is a fast, easy, and reliable way to build applications that require approval for sensitive actions.

It provides a simple API for creating approval requests, a UI for approving them, and a policy engine for enforcing deterministic policies.

Universal approval requests are a powerful tool for building secure, reliable, and compliant applications. They can be used to:

  • Require approval for sensitive actions, such as transferring funds or deleting data
  • Require approval for actions that may be risky, such as deploying code or changing permissions
  • Require approval for actions that may be costly, such as running a large query or sending a large number of emails
  • Require approval for actions that may be malicious, such as changing a user's email address or password

Installation

npm i approvalkit

View the full documentation and examples on approvalkit.com/docs

Example: An AI Chatbot with Next.js and OpenAI

With the Vercel AI SDK, you can build a ChatGPT-like app in just a few lines of code:

// ./app/api/chat/route.js
import { Configuration, OpenAIApi } from 'openai-edge'
import { OpenAIStream, StreamingTextResponse } from 'ai'
import { OpenAIStreamWithApprovals } from 'approvalkit'

const config = new Configuration({
  apiKey: process.env.OPENAI_API_KEY
})
const openai = new OpenAIApi(config)

export const runtime = 'edge'

export async function POST(req) {
  const { messages } = await req.json()
  const response = await openai.createChatCompletion({
    model: 'gpt-4',
    stream: true,
    messages
  })
  const stream = OpenAIStreamWithApprovals(OpenAIStream(response))
  return new StreamingTextResponse(stream)
}
// ./app/page.js
'use client'

import { ApprovalManager, useApprovals } from 'approvalkit/react'

export default function Chat() {
  const { approvals, getApproval } = useApprovals()
  const onDelete = () => {
    getApproval({
      resources: [{ kind: 'project', id: '123' }]
      ops: [{ op: 'delete', resourceSelector: 'project:123' }]
    })
  }

  return (
    <div>
      <ApprovalManager
        approvals={approvals}
        getApproval={getApproval}
      />

      <div>
        <h2>Are you sure you want to delete this project?</h2>
        <button onClick={onDelete}>Delete</button>
      </div>
    </div>
  )
}

View the full documentation and examples on approvalkit.com/docs