Files
zkAuth/ceramic/lib/deployCeramicModel.mjs
3lLobo 7296f91a31 ceramic model ☑️
2022-09-24 14:25:43 +02:00

100 lines
2.7 KiB
JavaScript

import { ModelManager, } from '@glazed/devtools'
import { CeramicClient } from '@ceramicnetwork/http-client'
import { DID } from 'dids'
import { getResolver as getKeyResolver } from 'key-did-resolver'
import { getResolver as get3IDResolver } from '@ceramicnetwork/3id-did-resolver'
import { ThreeIdProvider } from '@3id/did-provider'
import { Ed25519Provider } from 'key-did-provider-ed25519'
// ✔ Created DID did:key:z6Mkf2fFDdBuKxnZfQeTAk6sPBt4PJog9EdhGytXyMApni9e with seed 3922d415162fdd43f4c627acb7577288fcd9ea37ff3fd4fa223e26c650ec3243
const ceramicEndpoint = {
"read": {
mainnet: "https://gateway-clay.ceramic.network",
testnet: "https://gateway-clay.ceramic.network",
},
"write": {
testnet: "https://ceramic-clay.3boxlabs.com",
}
}
const didKey = process.env.DIDKEY
const SEED = process.env.SEED
// `seed` must be a 32-byte long Uint8Array
async function authenticateDID() {
const seed = Uint32Array.from(SEED)
const provider = new Ed25519Provider(seed)
const did = new DID({ provider, resolver: getKeyResolver() })
await did.authenticate()
return did
}
// `seed` must be a 32-byte long Uint8Array
async function authenticateWithSecret() {
const seed = Uint8Array.from(SEED)
const ceramic = new CeramicClient(ceramicEndpoint.write.testnet)
const threeID = await ThreeIdProvider.create({
seed,
// did: didKey,
// See the section above about permissions management
getPermission: (request) => Promise.resolve(request.payload.path),
ceramic
})
const did = new DID({
provider: threeID.getDidProvider(),
resolver: {
...get3IDResolver(ceramic),
...getKeyResolver(),
},
})
// Authenticate the DID using the 3ID provider
await did.authenticate()
// The Ceramic client can create and update streams using the authenticated DID
ceramic.did = did
return ceramic
}
async function resolveDID() {
const did = new DID({ resolver: getKeyResolver() })
// await did.authenticate()
return await did.resolve('did:key:' + didKey)
}
const deployZkAuthModel = async () => {
// const ceramic = await authenticateWithSecret()
const ceramic = new CeramicClient(ceramicEndpoint.write.testnet)
const did = await authenticateDID(Uint8Array.from(didKey))
// const didRes = await resolveDID()
ceramic.did = didRes
const manager = new ModelManager({ ceramic })
const zkAuthModel = await manager.createSchema('MySchema', {
$schema: 'http://json-schema.org/draft-07/schema#',
title: 'zkAuthModel',
type: 'object',
properties: {
"MerkleTree": {
"type": "string"
}
},
})
const modelAliases = await manager.deploy()
}
deployZkAuthModel()
export default deployZkAuthModel