@enc-protocol/dm

0.2.1

ENC DM SDK — DMClient

npm i @enc-protocol/dm

@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]

FieldTypeKeyRef
contentstring

invite [ecdh]

FieldTypeKeyRef
greetingstring

sent [ecdh]

FieldTypeKeyRef
contentstring

API

DMClient

Extends AppClient from @enc-protocol/app.

MethodParamsReturnsDescription
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?)stringEvent[]Query events
grant(target, role)Identity, string{ ok, error? }Grant role
as(identity)IdentityDMClientSwitch identity
static create(owner)IdentityDMClientCreate enclave

RBAC Rules

EventRoleOps
*OWNERR
Move(OUTSIDER,FRIEND)OWNERC
Move(OUTSIDER,BLOCKED)OWNERC
Move(FRIEND,OUTSIDER)OWNERC
Move(FRIEND,BLOCKED)OWNERC
Move(BLOCKED,FRIEND)OWNERC
Move(BLOCKED,OUTSIDER)OWNERC
TerminateOWNERC
inviteOUTSIDERC
inviteOWNERD
messageOWNERD
messageFRIENDC
messageSenderU, D
messageBLOCKED_U, _D
sentOWNERC, U
rotateOWNERC

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

  • @enc-protocol/app