Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
8 changes: 4 additions & 4 deletions packages/sdk/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 2 additions & 3 deletions packages/sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
"build": "rimraf dist && tsc --project tsconfig.build.json",
"build:watch": "npm run build -- --watch",
"check-types": "tsc --noEmit",
"test:prepare": "node tests/prepare-iexec.js",
"test": "NODE_OPTIONS=--experimental-vm-modules jest --testMatch \"**/tests/**/*.test.ts\"",
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --testMatch \"**/tests/**/*.test.ts\" --coverage",
"test:unit": "NODE_OPTIONS=--experimental-vm-modules jest --testMatch \"**/tests/unit/**/*.test.ts\"",
Expand All @@ -33,7 +32,7 @@
"generate:abi": "rimraf generated/abis && node tools/generateAbiModules.mjs",
"refresh-abis": "mkdir -p .tmp && cp -r abis/core/registry .tmp/ 2>/dev/null || true && rm -rf abis && mkdir -p abis/core && cp -r ../smart-contract/abis/. ./abis/core/ && if [ -d .tmp/registry ]; then mkdir -p abis/core/registry && cp -r .tmp/registry/. ./abis/core/registry/ && rm -rf .tmp; fi",
"stop-test-stack": "cd tests && docker compose --project-name dataprotector-sdk down --volumes --remove-orphans",
"start-test-stack": "cd tests && npm run stop-test-stack && node prepare-test-env.js && docker compose --project-name dataprotector-sdk build && docker compose --project-name dataprotector-sdk up -d && npm run test:prepare"
"start-test-stack": "cd tests && npm run stop-test-stack && node prepare-test-env.js && docker compose --project-name dataprotector-sdk build && docker compose --project-name dataprotector-sdk up -d"
},
"repository": {
"type": "git",
Expand Down Expand Up @@ -62,7 +61,7 @@
"debug": "^4.3.4",
"ethers": "^6.13.2",
"graphql-request": "^6.0.0",
"iexec": "^8.24.0",
"iexec": "^9.0.0",
"jszip": "^3.7.1",
"kubo-rpc-client": "^5.4.1",
"magic-bytes.js": "^1.0.15",
Expand Down
13 changes: 1 addition & 12 deletions packages/sdk/src/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,10 @@ export interface ChainConfig {
}

const CHAIN_CONFIG: Record<ChainId, ChainConfig> = {
// Bellecour
134: {
name: 'bellecour',
dataprotectorContractAddress: '0x3a4ab33f3d605e75b6d00a32a0fa55c3628f6a59',
subgraphUrl:
'https://thegraph.iex.ec/subgraphs/name/bellecour/dataprotector-v2',
ipfsGateway: 'https://ipfs-gateway.v8-bellecour.iex.ec',
ipfsNode: 'https://ipfs-upload.v8-bellecour.iex.ec',
workerpoolAddress: 'prod-v8-bellecour.main.pools.iexec.eth',
},
// Arbitrum Sepolia
421614: {
name: 'arbitrum-sepolia-testnet',
dataprotectorContractAddress: '0x168eAF6C33a77E3caD9db892452f51a5D91df621',
dataprotectorContractAddress: '0x168eaf6c33a77e3cad9db892452f51a5d91df621',
subgraphUrl:
'https://thegraph.arbitrum-sepolia-testnet.iex.ec/api/subgraphs/id/5YjRPLtjS6GH6bB4yY55Qg4HzwtRGQ8TaHtGf9UBWWd',
ipfsGateway: 'https://ipfs-gateway.arbitrum-sepolia-testnet.iex.ec',
Expand Down Expand Up @@ -54,7 +44,6 @@ export const getChainConfig = (
return config;
};

export const DEFAULT_CHAIN_ID = 134;
export const DEFAULT_ARWEAVE_UPLOAD_API = 'https://arweave-api.iex.ec';
export const DEFAULT_ARWEAVE_GATEWAY = 'https://arweave.net';
export const ARWEAVE_FREE_UPLOAD_MAX_SIZE = 100 * 1024; // 100kb
Expand Down
2 changes: 1 addition & 1 deletion packages/sdk/src/lib/IExecDataProtector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class IExecDataProtector extends IExecDataProtectorModule {
public core: IExecDataProtectorCore;

constructor(
ethProvider?:
ethProvider:
| AbstractProvider
| AbstractSigner
| Eip1193Provider
Expand Down
16 changes: 11 additions & 5 deletions packages/sdk/src/lib/IExecDataProtectorModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
} from '../config/config.js';
import { getChainIdFromProvider } from '../utils/getChainId.js';
import {
AddressOrENS,
Address,
DataProtectorConfigOptions,
Web3SignerProvider,
} from './types/index.js';
Expand All @@ -20,7 +20,8 @@ type EthersCompatibleProvider =
| string;

interface IExecDataProtectorResolvedConfig {
dataprotectorContractAddress: AddressOrENS;
networkName: string;
dataprotectorContractAddress: Address;
graphQLClient: GraphQLClient;
pocoSubgraphClient: GraphQLClient;
ipfsNode: string;
Expand All @@ -30,7 +31,9 @@ interface IExecDataProtectorResolvedConfig {
}

abstract class IExecDataProtectorModule {
protected dataprotectorContractAddress!: AddressOrENS;
protected dataprotectorContractAddress!: Address;

protected networkName!: string;

protected graphQLClient!: GraphQLClient;

Expand All @@ -53,16 +56,17 @@ abstract class IExecDataProtectorModule {
private options: DataProtectorConfigOptions;

constructor(
ethProvider?: EthersCompatibleProvider,
ethProvider: EthersCompatibleProvider,
options?: DataProtectorConfigOptions
) {
Comment thread
PierreJeanjacquot marked this conversation as resolved.
this.ethProvider = ethProvider || 'bellecour';
this.ethProvider = ethProvider;
this.options = options || {};
}

protected async init(): Promise<void> {
if (!this.initPromise) {
this.initPromise = this.resolveConfig().then((config) => {
this.networkName = config.networkName;
this.dataprotectorContractAddress = config.dataprotectorContractAddress;
this.graphQLClient = config.graphQLClient;
this.pocoSubgraphClient = config.pocoSubgraphClient;
Expand Down Expand Up @@ -90,6 +94,7 @@ abstract class IExecDataProtectorModule {
this.options?.ipfsGateway || chainDefaultConfig?.ipfsGateway;
const defaultWorkerpool = chainDefaultConfig?.workerpoolAddress;
const ipfsNode = this.options?.ipfsNode || chainDefaultConfig?.ipfsNode;
const networkName = chainDefaultConfig?.name || `unknown-chain-${chainId}`;

const missing = [];
if (!subgraphUrl) missing.push('subgraphUrl');
Expand Down Expand Up @@ -139,6 +144,7 @@ abstract class IExecDataProtectorModule {
}

return {
networkName,
dataprotectorContractAddress: dataprotectorContractAddress.toLowerCase(),
defaultWorkerpool,
graphQLClient,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class IExecDataProtectorCore extends IExecDataProtectorModule {
await isValidSigner(this.iexec);
return protectData({
...args,
networkName: this.networkName,
dataprotectorContractAddress: this.dataprotectorContractAddress,
ipfsNode: this.ipfsNode,
ipfsGateway: this.ipfsGateway,
Expand Down Expand Up @@ -122,7 +123,6 @@ class IExecDataProtectorCore extends IExecDataProtectorModule {
await this.init();
return getProtectedData({
...args,
iexec: this.iexec,
graphQLClient: this.graphQLClient,
});
}
Expand Down
8 changes: 4 additions & 4 deletions packages/sdk/src/lib/dataProtectorCore/getGrantedAccess.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { WorkflowError, handleIfProtocolError } from '../../utils/errors.js';
import { formatGrantedAccess } from '../../utils/formatGrantedAccess.js';
import {
addressOrEnsSchema,
addressSchema,
booleanSchema,
numberBetweenSchema,
positiveNumberSchema,
Expand All @@ -23,13 +23,13 @@ export const getGrantedAccess = async ({
pageSize,
bulkOnly = false,
}: IExecConsumer & GetGrantedAccessParams): Promise<GrantedAccessResponse> => {
const vProtectedData = addressOrEnsSchema()
const vProtectedData = addressSchema()
.label('protectedData')
.validateSync(protectedData);
const vAuthorizedApp = addressOrEnsSchema()
const vAuthorizedApp = addressSchema()
.label('authorizedApp')
.validateSync(authorizedApp);
const vAuthorizedUser = addressOrEnsSchema()
const vAuthorizedUser = addressSchema()
.label('authorizedUser')
.validateSync(authorizedUser);
const vIsUserStrict = booleanSchema()
Expand Down
15 changes: 5 additions & 10 deletions packages/sdk/src/lib/dataProtectorCore/getProtectedData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ import {
} from '../../utils/data.js';
import { ValidationError, WorkflowError } from '../../utils/errors.js';
import { getMultiaddrAsString } from '../../utils/getMultiaddrAsString.js';
import { resolveENS } from '../../utils/resolveENS.js';
import {
addressOrEnsSchema,
addressSchema,
numberBetweenSchema,
positiveNumberSchema,
throwIfMissing,
Expand All @@ -18,24 +17,21 @@ import {
ProtectedData,
SearchableDataSchema,
} from '../types/index.js';
import { IExecConsumer, SubgraphConsumer } from '../types/internalTypes.js';
import { SubgraphConsumer } from '../types/internalTypes.js';

export const getProtectedData = async ({
iexec = throwIfMissing(),
graphQLClient = throwIfMissing(),
protectedDataAddress,
requiredSchema = {},
owner,
createdAfterTimestamp,
page = 0,
pageSize = 1000,
}: GetProtectedDataParams & IExecConsumer & SubgraphConsumer): Promise<
ProtectedData[]
> => {
}: GetProtectedDataParams & SubgraphConsumer): Promise<ProtectedData[]> => {
const vCreatedAfterTimestamp = positiveNumberSchema()
.label('createdAfterTimestamp')
.validateSync(createdAfterTimestamp);
const vProtectedDataAddress = addressOrEnsSchema()
const vProtectedDataAddress = addressSchema()
.label('protectedDataAddress')
.validateSync(protectedDataAddress);

Expand All @@ -50,8 +46,7 @@ export const getProtectedData = async ({
const vPageSize = numberBetweenSchema(10, 1000)
.label('pageSize')
.validateSync(pageSize);
let vOwner = addressOrEnsSchema().label('owner').validateSync(owner);
vOwner = await resolveENS(iexec, vOwner);
const vOwner = addressSchema().label('owner').validateSync(owner);

try {
const start = vPage * vPageSize;
Expand Down
17 changes: 4 additions & 13 deletions packages/sdk/src/lib/dataProtectorCore/grantAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,8 @@ import {
} from '../../utils/errors.js';
import { formatGrantedAccess } from '../../utils/formatGrantedAccess.js';
import {
addressOrEnsSchema,
addressSchema,
booleanSchema,
isEnsTest,
positiveIntegerStringSchema,
positiveStrictIntegerStringSchema,
throwIfMissing,
Expand All @@ -37,15 +36,15 @@ export const grantAccess = async ({
allowBulk = false,
onStatusUpdate = () => {},
}: IExecConsumer & GrantAccessParams): Promise<GrantedAccess> => {
const vProtectedData = addressOrEnsSchema()
const vProtectedData = addressSchema()
.required()
.label('protectedData')
.validateSync(protectedData);
let vAuthorizedApp = addressOrEnsSchema()
const vAuthorizedApp = addressSchema()
.required()
.label('authorizedApp')
.validateSync(authorizedApp);
const vAuthorizedUser = addressOrEnsSchema()
const vAuthorizedUser = addressSchema()
.label('authorizedUser')
.validateSync(authorizedUser);
let vPricePerAccess = positiveIntegerStringSchema()
Expand Down Expand Up @@ -79,14 +78,6 @@ export const grantAccess = async ({
vNumberOfAccess = DATASET_INFINITE_VOLUME.toString();
}

if (vAuthorizedApp && isEnsTest(vAuthorizedApp)) {
const resolved = await iexec.ens.resolveName(vAuthorizedApp);
if (!resolved) {
throw new ValidationError('authorizedApp ENS name is not valid');
}
vAuthorizedApp = resolved.toLowerCase();
}

if (vAuthorizedApp === ZeroAddress) {
throw Error(
`Forbidden to use ${ZeroAddress} as authorizedApp, this would give access to any app`
Expand Down
6 changes: 3 additions & 3 deletions packages/sdk/src/lib/dataProtectorCore/prepareBulkRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
formatPemPublicKeyForSMS,
} from '../../utils/rsa.js';
import {
addressOrEnsSchema,
addressSchema,
booleanSchema,
positiveNumberSchema,
secretsSchema,
Expand Down Expand Up @@ -51,7 +51,7 @@ export const prepareBulkRequest = async ({
onStatusUpdate = () => {},
}: IExecConsumer &
PrepareBulkRequestParams): Promise<PrepareBulkRequestResponse> => {
const vApp = addressOrEnsSchema().required().label('app').validateSync(app);
const vApp = addressSchema().required().label('app').validateSync(app);
const vMaxProtectedDataPerTask = positiveNumberSchema()
.label('maxProtectedDataPerTask')
.validateSync(maxProtectedDataPerTask);
Expand All @@ -66,7 +66,7 @@ export const prepareBulkRequest = async ({
.validateSync(inputFiles);
const vArgs = stringSchema().label('args').validateSync(args);
const vSecrets = secretsSchema().label('secrets').validateSync(secrets);
const vWorkerpool = addressOrEnsSchema()
const vWorkerpool = addressSchema()
.default(NULL_ADDRESS)
.label('workerpool')
.validateSync(workerpool);
Expand Down
Loading
Loading