Skip to content

Feat/update session keys permissionless v7 DON'T MERGE #663

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 16 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
262 changes: 130 additions & 132 deletions integration/external/Zerodev.test.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
// TODO: Enable when ZeroDev is ready
// import { verifyMessage } from '@ambire/signature-validator'
// import { assert } from 'chai'
import { assert } from 'chai'
// import { ethers } from 'ethers'
// import * as fs from 'fs'
// import { decodeJwt } from 'jose'
import { createPublicClient, http } from 'viem'
import { createPublicClient, http, parseAbi } from 'viem'
import { arbitrumSepolia } from 'viem/chains'
import {
// AssetAttributes,
// AssetPrice,
// ERCType,
// MetaData,
// NETWORK_FEE_DENOMINATOR,
// NFTAttributes,
AssetPrice,
ERCType,
MetaData,
NETWORK_FEE_DENOMINATOR,
NFTAttributes,
Nevermined,
// NeverminedNFT1155Type,
// NvmAccount,
// PublishMetadataOptions,
// ServiceAttributes,
// SubscriptionType,
// makeRandomWallet,
NeverminedNFT1155Type,
NvmAccount,
PublishMetadataOptions,
ServiceAttributes,
SubscriptionType,
makeRandomWallet,
} from '../../src'
// import { DDO } from '../../src/ddo'
import {
// createKernelClient,
// createSessionKey,
createSessionKey,
getSessionKey,
} from '../../src/nevermined/utils/BlockchainViemUtils'
import { config } from '../config'
Expand Down Expand Up @@ -277,127 +277,124 @@ describe('Nevermined sdk with zerodev', () => {

describe('Test zerodev sessionKeys', () => {
// let kernelClient: any // TODO: KernelAccountClient<any, any, any, any>
// const contractAddress = '0x93605C644181f3dD03A37228528649A76822Fcf1' as '0x{string}' // DIDRegistry address
const contractAddress = '0x93605C644181f3dD03A37228528649A76822Fcf1' as '0x{string}' // DIDRegistry address

// const owner = makeRandomWallet()
const owner = makeRandomWallet()

it('should generate a session key', async () => {
// const permissions = [
// {
// target: contractAddress,
// abi: parseAbi([
// 'function registerMintableDID(bytes32 _didSeed, address _nftContractAddress, bytes32 _checksum, address[] memory _providers, string memory _url, uint256 _cap, uint256 _royalties, bool _mint, bytes32 _activityId, string memory _nftMetadata, string memory _immutableUrl) public',
// ]),
// functionName: 'registerMintableDID',
// },
// {
// target: contractAddress,
// abi: parseAbi([
// 'function registerMintableDID(bytes32 _didSeed,address _nftContractAddress,bytes32 _checksum,address[] memory _providers,string memory _url,uint256 _cap,uint256 _royalties,bytes32 _activityId,string memory _nftMetadata,string memory _immutableUrl) public',
// ]),
// functionName: 'registerMintableDID',
// },
// {
// target: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d' as `0x${string}`,
// abi: parseAbi([
// 'function approve(address spender, uint256 amount) external returns (bool)',
// ]),
// functionName: 'approve',
// },
// {
// target: '0x1c52ed414EDd1bCC20Ea670d42289e8bFC03C095',
// abi: parseAbi([
// 'function createAgreementAndPayEscrow(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _accessConsumer, uint256 _idx, address _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) public',
// ]),
// functionName: 'createAgreementAndPayEscrow',
// },
// {
// target: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d' as `0x${string}`,
// abi: parseAbi(['function transfer(address to, uint amount) returns (bool)']),
// functionName: 'transfer',
// },
// ]
// const sessionKey = await createSessionKey(owner, publicClient, permissions)
// assert.isDefined(sessionKey)
const sessionKey =
'eyJzZXNzaW9uS2V5UGFyYW1zIjp7InBheW1hc3RlciI6IjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSIsInZhbGlkQWZ0ZXIiOjAsInZhbGlkVW50aWwiOjAsInBlcm1pc3Npb25zIjpbeyJ0YXJnZXQiOiIweDkzNjA1QzY0NDE4MWYzZEQwM0EzNzIyODUyODY0OUE3NjgyMkZjZjEiLCJhYmkiOlt7Im5hbWUiOiJyZWdpc3Rlck1pbnRhYmxlRElEIiwidHlwZSI6ImZ1bmN0aW9uIiwic3RhdGVNdXRhYmlsaXR5Ijoibm9ucGF5YWJsZSIsImlucHV0cyI6W3sidHlwZSI6ImJ5dGVzMzIiLCJuYW1lIjoiX2RpZFNlZWQifSx7InR5cGUiOiJhZGRyZXNzIiwibmFtZSI6Il9uZnRDb250cmFjdEFkZHJlc3MifSx7InR5cGUiOiJieXRlczMyIiwibmFtZSI6Il9jaGVja3N1bSJ9LHsidHlwZSI6ImFkZHJlc3NbXSIsIm5hbWUiOiJfcHJvdmlkZXJzIn0seyJ0eXBlIjoic3RyaW5nIiwibmFtZSI6Il91cmwifSx7InR5cGUiOiJ1aW50MjU2IiwibmFtZSI6Il9jYXAifSx7InR5cGUiOiJ1aW50MjU2IiwibmFtZSI6Il9yb3lhbHRpZXMifSx7InR5cGUiOiJib29sIiwibmFtZSI6Il9taW50In0seyJ0eXBlIjoiYnl0ZXMzMiIsIm5hbWUiOiJfYWN0aXZpdHlJZCJ9LHsidHlwZSI6InN0cmluZyIsIm5hbWUiOiJfbmZ0TWV0YWRhdGEifSx7InR5cGUiOiJzdHJpbmciLCJuYW1lIjoiX2ltbXV0YWJsZVVybCJ9XSwib3V0cHV0cyI6W119XSwiZnVuY3Rpb25OYW1lIjoicmVnaXN0ZXJNaW50YWJsZURJRCIsInZhbHVlTGltaXQiOiIwIiwic2lnIjoiMHhjZmZlMWViMyIsInJ1bGVzIjpbXSwiaW5kZXgiOjAsImV4ZWN1dGlvblJ1bGUiOnsidmFsaWRBZnRlciI6MCwiaW50ZXJ2YWwiOjAsInJ1bnMiOjB9LCJvcGVyYXRpb24iOjB9LHsidGFyZ2V0IjoiMHg5MzYwNUM2NDQxODFmM2REMDNBMzcyMjg1Mjg2NDlBNzY4MjJGY2YxIiwiYWJpIjpbeyJuYW1lIjoicmVnaXN0ZXJNaW50YWJsZURJRCIsInR5cGUiOiJmdW5jdGlvbiIsInN0YXRlTXV0YWJpbGl0eSI6Im5vbnBheWFibGUiLCJpbnB1dHMiOlt7InR5cGUiOiJieXRlczMyIiwibmFtZSI6Il9kaWRTZWVkIn0seyJ0eXBlIjoiYWRkcmVzcyIsIm5hbWUiOiJfbmZ0Q29udHJhY3RBZGRyZXNzIn0seyJ0eXBlIjoiYnl0ZXMzMiIsIm5hbWUiOiJfY2hlY2tzdW0ifSx7InR5cGUiOiJhZGRyZXNzW10iLCJuYW1lIjoiX3Byb3ZpZGVycyJ9LHsidHlwZSI6InN0cmluZyIsIm5hbWUiOiJfdXJsIn0seyJ0eXBlIjoidWludDI1NiIsIm5hbWUiOiJfY2FwIn0seyJ0eXBlIjoidWludDI1NiIsIm5hbWUiOiJfcm95YWx0aWVzIn0seyJ0eXBlIjoiYnl0ZXMzMiIsIm5hbWUiOiJfYWN0aXZpdHlJZCJ9LHsidHlwZSI6InN0cmluZyIsIm5hbWUiOiJfbmZ0TWV0YWRhdGEifSx7InR5cGUiOiJzdHJpbmciLCJuYW1lIjoiX2ltbXV0YWJsZVVybCJ9XSwib3V0cHV0cyI6W119XSwiZnVuY3Rpb25OYW1lIjoicmVnaXN0ZXJNaW50YWJsZURJRCIsInZhbHVlTGltaXQiOiIwIiwic2lnIjoiMHgzYmQwMmM0MSIsInJ1bGVzIjpbXSwiaW5kZXgiOjEsImV4ZWN1dGlvblJ1bGUiOnsidmFsaWRBZnRlciI6MCwiaW50ZXJ2YWwiOjAsInJ1bnMiOjB9LCJvcGVyYXRpb24iOjB9LHsidGFyZ2V0IjoiMHg3NWZhZjExNGVhZmIxQkRiZTJGMDMxNkRGODkzZmQ1OENFNDZBQTRkIiwiYWJpIjpbeyJuYW1lIjoiYXBwcm92ZSIsInR5cGUiOiJmdW5jdGlvbiIsInN0YXRlTXV0YWJpbGl0eSI6Im5vbnBheWFibGUiLCJpbnB1dHMiOlt7InR5cGUiOiJhZGRyZXNzIiwibmFtZSI6InNwZW5kZXIifSx7InR5cGUiOiJ1aW50MjU2IiwibmFtZSI6ImFtb3VudCJ9XSwib3V0cHV0cyI6W3sidHlwZSI6ImJvb2wifV19XSwiZnVuY3Rpb25OYW1lIjoiYXBwcm92ZSIsInZhbHVlTGltaXQiOiIwIiwic2lnIjoiMHgwOTVlYTdiMyIsInJ1bGVzIjpbXSwiaW5kZXgiOjIsImV4ZWN1dGlvblJ1bGUiOnsidmFsaWRBZnRlciI6MCwiaW50ZXJ2YWwiOjAsInJ1bnMiOjB9LCJvcGVyYXRpb24iOjB9LHsidGFyZ2V0IjoiMHgxYzUyZWQ0MTRFRGQxYkNDMjBFYTY3MGQ0MjI4OWU4YkZDMDNDMDk1IiwiYWJpIjpbeyJuYW1lIjoiY3JlYXRlQWdyZWVtZW50QW5kUGF5RXNjcm93IiwidHlwZSI6ImZ1bmN0aW9uIiwic3RhdGVNdXRhYmlsaXR5Ijoibm9ucGF5YWJsZSIsImlucHV0cyI6W3sidHlwZSI6ImJ5dGVzMzIiLCJuYW1lIjoiX2lkIn0seyJ0eXBlIjoiYnl0ZXMzMiIsIm5hbWUiOiJfZGlkIn0seyJ0eXBlIjoiYnl0ZXMzMltdIiwibmFtZSI6Il9jb25kaXRpb25JZHMifSx7InR5cGUiOiJ1aW50MjU2W10iLCJuYW1lIjoiX3RpbWVMb2NrcyJ9LHsidHlwZSI6InVpbnQyNTZbXSIsIm5hbWUiOiJfdGltZU91dHMifSx7InR5cGUiOiJhZGRyZXNzIiwibmFtZSI6Il9hY2Nlc3NDb25zdW1lciJ9LHsidHlwZSI6InVpbnQyNTYiLCJuYW1lIjoiX2lkeCJ9LHsidHlwZSI6ImFkZHJlc3MiLCJuYW1lIjoiX3Jld2FyZEFkZHJlc3MifSx7InR5cGUiOiJhZGRyZXNzIiwibmFtZSI6Il90b2tlbkFkZHJlc3MifSx7InR5cGUiOiJ1aW50MjU2W10iLCJuYW1lIjoiX2Ftb3VudHMifSx7InR5cGUiOiJhZGRyZXNzW10iLCJuYW1lIjoiX3JlY2VpdmVycyJ9XSwib3V0cHV0cyI6W119XSwiZnVuY3Rpb25OYW1lIjoiY3JlYXRlQWdyZWVtZW50QW5kUGF5RXNjcm93IiwidmFsdWVMaW1pdCI6IjAiLCJzaWciOiIweGY4ZmUxMDcwIiwicnVsZXMiOltdLCJpbmRleCI6MywiZXhlY3V0aW9uUnVsZSI6eyJ2YWxpZEFmdGVyIjowLCJpbnRlcnZhbCI6MCwicnVucyI6MH0sIm9wZXJhdGlvbiI6MH1dfSwiYWN0aW9uIjp7InNlbGVjdG9yIjoiMHg1MTk0NTQ0NyIsImFkZHJlc3MiOiIweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAifSwidmFsaWRpdHlEYXRhIjp7InZhbGlkQWZ0ZXIiOjAsInZhbGlkVW50aWwiOjB9LCJhY2NvdW50UGFyYW1zIjp7ImluaXRDb2RlIjoiMHgiLCJhY2NvdW50QWRkcmVzcyI6IjB4NGZlM2U3ZDQyZkE4M2JlNEU4Y0YwMzQ1MUFjM0YyNTk4MGE3M2ZGNiJ9LCJlbmFibGVTaWduYXR1cmUiOiIweGI4NzYxYjAwOTVlZWFhOTBjODMwODRiMDI4N2E3YTk1MTllYWM5NzVjN2MyMGE4ZDljNzg4ZWQxNDdmM2U0ODQ3MjgyYjhhNjA5NjE5OWQ3YTI1ZGQ4MzJlZTU2ZjM3ZmUxMjBmOWMyMzYyMmYxYWQwNTBkODM4NDE2NWZkMTc4MWMiLCJwcml2YXRlS2V5IjoiMHg5MTNlZDFkZGZiOWIzZDMyNjFhZTYyYWZhMzE1MzI5MDk2OGFiYzcyYTBkMjJhMDZhNzFjNWM4NzlhZjQ5ZGM3In0='

const permissions = [
{
target: contractAddress,
abi: parseAbi([
'function registerMintableDID(bytes32 _didSeed, address _nftContractAddress, bytes32 _checksum, address[] memory _providers, string memory _url, uint256 _cap, uint256 _royalties, bool _mint, bytes32 _activityId, string memory _nftMetadata, string memory _immutableUrl) public',
]),
functionName: 'registerMintableDID',
},
{
target: contractAddress,
abi: parseAbi([
'function registerMintableDID(bytes32 _didSeed,address _nftContractAddress,bytes32 _checksum,address[] memory _providers,string memory _url,uint256 _cap,uint256 _royalties,bytes32 _activityId,string memory _nftMetadata,string memory _immutableUrl) public',
]),
functionName: 'registerMintableDID',
},
{
target: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d' as `0x${string}`,
abi: parseAbi([
'function approve(address spender, uint256 amount) external returns (bool)',
]),
functionName: 'approve',
},
{
target: '0x1c52ed414EDd1bCC20Ea670d42289e8bFC03C095',
abi: parseAbi([
'function createAgreementAndPayEscrow(bytes32 _id, bytes32 _did, bytes32[] _conditionIds, uint256[] _timeLocks, uint256[] _timeOuts, address _accessConsumer, uint256 _idx, address _rewardAddress, address _tokenAddress, uint256[] _amounts, address[] _receivers) public',
]),
functionName: 'createAgreementAndPayEscrow',
},
{
target: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d' as `0x${string}`,
abi: parseAbi(['function transfer(address to, uint amount) returns (bool)']),
functionName: 'transfer',
},
]
const sessionKey = await createSessionKey(owner, publicClient, permissions)
assert.isDefined(sessionKey)
const deserializedSessionKey = await getSessionKey(sessionKey, PROJECT_ID, publicClient)

// Login to the marketplace
// const acc = NvmAccount.fromAccount(owner)
// const clientAssertion = await nevermined.utils.jwt.generateClientAssertion(deserializedSessionKey)
// const marketplaceAuthToken = await nevermined.services.marketplace.login(clientAssertion)
// console.log('marketplaceAuthToken', marketplaceAuthToken)
const acc = NvmAccount.fromAccount(owner)
const clientAssertion = await nevermined.utils.jwt.generateClientAssertion(acc)
const marketplaceAuthToken = await nevermined.services.marketplace.login(clientAssertion)
console.log('marketplaceAuthToken', marketplaceAuthToken)
const account = deserializedSessionKey

// REGISTRATION OF AN ASSET
//================================================================================================
// const subscriptionNFT = await nevermined.contracts.loadNft1155(
// '0x1bcA156f746C6Eb8b18d61654293e2Fc5b653fF5',
// )
// const feeReceiver = await nevermined.keeper.nvmConfig.getFeeReceiver()
const subscriptionNFT = await nevermined.contracts.loadNft1155(
'0x1bcA156f746C6Eb8b18d61654293e2Fc5b653fF5',
)
const feeReceiver = await nevermined.keeper.nvmConfig.getFeeReceiver()

// const assetPrice = new AssetPrice(account.getId(), 0n).adjustToIncludeNetworkFees(
// feeReceiver,
// NETWORK_FEE_DENOMINATOR,
// )
// assetPrice.setTokenAddress('0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d')

// const date = new Date().toISOString().replace(/\.\d{3}/, '')
// const subscriptionLimitType = SubscriptionType.Credits
// const metadata: MetaData = {
// main: {
// name: 'TEST FROM ZERODEV USING SESSION KEY',
// author: account.getId(),
// dateCreated: date,
// datePublished: date,
// type: 'subscription',
// license: 'No License Specified',
// files: [],
// ercType: ERCType.nft1155,
// nftType: NeverminedNFT1155Type.nft1155Credit,
// subscription: {
// timeMeasure: 'days',
// subscriptionType: subscriptionLimitType,
// },
// },
// additionalInformation: {
// description: 'test',
// tags: [],
// customData: {
// dateMeasure: 'days',
// plan: 'custom',
// subscriptionLimitType,
// },
// },
// }
// const services: ServiceAttributes[] = [
// {
// serviceType: 'nft-sales',
// price: assetPrice,
// nft: {
// // duration,
// amount: 10n,
// nftTransfer: false,
// },
// },
// ]

// const nftAttributes = NFTAttributes.getCreditsSubscriptionInstance({
// metadata,
// services,
// providers: ['0x046d0698926aFa3ab6D6591f03063488F3Fb4327'],
// nftContractAddress: subscriptionNFT.address,
// preMint: false,
// royaltyAttributes: undefined,
// })

// const ddo = await nevermined.nfts1155.create(nftAttributes, account, {
// metadata: PublishMetadataOptions.OnlyMetadataAPI,
// })

// assert.isDefined(ddo)
const assetPrice = new AssetPrice(account.getId(), 0n).adjustToIncludeNetworkFees(
feeReceiver,
NETWORK_FEE_DENOMINATOR,
)
assetPrice.setTokenAddress('0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d')

const date = new Date().toISOString().replace(/\.\d{3}/, '')
const subscriptionLimitType = SubscriptionType.Credits
const metadata: MetaData = {
main: {
name: 'TEST FROM ZERODEV USING SESSION KEY',
author: account.getId(),
dateCreated: date,
datePublished: date,
type: 'subscription',
license: 'No License Specified',
files: [],
ercType: ERCType.nft1155,
nftType: NeverminedNFT1155Type.nft1155Credit,
subscription: {
timeMeasure: 'days',
subscriptionType: subscriptionLimitType,
},
},
additionalInformation: {
description: 'test',
tags: [],
customData: {
dateMeasure: 'days',
plan: 'custom',
subscriptionLimitType,
},
},
}
const services: ServiceAttributes[] = [
{
serviceType: 'nft-sales',
price: assetPrice,
nft: {
// duration,
amount: 10n,
nftTransfer: false,
},
},
]

const nftAttributes = NFTAttributes.getCreditsSubscriptionInstance({
metadata,
services,
providers: ['0x046d0698926aFa3ab6D6591f03063488F3Fb4327'],
nftContractAddress: subscriptionNFT.address,
preMint: false,
royaltyAttributes: undefined,
})

const ddo = await nevermined.nfts1155.create(nftAttributes, account, {
metadata: PublishMetadataOptions.OnlyMetadataAPI,
})

assert.isDefined(ddo)

// ORDER OF AN ASSET
//================================================================================================
Expand All @@ -418,14 +415,15 @@ describe('Nevermined sdk with zerodev', () => {
// console.log(claim)

// DOWNLOAD OF AN ASSET
const fileDid = 'did:nv:d65e2726b37510d231a86183d0de5d9281830381b579315c64e1eea7ee3e416f'
const download = await nevermined.nfts1155.access(
fileDid,
account,
'/tmp/nevermined/sdk-js',
-1,
)
console.log(download)
//================================================================================================
// const fileDid = 'did:nv:d65e2726b37510d231a86183d0de5d9281830381b579315c64e1eea7ee3e416f'
// const download = await nevermined.nfts1155.access(
// fileDid,
// account,
// '/tmp/nevermined/sdk-js',
// -1,
// )
// console.log(download)
})
})
})
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@nevermined-io/sdk",
"version": "3.0.4",
"version": "3.0.5-rc0",
"description": "Javascript SDK for connecting with Nevermined Data Platform ",
"main": "./dist/node/sdk.js",
"typings": "./dist/node/sdk.d.ts",
Expand Down Expand Up @@ -54,24 +54,24 @@
"@apollo/client": "^3.7.16",
"@turnkey/viem": "0.4.16",
"@zerodev/ecdsa-validator": "5.2.3",
"@zerodev/permissions": "^5.2.6",
"@zerodev/sdk": "5.2.11",
"@zerodev/session-key": "^5.3.0",
"assert": "^2.0.0",
"cross-fetch": "^4.0.0",
"crypto-browserify": "^3.12.0",
"deprecated-decorator": "^0.1.6",
"eccrypto": "1.1.6",
"fflate": "0.8.2",
"form-data": "^4.0.0",
"graphql": "^16.7.1",
"https-browserify": "^1.0.0",
"jose": "^4.11.2",
"fflate": "0.8.2",
"eccrypto": "1.1.6",
"js-file-download": "^0.4.12",
"lodash": "^4.17.21",
"node-fetch": "^2.6.1",
"os-browserify": "^0.3.0",
"path-browserify": "^1.0.1",
"permissionless": "^0.1.22",
"permissionless": "0.1.26",
"pluralize": "^8.0.0",
"save-file": "^2.3.1",
"stream-browserify": "^3.0.0",
Expand All @@ -85,8 +85,8 @@
"@alchemy/aa-core": "3.12.1",
"@zerodev/ecdsa-validator": "^5.2.3",
"@zerodev/sdk": "^5.2.11",
"@zerodev/session-key": "^5.3.0",
"permissionless": "^0.1.26",
"@zerodev/permissions": "^5.2.6",
"permissionless": "0.1.26",
"viem": "2.9.31"
},
"devDependencies": {
Expand Down
Loading
Loading