https://github.com/permify/permify-node
Permify client for Node.js
https://github.com/permify/permify-node
Last synced: 10 months ago
JSON representation
Permify client for Node.js
- Host: GitHub
- URL: https://github.com/permify/permify-node
- Owner: Permify
- License: apache-2.0
- Created: 2022-12-22T23:16:11.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-08-08T10:53:47.000Z (10 months ago)
- Last Synced: 2025-08-09T13:16:45.945Z (10 months ago)
- Language: TypeScript
- Size: 2.45 MB
- Stars: 26
- Watchers: 2
- Forks: 10
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
Permify NodeJS Client
This client makes it easy to interact with [Permify](https://github.com/Permify/permify) from your Node.js application.
# Installation
Use npm to install:
```shell
npm install @permify/permify-node
```
Use yarn to install (Please be aware that Yarn versions greater than v1.10.0 and less than v2 are not supported):
```shell
yarn add @permify/permify-node
```
# How to use
### Create a new tenant
```typescript
import * as permify from "@permify/permify-node";
const client = permify.grpc.newClient({
endpoint: "localhost:3478",
cert: undefined,
insecure: true
});
client.tenancy.create({
id: "t1",
name: "Tenant 1"
}).then((response) => {
console.log(response);
// handle response
})
```
### Write Schema
```typescript
import * as permify from "@permify/permify-node";
const client = permify.grpc.newClient({
endpoint: "localhost:3478",
cert: undefined,
insecure: true
});
let schema = `
entity user {}
entity document {
relation viewer @user
action view = viewer
}
`;
// Write the schema
client.tenancy.create({
tenantId: "t1",
schema: schema
}).then((response) => {
// handle response
})
```
### Write Relationships
```typescript
import * as permify from "@permify/permify-node";
const client = permify.grpc.newClient({
endpoint: "localhost:3478",
cert: undefined,
insecure: true
});
client.relationship.write({
tenantId: "t1",
metadata: {
schemaVersion: ""
},
tuples: [{
entity: {
type: "document",
id: "1"
},
relation: "viewer",
subject: {
type: "user",
id: "1"
}
}]
}).then((response) => {
// handle response
})
```
### Check
```typescript
import * as permify from "@permify/permify-node";
const client = permify.grpc.newClient({
endpoint: "localhost:3478",
cert: undefined,
insecure: true
});
client.permission.check({
tenantId: "t1",
metadata: {
snapToken: "",
schemaVersion: "",
depth: 20
},
entity: {
type: "document",
id: "1"
},
permission: "view",
subject: {
type: "user",
id: "3"
}
}).then((response) => {
if (response.can === permify.grpc.base.CheckResult.CHECK_RESULT_ALLOWED) {
console.log("RESULT_ALLOWED")
} else {
console.log("RESULT_DENIED")
}
})
```
### Streaming Calls
```typescript
import * as permify from "@permify/permify-node";
function main() {
const client = permify.grpc.newClient({
endpoint: "localhost:3478",
cert: undefined,
insecure: true
});
let res = client.permission.lookupEntityStream({
tenantId: "t1",
metadata: {
snapToken: "",
schemaVersion: "",
depth: 20
},
entityType: "document",
permission: "view",
subject: {
type: "user",
id: "1"
}
})
handle(res)
}
async function handle(res: AsyncIterable) {
for await (const response of res) {
// response.entityId
}
}
```
### Interceptors
#### Access Token Interceptor
```typescript
import * as permify from "@permify/permify-node";
const client = new permify.grpc.newClient({
endpoint: "localhost:3478",
cert: undefined,
insecure: true
}, permify.grpc.newAccessTokenInterceptor("YOUR_TOKEN"))
```
### Certs
```typescript
import * as permify from "@permify/permify-node";
import fs from 'fs';
const cert = fs.readFileSync('path/to/cert.pem');
const client = new permify.grpc.newClient({
endpoint: "localhost:3478",
cert: cert,
insecure: true
}, permify.grpc.newAccessTokenInterceptor("YOUR_TOKEN"))
```
Permify is an **open-source authorization service** for creating and maintaining fine-grained authorizations accross
your individual applications and services.
* [Permify website](https://permify.co)
* [Permify documentation](https://docs.permify.co/docs)
* [Permify playground](https://play.permify.co)
* [Permify GitHub Repository](https://github.com/Permify/permify)
## Community & Support
Join our [Discord channel](https://discord.gg/MJbUjwskdH) for issues, feature requests, feedbacks or anything else. We
love to talk about authorization and access control :heart: