@enc-protocol/dm
DM SDK — pure, in-memory Node, real crypto.
Install
npm install @enc-protocol/dm --registry https://npm-registry.ocrybit.workers.dev/
Usage
import { DMClient, createIdentity } from "@enc-protocol/dm"
// Create identity and enclave
const owner = createIdentity("alice")
const client = DMClient.create(owner)
// Submit event
const result = client.message({ content: "..." })
console.log(result.ok) // true
// Query events
const events = client.query("message")
// Grant role to another identity
const bob = createIdentity("bob")
client.grant(bob, "Member")
// Use as different identity
const bobClient = client.as(bob)
Event Schemas
message [ecdh]
| Field | Type | Key | Ref |
|---|
| content | string |
invite [ecdh]
| Field | Type | Key | Ref |
|---|
| greeting | string |
sent [ecdh]
| Field | Type | Key | Ref |
|---|
| content | string |
API
DMClient
Extends AppClient from @enc-protocol/app.
| Method | Params | Returns | Description |
|---|
message(content) | content | { ok, error? } | Submit message event [ecdh] |
invite(greeting) | greeting | { ok, error? } | Submit invite event [ecdh] |
sent(content) | content | { ok, error? } | Submit sent event [ecdh] |
query(type?) | string | Event[] | Query events |
grant(target, role) | Identity, string | { ok, error? } | Grant role |
as(identity) | Identity | DMClient | Switch identity |
static create(owner) | Identity | DMClient | Create enclave |
RBAC Rules
| Event | Role | Ops |
|---|
| * | OWNER | R |
| Move(OUTSIDER,FRIEND) | OWNER | C |
| Move(OUTSIDER,BLOCKED) | OWNER | C |
| Move(FRIEND,OUTSIDER) | OWNER | C |
| Move(FRIEND,BLOCKED) | OWNER | C |
| Move(BLOCKED,FRIEND) | OWNER | C |
| Move(BLOCKED,OUTSIDER) | OWNER | C |
| Terminate | OWNER | C |
| invite | OUTSIDER | C |
| invite | OWNER | D |
| message | OWNER | D |
| message | FRIEND | C |
| message | Sender | U, D |
| message | BLOCKED | _U, _D |
| sent | OWNER | C, U |
| rotate | OWNER | C |
Audit
All properties proven by Lean native_decide:
- valid:
(validate config).allPass = true := by native_decide - outsider_can_invite:
config.permits "invite" "OUTSIDER" "C" = true := by native_decide - friend_sends_message:
config.permits "message" "FRIEND" "C" = true := by native_decide - outsider_cannot_message:
config.permits "message" "OUTSIDER" "C" = false := by native_decide - owner_reads_all:
config.canRead "message" "OWNER" = true ∧ ... := by native_decide - sender_ud_message:
config.permits "message" "Sender" "U" = true ∧ ... := by native_decide - blocked_denied:
config.permits "message" "BLOCKED" "_U" = true ∧ ... := by native_decide - owner_manages_moves:
config.permits "Move(OUTSIDER,FRIEND)" "OWNER" "C" = true ∧ ... := by native_decide - messages_ecdh:
config.eventEncrypt "message" = .ecdh := by native_decide - owner_terminates:
config.permits "Terminate" "OWNER" "C" = true := by native_decide - all_tests_pass:
verifyTestSuite config tests = true := by native_decide - all_stateful_tests_pass:
verifyStatefulSuite config statefulTests = true := by native_decide
Dependencies