@iexec/web3mail 1.8.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/dist/config/config.d.ts +6 -1
- package/dist/config/config.js +23 -12
- package/dist/config/config.js.map +1 -1
- package/dist/utils/getChainId.js +7 -2
- package/dist/utils/getChainId.js.map +1 -1
- package/dist/utils/getWeb3Provider.d.ts +10 -2
- package/dist/utils/getWeb3Provider.js +12 -7
- package/dist/utils/getWeb3Provider.js.map +1 -1
- package/dist/utils/resolveDappAddressFromCompass.d.ts +2 -2
- package/dist/utils/resolveDappAddressFromCompass.js +1 -1
- package/dist/utils/resolveDappAddressFromCompass.js.map +1 -1
- package/dist/utils/validators.d.ts +0 -2
- package/dist/utils/validators.js +0 -4
- package/dist/utils/validators.js.map +1 -1
- package/dist/web3mail/IExecWeb3mail.d.ts +2 -2
- package/dist/web3mail/IExecWeb3mail.js +13 -14
- package/dist/web3mail/IExecWeb3mail.js.map +1 -1
- package/dist/web3mail/fetchMyContacts.d.ts +1 -1
- package/dist/web3mail/fetchMyContacts.js +2 -2
- package/dist/web3mail/fetchMyContacts.js.map +1 -1
- package/dist/web3mail/fetchUserContacts.d.ts +1 -1
- package/dist/web3mail/fetchUserContacts.js +20 -25
- package/dist/web3mail/fetchUserContacts.js.map +1 -1
- package/dist/web3mail/internalTypes.d.ts +2 -2
- package/dist/web3mail/prepareEmailCampaign.d.ts +1 -1
- package/dist/web3mail/prepareEmailCampaign.js +10 -10
- package/dist/web3mail/prepareEmailCampaign.js.map +1 -1
- package/dist/web3mail/sendEmail.d.ts +1 -1
- package/dist/web3mail/sendEmail.js +21 -41
- package/dist/web3mail/sendEmail.js.map +1 -1
- package/dist/web3mail/sendEmail.models.d.ts +8 -27
- package/dist/web3mail/sendEmail.models.js +5 -28
- package/dist/web3mail/sendEmail.models.js.map +1 -1
- package/dist/web3mail/sendEmailCampaign.d.ts +1 -1
- package/dist/web3mail/sendEmailCampaign.js +8 -9
- package/dist/web3mail/sendEmailCampaign.js.map +1 -1
- package/dist/web3mail/types.d.ts +8 -11
- package/package.json +4 -4
- package/src/config/config.ts +26 -14
- package/src/utils/getChainId.ts +11 -2
- package/src/utils/getWeb3Provider.ts +13 -6
- package/src/utils/resolveDappAddressFromCompass.ts +3 -3
- package/src/utils/validators.ts +0 -11
- package/src/web3mail/IExecWeb3mail.ts +20 -23
- package/src/web3mail/fetchMyContacts.ts +2 -2
- package/src/web3mail/fetchUserContacts.ts +21 -27
- package/src/web3mail/internalTypes.ts +2 -2
- package/src/web3mail/prepareEmailCampaign.ts +11 -11
- package/src/web3mail/sendEmail.models.ts +6 -68
- package/src/web3mail/sendEmail.ts +26 -58
- package/src/web3mail/sendEmailCampaign.ts +10 -11
- package/src/web3mail/types.ts +8 -13
|
@@ -2,12 +2,12 @@ import { Buffer } from 'buffer';
|
|
|
2
2
|
import { DEFAULT_CONTENT_TYPE, MAX_DESIRED_APP_ORDER_PRICE, MAX_DESIRED_WORKERPOOL_ORDER_PRICE, } from '../config/config.js';
|
|
3
3
|
import { handleIfProtocolError, WorkflowError } from '../utils/errors.js';
|
|
4
4
|
import * as ipfs from '../utils/ipfs-service.js';
|
|
5
|
-
import {
|
|
6
|
-
export const prepareEmailCampaign = async ({ iexec = throwIfMissing(), dataProtector = throwIfMissing(),
|
|
5
|
+
import { addressSchema, contentTypeSchema, emailContentSchema, emailSubjectSchema, labelSchema, positiveNumberSchema, senderNameSchema, throwIfMissing, } from '../utils/validators.js';
|
|
6
|
+
export const prepareEmailCampaign = async ({ iexec = throwIfMissing(), dataProtector = throwIfMissing(), workerpoolAddress, dappAddress, ipfsNode, ipfsGateway, senderName, emailSubject, emailContent, contentType = DEFAULT_CONTENT_TYPE, label, appMaxPrice = MAX_DESIRED_APP_ORDER_PRICE, workerpoolMaxPrice = MAX_DESIRED_WORKERPOOL_ORDER_PRICE, grantedAccesses, maxProtectedDataPerTask, }) => {
|
|
7
7
|
try {
|
|
8
|
-
const
|
|
9
|
-
.label('
|
|
10
|
-
.validateSync(
|
|
8
|
+
const vWorkerpoolAddress = addressSchema()
|
|
9
|
+
.label('workerpoolAddress')
|
|
10
|
+
.validateSync(workerpoolAddress);
|
|
11
11
|
const vSenderName = senderNameSchema()
|
|
12
12
|
.label('senderName')
|
|
13
13
|
.validateSync(senderName);
|
|
@@ -23,10 +23,10 @@ export const prepareEmailCampaign = async ({ iexec = throwIfMissing(), dataProte
|
|
|
23
23
|
.label('contentType')
|
|
24
24
|
.validateSync(contentType);
|
|
25
25
|
const vLabel = labelSchema().label('label').validateSync(label);
|
|
26
|
-
const
|
|
26
|
+
const vDappAddress = addressSchema()
|
|
27
27
|
.required()
|
|
28
|
-
.label('
|
|
29
|
-
.validateSync(
|
|
28
|
+
.label('dappAddress')
|
|
29
|
+
.validateSync(dappAddress);
|
|
30
30
|
const vAppMaxPrice = positiveNumberSchema()
|
|
31
31
|
.label('appMaxPrice')
|
|
32
32
|
.validateSync(appMaxPrice);
|
|
@@ -76,10 +76,10 @@ export const prepareEmailCampaign = async ({ iexec = throwIfMissing(), dataProte
|
|
|
76
76
|
};
|
|
77
77
|
// TODO: end factor this
|
|
78
78
|
const { bulkRequest: campaignRequest } = await dataProtector.prepareBulkRequest({
|
|
79
|
-
app:
|
|
79
|
+
app: vDappAddress,
|
|
80
80
|
appMaxPrice: vAppMaxPrice,
|
|
81
81
|
workerpoolMaxPrice: vWorkerpoolMaxPrice,
|
|
82
|
-
workerpool:
|
|
82
|
+
workerpool: vWorkerpoolAddress,
|
|
83
83
|
args: vLabel,
|
|
84
84
|
inputFiles: [],
|
|
85
85
|
secrets,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareEmailCampaign.js","sourceRoot":"","sources":["../../src/web3mail/prepareEmailCampaign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"prepareEmailCampaign.js","sourceRoot":"","sources":["../../src/web3mail/prepareEmailCampaign.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { SendEmailParams, SendEmailResponse } from './types.js';
|
|
2
2
|
import { DappAddressConsumer, DappWhitelistAddressConsumer, IExecConsumer, IpfsGatewayConfigConsumer, IpfsNodeConfigConsumer, SubgraphConsumer } from './internalTypes.js';
|
|
3
3
|
export type SendEmail = typeof sendEmail;
|
|
4
|
-
export declare const sendEmail: ({ graphQLClient, iexec,
|
|
4
|
+
export declare const sendEmail: ({ graphQLClient, iexec, workerpoolAddress, dappAddress, dappWhitelistAddress, ipfsNode, ipfsGateway, emailSubject, emailContent, contentType, label, dataMaxPrice, appMaxPrice, workerpoolMaxPrice, senderName, protectedData, }: IExecConsumer & SubgraphConsumer & DappAddressConsumer & DappWhitelistAddressConsumer & IpfsNodeConfigConsumer & IpfsGatewayConfigConsumer & SendEmailParams) => Promise<SendEmailResponse>;
|
|
@@ -4,10 +4,10 @@ import { handleIfProtocolError, WorkflowError } from '../utils/errors.js';
|
|
|
4
4
|
import { generateSecureUniqueId } from '../utils/generateUniqueId.js';
|
|
5
5
|
import * as ipfs from '../utils/ipfs-service.js';
|
|
6
6
|
import { checkProtectedDataValidity } from '../utils/subgraphQuery.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = throwIfMissing(),
|
|
10
|
-
const vDatasetAddress =
|
|
7
|
+
import { addressSchema, contentTypeSchema, emailContentSchema, emailSubjectSchema, labelSchema, positiveNumberSchema, senderNameSchema, throwIfMissing, } from '../utils/validators.js';
|
|
8
|
+
import { filterWorkerpoolOrders } from './sendEmail.models.js';
|
|
9
|
+
export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = throwIfMissing(), workerpoolAddress, dappAddress, dappWhitelistAddress, ipfsNode, ipfsGateway, emailSubject, emailContent, contentType = DEFAULT_CONTENT_TYPE, label, dataMaxPrice = MAX_DESIRED_DATA_ORDER_PRICE, appMaxPrice = MAX_DESIRED_APP_ORDER_PRICE, workerpoolMaxPrice = MAX_DESIRED_WORKERPOOL_ORDER_PRICE, senderName, protectedData, }) => {
|
|
10
|
+
const vDatasetAddress = addressSchema()
|
|
11
11
|
.required()
|
|
12
12
|
.label('protectedData')
|
|
13
13
|
.validateSync(protectedData);
|
|
@@ -27,14 +27,14 @@ export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = thro
|
|
|
27
27
|
.label('senderName')
|
|
28
28
|
.validateSync(senderName);
|
|
29
29
|
const vLabel = labelSchema().label('label').validateSync(label);
|
|
30
|
-
const
|
|
30
|
+
const vWorkerpoolAddress = addressSchema()
|
|
31
31
|
.required()
|
|
32
|
-
.label('
|
|
33
|
-
.validateSync(
|
|
34
|
-
const
|
|
32
|
+
.label('workerpoolAddress')
|
|
33
|
+
.validateSync(workerpoolAddress);
|
|
34
|
+
const vDappAddress = addressSchema()
|
|
35
35
|
.required()
|
|
36
|
-
.label('
|
|
37
|
-
.validateSync(
|
|
36
|
+
.label('dappAddress')
|
|
37
|
+
.validateSync(dappAddress);
|
|
38
38
|
const vDappWhitelistAddress = addressSchema()
|
|
39
39
|
.required()
|
|
40
40
|
.label('dappWhitelistAddress')
|
|
@@ -48,35 +48,19 @@ export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = thro
|
|
|
48
48
|
const vWorkerpoolMaxPrice = positiveNumberSchema()
|
|
49
49
|
.label('workerpoolMaxPrice')
|
|
50
50
|
.validateSync(workerpoolMaxPrice);
|
|
51
|
-
const vUseVoucher = booleanSchema()
|
|
52
|
-
.label('useVoucher')
|
|
53
|
-
.validateSync(useVoucher);
|
|
54
51
|
// Check protected data schema through subgraph
|
|
55
52
|
const isValidProtectedData = await checkProtectedDataValidity(graphQLClient, vDatasetAddress);
|
|
56
53
|
if (!isValidProtectedData) {
|
|
57
54
|
throw new Error('This protected data does not contain "email:string" in its schema.');
|
|
58
55
|
}
|
|
59
56
|
const requesterAddress = await iexec.wallet.getAddress();
|
|
60
|
-
let userVoucher;
|
|
61
|
-
if (vUseVoucher) {
|
|
62
|
-
try {
|
|
63
|
-
userVoucher = await iexec.voucher.showUserVoucher(requesterAddress);
|
|
64
|
-
checkUserVoucher({ userVoucher });
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
if (err?.message?.startsWith('No Voucher found for address')) {
|
|
68
|
-
throw new Error('Oops, it seems your wallet is not associated with any voucher. Check on https://builder.iex.ec/');
|
|
69
|
-
}
|
|
70
|
-
throw err;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
57
|
try {
|
|
74
58
|
// Fetch app order first to determine TEE framework
|
|
75
59
|
const apporder = await iexec.orderbook
|
|
76
60
|
.fetchAppOrderbook({
|
|
77
|
-
app:
|
|
61
|
+
app: vDappAddress,
|
|
78
62
|
minTag: ['tee'],
|
|
79
|
-
workerpool:
|
|
63
|
+
workerpool: vWorkerpoolAddress,
|
|
80
64
|
})
|
|
81
65
|
.then((appOrderbook) => {
|
|
82
66
|
const desiredPriceAppOrderbook = appOrderbook.orders.filter((order) => order.order.appprice <= vAppMaxPrice);
|
|
@@ -92,7 +76,7 @@ export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = thro
|
|
|
92
76
|
iexec.orderbook
|
|
93
77
|
.fetchDatasetOrderbook({
|
|
94
78
|
dataset: vDatasetAddress,
|
|
95
|
-
app:
|
|
79
|
+
app: vDappAddress,
|
|
96
80
|
requester: requesterAddress,
|
|
97
81
|
})
|
|
98
82
|
.then((datasetOrderbook) => {
|
|
@@ -114,21 +98,19 @@ export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = thro
|
|
|
114
98
|
Promise.all([
|
|
115
99
|
// for app
|
|
116
100
|
iexec.orderbook.fetchWorkerpoolOrderbook({
|
|
117
|
-
workerpool:
|
|
118
|
-
app:
|
|
101
|
+
workerpool: vWorkerpoolAddress,
|
|
102
|
+
app: vDappAddress,
|
|
119
103
|
dataset: vDatasetAddress,
|
|
120
|
-
requester: requesterAddress,
|
|
121
|
-
isRequesterStrict: useVoucher, // If voucher, we only want user specific orders
|
|
104
|
+
requester: requesterAddress,
|
|
122
105
|
minTag: workerpoolMinTag,
|
|
123
106
|
category: 0,
|
|
124
107
|
}),
|
|
125
108
|
// for app whitelist
|
|
126
109
|
iexec.orderbook.fetchWorkerpoolOrderbook({
|
|
127
|
-
workerpool:
|
|
110
|
+
workerpool: vWorkerpoolAddress,
|
|
128
111
|
app: vDappWhitelistAddress,
|
|
129
112
|
dataset: vDatasetAddress,
|
|
130
|
-
requester: requesterAddress,
|
|
131
|
-
isRequesterStrict: useVoucher, // If voucher, we only want user specific orders
|
|
113
|
+
requester: requesterAddress,
|
|
132
114
|
minTag: workerpoolMinTag,
|
|
133
115
|
category: 0,
|
|
134
116
|
}),
|
|
@@ -139,8 +121,6 @@ export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = thro
|
|
|
139
121
|
...workerpoolOrderbookForAppWhitelist.orders,
|
|
140
122
|
],
|
|
141
123
|
workerpoolMaxPrice: vWorkerpoolMaxPrice,
|
|
142
|
-
useVoucher: vUseVoucher,
|
|
143
|
-
userVoucher,
|
|
144
124
|
});
|
|
145
125
|
if (!desiredPriceWorkerpoolOrder) {
|
|
146
126
|
throw new Error('No Workerpool order found for the desired price');
|
|
@@ -187,14 +167,14 @@ export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = thro
|
|
|
187
167
|
useCallback: true,
|
|
188
168
|
}));
|
|
189
169
|
const requestorderToSign = await iexec.order.createRequestorder({
|
|
190
|
-
app:
|
|
170
|
+
app: vDappAddress,
|
|
191
171
|
category: workerpoolorder.category,
|
|
192
172
|
dataset: vDatasetAddress,
|
|
193
173
|
datasetmaxprice: datasetorder.datasetprice,
|
|
194
174
|
appmaxprice: apporder.appprice,
|
|
195
175
|
workerpoolmaxprice: workerpoolorder.workerpoolprice,
|
|
196
176
|
tag: ['tee'],
|
|
197
|
-
workerpool:
|
|
177
|
+
workerpool: vWorkerpoolAddress,
|
|
198
178
|
callback: CALLBACK_WEB3MAIL,
|
|
199
179
|
params: {
|
|
200
180
|
iexec_secrets: {
|
|
@@ -210,7 +190,7 @@ export const sendEmail = async ({ graphQLClient = throwIfMissing(), iexec = thro
|
|
|
210
190
|
datasetorder: datasetorder,
|
|
211
191
|
workerpoolorder: workerpoolorder,
|
|
212
192
|
requestorder: requestorder,
|
|
213
|
-
}
|
|
193
|
+
});
|
|
214
194
|
const taskId = await iexec.deal.computeTaskId(dealId, 0);
|
|
215
195
|
return {
|
|
216
196
|
taskId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendEmail.js","sourceRoot":"","sources":["../../src/web3mail/sendEmail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,4BAA4B,EAC5B,kCAAkC,GACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"sendEmail.js","sourceRoot":"","sources":["../../src/web3mail/sendEmail.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,17 @@
|
|
|
1
|
-
import { Address, BN } from 'iexec';
|
|
2
1
|
import { PublishedWorkerpoolorder } from 'iexec/IExecOrderbookModule';
|
|
3
|
-
|
|
4
|
-
owner: Address;
|
|
5
|
-
address: Address;
|
|
6
|
-
type: BN;
|
|
7
|
-
balance: BN;
|
|
8
|
-
expirationTimestamp: BN;
|
|
9
|
-
sponsoredApps: Address[];
|
|
10
|
-
sponsoredDatasets: Address[];
|
|
11
|
-
sponsoredWorkerpools: Address[];
|
|
12
|
-
allowanceAmount: BN;
|
|
13
|
-
authorizedAccounts: Address[];
|
|
14
|
-
};
|
|
15
|
-
export declare function checkUserVoucher({ userVoucher, }: {
|
|
16
|
-
userVoucher: VoucherInfo;
|
|
17
|
-
}): void;
|
|
18
|
-
export declare function filterWorkerpoolOrders({ workerpoolOrders, workerpoolMaxPrice, useVoucher, userVoucher, }: {
|
|
2
|
+
export declare function filterWorkerpoolOrders({ workerpoolOrders, workerpoolMaxPrice, }: {
|
|
19
3
|
workerpoolOrders: PublishedWorkerpoolorder[];
|
|
20
4
|
workerpoolMaxPrice: number;
|
|
21
|
-
useVoucher: boolean;
|
|
22
|
-
userVoucher?: VoucherInfo;
|
|
23
5
|
}): {
|
|
24
|
-
workerpool: Address;
|
|
6
|
+
workerpool: import("iexec/IExecOrderbookModule").Address;
|
|
25
7
|
workerpoolprice: number;
|
|
26
8
|
volume: number;
|
|
27
|
-
tag: import("iexec").Bytes32;
|
|
9
|
+
tag: import("iexec/IExecOrderbookModule").Bytes32;
|
|
28
10
|
category: number;
|
|
29
11
|
trust: number;
|
|
30
|
-
apprestrict: Address;
|
|
31
|
-
datasetrestrict: Address;
|
|
32
|
-
requesterrestrict: Address;
|
|
33
|
-
salt: import("iexec").Bytes32;
|
|
34
|
-
sign: import("iexec").Bytes;
|
|
12
|
+
apprestrict: import("iexec/IExecOrderbookModule").Address;
|
|
13
|
+
datasetrestrict: import("iexec/IExecOrderbookModule").Address;
|
|
14
|
+
requesterrestrict: import("iexec/IExecOrderbookModule").Address;
|
|
15
|
+
salt: import("iexec/IExecOrderbookModule").Bytes32;
|
|
16
|
+
sign: import("iexec/IExecOrderbookModule").Bytes;
|
|
35
17
|
};
|
|
36
|
-
export {};
|
|
@@ -1,35 +1,12 @@
|
|
|
1
|
-
function
|
|
2
|
-
return Number(bn.toString());
|
|
3
|
-
}
|
|
4
|
-
export function checkUserVoucher({ userVoucher, }) {
|
|
5
|
-
if (bnToNumber(userVoucher.expirationTimestamp) < Date.now() / 1000) {
|
|
6
|
-
throw new Error('Oops, it seems your voucher has expired. You might want to ask for a top up. Check on https://builder.iex.ec/');
|
|
7
|
-
}
|
|
8
|
-
if (bnToNumber(userVoucher.balance) === 0) {
|
|
9
|
-
throw new Error('Oops, it seems your voucher is empty. You might want to ask for a top up. Check on https://builder.iex.ec/');
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export function filterWorkerpoolOrders({ workerpoolOrders, workerpoolMaxPrice, useVoucher, userVoucher, }) {
|
|
1
|
+
export function filterWorkerpoolOrders({ workerpoolOrders, workerpoolMaxPrice, }) {
|
|
13
2
|
if (workerpoolOrders.length === 0) {
|
|
14
3
|
return null;
|
|
15
4
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (!userVoucher) {
|
|
20
|
-
throw new Error('useVoucher === true but userVoucher is undefined? Hum...');
|
|
21
|
-
}
|
|
22
|
-
// only voucher sponsored workerpoolorders
|
|
23
|
-
eligibleWorkerpoolOrders = eligibleWorkerpoolOrders.filter(({ order }) => userVoucher.sponsoredWorkerpools.includes(order.workerpool));
|
|
24
|
-
if (eligibleWorkerpoolOrders.length === 0) {
|
|
25
|
-
throw new Error('Found some workerpool orders but none can be sponsored by your voucher.');
|
|
26
|
-
}
|
|
27
|
-
maxVoucherSponsoredAmount = bnToNumber(userVoucher.balance);
|
|
28
|
-
}
|
|
29
|
-
const [cheapestOrder] = eligibleWorkerpoolOrders.sort((order1, order2) => order1.order.workerpoolprice - order2.order.workerpoolprice);
|
|
5
|
+
const [cheapestOrder] = workerpoolOrders
|
|
6
|
+
.slice()
|
|
7
|
+
.sort((order1, order2) => order1.order.workerpoolprice - order2.order.workerpoolprice);
|
|
30
8
|
if (!cheapestOrder ||
|
|
31
|
-
cheapestOrder.order.workerpoolprice >
|
|
32
|
-
workerpoolMaxPrice + maxVoucherSponsoredAmount) {
|
|
9
|
+
cheapestOrder.order.workerpoolprice > workerpoolMaxPrice) {
|
|
33
10
|
return null;
|
|
34
11
|
}
|
|
35
12
|
return cheapestOrder.order;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendEmail.models.js","sourceRoot":"","sources":["../../src/web3mail/sendEmail.models.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sendEmail.models.js","sourceRoot":"","sources":["../../src/web3mail/sendEmail.models.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,EACrC,gBAAgB,EAChB,kBAAkB,GAInB;IACC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB;SACrC,KAAK,EAAE;SACP,IAAI,CACH,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CACjB,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAC9D,CAAC;IAEJ,IACE,CAAC,aAAa;QACd,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,kBAAkB,EACxD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,CAAC;AAC7B,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { SendEmailCampaignParams, SendEmailCampaignResponse } from './types.js';
|
|
2
2
|
import { DataProtectorConsumer } from './internalTypes.js';
|
|
3
3
|
export type SendEmailCampaign = typeof sendEmailCampaign;
|
|
4
|
-
export declare const sendEmailCampaign: ({ dataProtector,
|
|
4
|
+
export declare const sendEmailCampaign: ({ dataProtector, workerpoolAddress, campaignRequest, }: DataProtectorConsumer & SendEmailCampaignParams) => Promise<SendEmailCampaignResponse>;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { NULL_ADDRESS } from 'iexec/utils';
|
|
2
2
|
import { ValidationError } from 'yup';
|
|
3
3
|
import { handleIfProtocolError, WorkflowError } from '../utils/errors.js';
|
|
4
|
-
import {
|
|
5
|
-
export const sendEmailCampaign = async ({ dataProtector = throwIfMissing(),
|
|
4
|
+
import { addressSchema, campaignRequestSchema, throwIfMissing, } from '../utils/validators.js';
|
|
5
|
+
export const sendEmailCampaign = async ({ dataProtector = throwIfMissing(), workerpoolAddress = throwIfMissing(), campaignRequest, }) => {
|
|
6
6
|
const vCampaignRequest = campaignRequestSchema()
|
|
7
7
|
.required()
|
|
8
8
|
.label('campaignRequest')
|
|
9
9
|
.validateSync(campaignRequest);
|
|
10
|
-
const
|
|
10
|
+
const vWorkerpoolAddress = addressSchema()
|
|
11
11
|
.required()
|
|
12
|
-
.label('
|
|
13
|
-
.validateSync(
|
|
12
|
+
.label('workerpoolAddress')
|
|
13
|
+
.validateSync(workerpoolAddress);
|
|
14
14
|
if (vCampaignRequest.workerpool !== NULL_ADDRESS &&
|
|
15
15
|
vCampaignRequest.workerpool.toLowerCase() !==
|
|
16
|
-
|
|
17
|
-
throw new ValidationError("
|
|
16
|
+
vWorkerpoolAddress.toLowerCase()) {
|
|
17
|
+
throw new ValidationError("workerpoolAddress doesn't match campaignRequest workerpool");
|
|
18
18
|
}
|
|
19
19
|
try {
|
|
20
20
|
// Process the prepared bulk request
|
|
21
21
|
const processBulkRequestResponse = await dataProtector.processBulkRequest({
|
|
22
22
|
bulkRequest: vCampaignRequest,
|
|
23
|
-
workerpool:
|
|
23
|
+
workerpool: vWorkerpoolAddress,
|
|
24
24
|
waitForResult: false,
|
|
25
25
|
});
|
|
26
26
|
return processBulkRequestResponse;
|
|
@@ -31,7 +31,6 @@ export const sendEmailCampaign = async ({ dataProtector = throwIfMissing(), work
|
|
|
31
31
|
throw error;
|
|
32
32
|
}
|
|
33
33
|
// Handle protocol errors - this will throw if it's an ApiCallError
|
|
34
|
-
// handleIfProtocolError transforms ApiCallError into a WorkflowError with isProtocolError=true
|
|
35
34
|
handleIfProtocolError(error);
|
|
36
35
|
// For all other errors
|
|
37
36
|
throw new WorkflowError({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendEmailCampaign.js","sourceRoot":"","sources":["../../src/web3mail/sendEmailCampaign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"sendEmailCampaign.js","sourceRoot":"","sources":["../../src/web3mail/sendEmailCampaign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAUhC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACtC,aAAa,GAAG,cAAc,EAAE,EAChC,iBAAiB,GAAG,cAAc,EAAE,EACpC,eAAe,GAEQ,EAAsC,EAAE;IAC/D,MAAM,gBAAgB,GAAG,qBAAqB,EAAE;SAC7C,QAAQ,EAAE;SACV,KAAK,CAAC,iBAAiB,CAAC;SACxB,YAAY,CAAC,eAAe,CAAoB,CAAC;IAEpD,MAAM,kBAAkB,GAAG,aAAa,EAAE;SACvC,QAAQ,EAAE;SACV,KAAK,CAAC,mBAAmB,CAAC;SAC1B,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAEnC,IACE,gBAAgB,CAAC,UAAU,KAAK,YAAY;QAC5C,gBAAgB,CAAC,UAAU,CAAC,WAAW,EAAE;YACvC,kBAAkB,CAAC,WAAW,EAAE,EAClC,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,0BAA0B,GAAG,MAAM,aAAa,CAAC,kBAAkB,CAAC;YACxE,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,kBAAkB;YAC9B,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6CAA6C;QAC7C,IAAK,KAAa,EAAE,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;QAED,mEAAmE;QACnE,qBAAqB,CAAC,KAAc,CAAC,CAAC;QAEtC,uBAAuB;QACvB,MAAM,IAAI,aAAa,CAAC;YACtB,OAAO,EAAE,6BAA6B;YACtC,UAAU,EAAE,KAAc;SAC3B,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC"}
|
package/dist/web3mail/types.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { AbstractSigner } from 'ethers';
|
|
2
2
|
import { IExecConfigOptions } from 'iexec/IExecConfig';
|
|
3
3
|
import type { BulkRequest } from '@iexec/dataprotector';
|
|
4
|
-
export type Web3SignerProvider =
|
|
5
|
-
export type ENS = string;
|
|
6
|
-
export type AddressOrENS = Address | ENS;
|
|
4
|
+
export type Web3SignerProvider = AbstractSigner;
|
|
7
5
|
export type Address = string;
|
|
8
6
|
export type TimeStamp = string;
|
|
9
7
|
/**
|
|
@@ -50,11 +48,10 @@ export type SendEmailParams = {
|
|
|
50
48
|
contentType?: string;
|
|
51
49
|
senderName?: string;
|
|
52
50
|
label?: string;
|
|
53
|
-
|
|
51
|
+
workerpoolAddress?: Address;
|
|
54
52
|
dataMaxPrice?: number;
|
|
55
53
|
appMaxPrice?: number;
|
|
56
54
|
workerpoolMaxPrice?: number;
|
|
57
|
-
useVoucher?: boolean;
|
|
58
55
|
};
|
|
59
56
|
export type FetchMyContactsParams = {
|
|
60
57
|
/**
|
|
@@ -87,10 +84,10 @@ export type SendEmailResponse = {
|
|
|
87
84
|
*/
|
|
88
85
|
export type Web3MailConfigOptions = {
|
|
89
86
|
/**
|
|
90
|
-
*
|
|
87
|
+
* Ethereum contract address for the email sender dapp.
|
|
91
88
|
* If not provided, the default web3mail address will be used.
|
|
92
89
|
*/
|
|
93
|
-
|
|
90
|
+
dappAddress?: Address;
|
|
94
91
|
/**
|
|
95
92
|
* The Ethereum contract address for the whitelist.
|
|
96
93
|
* If not provided, the default whitelist smart contract address will be used.
|
|
@@ -136,7 +133,7 @@ export type PrepareEmailCampaignParams = {
|
|
|
136
133
|
emailContent: string;
|
|
137
134
|
contentType?: string;
|
|
138
135
|
label?: string;
|
|
139
|
-
|
|
136
|
+
workerpoolAddress?: Address;
|
|
140
137
|
dataMaxPrice?: number;
|
|
141
138
|
appMaxPrice?: number;
|
|
142
139
|
workerpoolMaxPrice?: number;
|
|
@@ -155,9 +152,9 @@ export type SendEmailCampaignParams = {
|
|
|
155
152
|
*/
|
|
156
153
|
campaignRequest: CampaignRequest;
|
|
157
154
|
/**
|
|
158
|
-
* Workerpool address
|
|
155
|
+
* Workerpool contract address used for processing
|
|
159
156
|
*/
|
|
160
|
-
|
|
157
|
+
workerpoolAddress?: string;
|
|
161
158
|
};
|
|
162
159
|
export type SendEmailCampaignResponse = {
|
|
163
160
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iexec/web3mail",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "This product enables users to confidentially store data–such as mail address, documents, personal information ...",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"build": "rm -rf dist && tsc --project tsconfig.build.json",
|
|
22
22
|
"check-types": "tsc --noEmit",
|
|
23
|
-
"test:prepare": "node tests/scripts/prepare-
|
|
23
|
+
"test:prepare": "node tests/scripts/prepare-forks-for-tests.js",
|
|
24
24
|
"test:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --testMatch \"**/tests/**/*.test.ts\" --forceExit --coverage",
|
|
25
25
|
"test:unit": "NODE_OPTIONS=--experimental-vm-modules jest --testMatch \"**/tests/unit/**/*.test.ts\" -b",
|
|
26
26
|
"test:unit:coverage": "NODE_OPTIONS=--experimental-vm-modules jest --testMatch \"**/tests/unit/**/*.unit.ts\" --coverage",
|
|
@@ -46,11 +46,11 @@
|
|
|
46
46
|
},
|
|
47
47
|
"homepage": "https://github.com/iExecBlockchainComputing/web3mail-sdk#readme",
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@iexec/dataprotector": "^2.0.0-beta.
|
|
49
|
+
"@iexec/dataprotector": "^2.0.0-beta.27",
|
|
50
50
|
"buffer": "^6.0.3",
|
|
51
51
|
"ethers": "^6.15.0",
|
|
52
52
|
"graphql-request": "^6.1.0",
|
|
53
|
-
"iexec": "^
|
|
53
|
+
"iexec": "^9.0.0",
|
|
54
54
|
"kubo-rpc-client": "^5.4.1",
|
|
55
55
|
"yup": "^1.1.1"
|
|
56
56
|
},
|
package/src/config/config.ts
CHANGED
|
@@ -5,8 +5,6 @@ export const DEFAULT_CONTENT_TYPE = 'text/plain';
|
|
|
5
5
|
export const ANY_DATASET_ADDRESS = 'any';
|
|
6
6
|
export const CALLBACK_WEB3MAIL = '0x5f936db7ad6d29371808e42a87015595d90509ba';
|
|
7
7
|
|
|
8
|
-
export const DEFAULT_CHAIN_ID = 134;
|
|
9
|
-
|
|
10
8
|
interface ChainConfig {
|
|
11
9
|
name: string;
|
|
12
10
|
dappAddress?: string;
|
|
@@ -19,20 +17,10 @@ interface ChainConfig {
|
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
const CHAIN_CONFIG: Record<number, ChainConfig> = {
|
|
22
|
-
134: {
|
|
23
|
-
name: 'bellecour',
|
|
24
|
-
dappAddress: 'web3mail.apps.iexec.eth',
|
|
25
|
-
prodWorkerpoolAddress: 'prod-v8-bellecour.main.pools.iexec.eth',
|
|
26
|
-
dataProtectorSubgraph:
|
|
27
|
-
'https://thegraph.iex.ec/subgraphs/name/bellecour/dataprotector-v2',
|
|
28
|
-
ipfsUploadUrl: '/dns4/ipfs-upload.v8-bellecour.iex.ec/https',
|
|
29
|
-
ipfsGateway: 'https://ipfs-gateway.v8-bellecour.iex.ec',
|
|
30
|
-
whitelistSmartContract: '0x781482C39CcE25546583EaC4957Fb7Bf04C277D2',
|
|
31
|
-
},
|
|
32
20
|
421614: {
|
|
33
21
|
name: 'arbitrum-sepolia-testnet',
|
|
34
22
|
dappAddress: undefined, // ENS not supported on this network, address will be resolved from Compass
|
|
35
|
-
prodWorkerpoolAddress: '
|
|
23
|
+
prodWorkerpoolAddress: '0x2956f0cb779904795a5f30d3b3ea88b714c3123f', // TDX workerpool
|
|
36
24
|
dataProtectorSubgraph:
|
|
37
25
|
'https://thegraph.arbitrum-sepolia-testnet.iex.ec/api/subgraphs/id/5YjRPLtjS6GH6bB4yY55Qg4HzwtRGQ8TaHtGf9UBWWd',
|
|
38
26
|
ipfsGateway: 'https://ipfs-gateway.arbitrum-sepolia-testnet.iex.ec',
|
|
@@ -42,7 +30,7 @@ const CHAIN_CONFIG: Record<number, ChainConfig> = {
|
|
|
42
30
|
42161: {
|
|
43
31
|
name: 'arbitrum-mainnet',
|
|
44
32
|
dappAddress: undefined, // ENS not supported on this network, address will be resolved from Compass
|
|
45
|
-
prodWorkerpoolAddress: '
|
|
33
|
+
prodWorkerpoolAddress: '0x8ef2ec3ef9535d4b4349bfec7d8b31a580e60244', // TDX workerpool
|
|
46
34
|
dataProtectorSubgraph:
|
|
47
35
|
'https://thegraph.arbitrum.iex.ec/api/subgraphs/id/Ep5zs5zVr4tDiVuQJepUu51e5eWYJpka624X4DMBxe3u',
|
|
48
36
|
ipfsGateway: 'https://ipfs-gateway.arbitrum-mainnet.iex.ec',
|
|
@@ -67,3 +55,27 @@ export const getChainDefaultConfig = (
|
|
|
67
55
|
|
|
68
56
|
return config;
|
|
69
57
|
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* When `ethProvider` is a string, it may be an RPC URL, a decimal chain id, or an
|
|
61
|
+
* iExec chain host name (see each chain's `name` in CHAIN_CONFIG). RPC URLs are not
|
|
62
|
+
* resolved here (returns undefined); JsonRpcProvider handles those.
|
|
63
|
+
*/
|
|
64
|
+
export function tryResolveChainIdFromProviderString(
|
|
65
|
+
hint: string
|
|
66
|
+
): number | undefined {
|
|
67
|
+
const trimmed = hint.trim();
|
|
68
|
+
if (/^https?:\/\//i.test(trimmed)) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
if (/^\d+$/.test(trimmed)) {
|
|
72
|
+
return Number(trimmed);
|
|
73
|
+
}
|
|
74
|
+
const lower = trimmed.toLowerCase();
|
|
75
|
+
for (const [id, cfg] of Object.entries(CHAIN_CONFIG)) {
|
|
76
|
+
if (cfg.name.toLowerCase() === lower) {
|
|
77
|
+
return Number(id);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
package/src/utils/getChainId.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
AbstractSigner,
|
|
6
6
|
Eip1193Provider,
|
|
7
7
|
} from 'ethers';
|
|
8
|
-
import {
|
|
8
|
+
import { tryResolveChainIdFromProviderString } from '../config/config.js';
|
|
9
9
|
|
|
10
10
|
type EthersCompatibleProvider =
|
|
11
11
|
| string
|
|
@@ -18,6 +18,10 @@ export async function getChainIdFromProvider(
|
|
|
18
18
|
): Promise<number> {
|
|
19
19
|
try {
|
|
20
20
|
if (typeof ethProvider === 'string') {
|
|
21
|
+
const resolved = tryResolveChainIdFromProviderString(ethProvider);
|
|
22
|
+
if (resolved !== undefined) {
|
|
23
|
+
return resolved;
|
|
24
|
+
}
|
|
21
25
|
const provider = new JsonRpcProvider(ethProvider);
|
|
22
26
|
const network = await provider.getNetwork();
|
|
23
27
|
return Number(network.chainId);
|
|
@@ -38,6 +42,11 @@ export async function getChainIdFromProvider(
|
|
|
38
42
|
}
|
|
39
43
|
} catch (e) {
|
|
40
44
|
console.warn('Failed to detect chainId:', e);
|
|
45
|
+
throw new Error(
|
|
46
|
+
`Failed to detect chainId from ethProvider: ${
|
|
47
|
+
e instanceof Error ? e.message : String(e)
|
|
48
|
+
}`
|
|
49
|
+
);
|
|
41
50
|
}
|
|
42
|
-
|
|
51
|
+
throw new Error('Unsupported ethProvider for chain ID detection');
|
|
43
52
|
}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { getSignerFromPrivateKey } from 'iexec/utils';
|
|
2
2
|
import { Web3SignerProvider } from '../web3mail/types.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Build an ethers signer for Node.js from a private key and an explicit chain.
|
|
6
|
+
*
|
|
7
|
+
* `host` must be provided (chain id or iExec chain host string). There is no default
|
|
8
|
+
* chain: omitting it used to fall back to Arbitrum Sepolia and could migrate users
|
|
9
|
+
* silently when defaults change.
|
|
10
|
+
*
|
|
11
|
+
* @see https://github.com/iExecBlockchainComputing/dataprotector-sdk/blob/dataprotector-v2.0.0-beta.27/packages/sdk/src/utils/getWeb3Provider.ts
|
|
12
|
+
*/
|
|
4
13
|
export const getWeb3Provider = (
|
|
5
14
|
privateKey: string,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
15
|
+
host: number | string,
|
|
16
|
+
options: { allowExperimentalNetworks?: boolean } = {}
|
|
17
|
+
): Web3SignerProvider =>
|
|
18
|
+
getSignerFromPrivateKey(`${host}`, privateKey, {
|
|
10
19
|
allowExperimentalNetworks: options?.allowExperimentalNetworks,
|
|
11
|
-
providers: {},
|
|
12
20
|
});
|
|
13
|
-
};
|