@nevermined-io/core-kit 0.0.2-rc19
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 +15 -0
- package/dist/Instantiable.abstract.d.ts +35 -0
- package/dist/Instantiable.abstract.d.ts.map +1 -0
- package/dist/Instantiable.abstract.js +102 -0
- package/dist/artifacts/generated.d.ts +29912 -0
- package/dist/artifacts/generated.d.ts.map +1 -0
- package/dist/artifacts/generated.js +16797 -0
- package/dist/contracts/AccessManager.d.ts +17 -0
- package/dist/contracts/AccessManager.d.ts.map +1 -0
- package/dist/contracts/AccessManager.js +15 -0
- package/dist/contracts/AssetRegistry.d.ts +65 -0
- package/dist/contracts/AssetRegistry.d.ts.map +1 -0
- package/dist/contracts/AssetRegistry.js +103 -0
- package/dist/contracts/ContractBase.d.ts +21 -0
- package/dist/contracts/ContractBase.d.ts.map +1 -0
- package/dist/contracts/ContractBase.js +270 -0
- package/dist/contracts/ContractsApi.d.ts +62 -0
- package/dist/contracts/ContractsApi.d.ts.map +1 -0
- package/dist/contracts/ContractsApi.js +66 -0
- package/dist/contracts/FiatPaymentTemplate.d.ts +10 -0
- package/dist/contracts/FiatPaymentTemplate.d.ts.map +1 -0
- package/dist/contracts/FiatPaymentTemplate.js +14 -0
- package/dist/contracts/FiatSettlementCondition.d.ts +11 -0
- package/dist/contracts/FiatSettlementCondition.d.ts.map +1 -0
- package/dist/contracts/FiatSettlementCondition.js +18 -0
- package/dist/contracts/FixedPaymentTemplate.d.ts +10 -0
- package/dist/contracts/FixedPaymentTemplate.d.ts.map +1 -0
- package/dist/contracts/FixedPaymentTemplate.js +14 -0
- package/dist/contracts/NFT1155Base.d.ts +41 -0
- package/dist/contracts/NFT1155Base.d.ts.map +1 -0
- package/dist/contracts/NFT1155Base.js +21 -0
- package/dist/contracts/NFT1155Credits.d.ts +6 -0
- package/dist/contracts/NFT1155Credits.d.ts.map +1 -0
- package/dist/contracts/NFT1155Credits.js +9 -0
- package/dist/contracts/NFT1155ExpirableCredits.d.ts +34 -0
- package/dist/contracts/NFT1155ExpirableCredits.d.ts.map +1 -0
- package/dist/contracts/NFT1155ExpirableCredits.js +18 -0
- package/dist/contracts/NVMConfig.d.ts +10 -0
- package/dist/contracts/NVMConfig.d.ts.map +1 -0
- package/dist/contracts/NVMConfig.js +18 -0
- package/dist/contracts/ProtocolStandardFees.d.ts +9 -0
- package/dist/contracts/ProtocolStandardFees.d.ts.map +1 -0
- package/dist/contracts/ProtocolStandardFees.js +15 -0
- package/dist/contracts/Roles.d.ts +13 -0
- package/dist/contracts/Roles.d.ts.map +1 -0
- package/dist/contracts/Roles.js +12 -0
- package/dist/contracts/index.d.ts +3 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +2 -0
- package/dist/errors/NeverminedErrors.d.ts +71 -0
- package/dist/errors/NeverminedErrors.d.ts.map +1 -0
- package/dist/errors/NeverminedErrors.js +123 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/models/Logger.d.ts +9 -0
- package/dist/models/Logger.d.ts.map +1 -0
- package/dist/models/Logger.js +27 -0
- package/dist/models/NeverminedOptions.d.ts +55 -0
- package/dist/models/NeverminedOptions.d.ts.map +1 -0
- package/dist/models/NeverminedOptions.js +58 -0
- package/dist/models/NvmApiKey.d.ts +137 -0
- package/dist/models/NvmApiKey.d.ts.map +1 -0
- package/dist/models/NvmApiKey.js +234 -0
- package/dist/models/Transactions.d.ts +11 -0
- package/dist/models/Transactions.d.ts.map +1 -0
- package/dist/models/Transactions.js +1 -0
- package/dist/models/index.d.ts +5 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +4 -0
- package/dist/nevermined/DID.d.ts +45 -0
- package/dist/nevermined/DID.d.ts.map +1 -0
- package/dist/nevermined/DID.js +90 -0
- package/dist/nevermined/Nevermined.d.ts +48 -0
- package/dist/nevermined/Nevermined.d.ts.map +1 -0
- package/dist/nevermined/Nevermined.js +72 -0
- package/dist/nevermined/api/PaymentsApi.d.ts +17 -0
- package/dist/nevermined/api/PaymentsApi.d.ts.map +1 -0
- package/dist/nevermined/api/PaymentsApi.js +125 -0
- package/dist/nevermined/api/ServicesApi.d.ts +28 -0
- package/dist/nevermined/api/ServicesApi.d.ts.map +1 -0
- package/dist/nevermined/api/ServicesApi.js +33 -0
- package/dist/nevermined/api/UtilsApi.d.ts +28 -0
- package/dist/nevermined/api/UtilsApi.d.ts.map +1 -0
- package/dist/nevermined/api/UtilsApi.js +33 -0
- package/dist/nevermined/index.d.ts +4 -0
- package/dist/nevermined/index.d.ts.map +1 -0
- package/dist/nevermined/index.js +3 -0
- package/dist/nevermined/utils/BlockchainViemUtils.d.ts +276 -0
- package/dist/nevermined/utils/BlockchainViemUtils.d.ts.map +1 -0
- package/dist/nevermined/utils/BlockchainViemUtils.js +376 -0
- package/dist/nevermined/utils/JwtUtils.d.ts +27 -0
- package/dist/nevermined/utils/JwtUtils.d.ts.map +1 -0
- package/dist/nevermined/utils/JwtUtils.js +154 -0
- package/dist/nevermined/utils/SignatureUtils.d.ts +14 -0
- package/dist/nevermined/utils/SignatureUtils.d.ts.map +1 -0
- package/dist/nevermined/utils/SignatureUtils.js +99 -0
- package/dist/nevermined/utils/WebServiceConnector.d.ts +32 -0
- package/dist/nevermined/utils/WebServiceConnector.d.ts.map +1 -0
- package/dist/nevermined/utils/WebServiceConnector.js +191 -0
- package/dist/nevermined/utils/ZeroDevPolicies.d.ts +19 -0
- package/dist/nevermined/utils/ZeroDevPolicies.d.ts.map +1 -0
- package/dist/nevermined/utils/ZeroDevPolicies.js +78 -0
- package/dist/nevermined/utils/index.d.ts +6 -0
- package/dist/nevermined/utils/index.d.ts.map +1 -0
- package/dist/nevermined/utils/index.js +5 -0
- package/dist/services/Api.d.ts +7 -0
- package/dist/services/Api.d.ts.map +1 -0
- package/dist/services/Api.js +25 -0
- package/dist/services/MarketplaceAPI.d.ts +7 -0
- package/dist/services/MarketplaceAPI.d.ts.map +1 -0
- package/dist/services/MarketplaceAPI.js +25 -0
- package/dist/services/MetadataService.d.ts +90 -0
- package/dist/services/MetadataService.d.ts.map +1 -0
- package/dist/services/MetadataService.js +277 -0
- package/dist/services/Profiles.d.ts +16 -0
- package/dist/services/Profiles.d.ts.map +1 -0
- package/dist/services/Profiles.js +84 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +3 -0
- package/dist/utils/ConversionTypeHelpers.d.ts +8 -0
- package/dist/utils/ConversionTypeHelpers.d.ts.map +1 -0
- package/dist/utils/ConversionTypeHelpers.js +31 -0
- package/dist/utils/Network.d.ts +5 -0
- package/dist/utils/Network.d.ts.map +1 -0
- package/dist/utils/Network.js +224 -0
- package/dist/utils/helpers.d.ts +21 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +109 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +3 -0
- package/package.json +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JwtUtils.d.ts","sourceRoot":"","sources":["../../../src/nevermined/utils/JwtUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,KAAK,mBAAmB,EAAE,OAAO,EAAwB,MAAM,MAAM,CAAA;AAC9E,OAAO,EAAE,KAAK,OAAO,EAAmD,MAAM,MAAM,CAAA;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAGjF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,qBAAa,UAAW,SAAQ,OAAO;IACrC,eAAe,EAAE,mBAAmB,GAAG,SAAS,CAAA;IAEvC,kBAAkB,CAAC,eAAe,EAAE,mBAAmB;IAKnD,OAAO,CAClB,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,GAAG,YAAY,EAC/B,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,MAAM,CAAC;WAoDE,QAAQ,CAC1B,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAY9B,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,MAAM;CAUf;AAED,qBAAa,QAAS,SAAQ,YAAY;IACxC,MAAM,CAAC,qBAAqB,SAA2D;IAGvF,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,cAAc,EAAE,cAAc,CAAA;gBAElB,MAAM,EAAE,kBAAkB;IAO/B,gBAAgB,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAIrC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IAqB3D,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM;IAmB/E,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAc3C,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM;IAKxC,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM;CAK3C"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { deflateSync, inflateSync } from 'fflate';
|
|
2
|
+
import { SignJWT, decodeJwt, importJWK } from 'jose';
|
|
3
|
+
import { hexToBytes, toHex } from 'viem';
|
|
4
|
+
import { Instantiable } from '../../Instantiable.abstract.js';
|
|
5
|
+
import { urlSafeBase64Decode, urlSafeBase64Encode } from '../../utils/helpers.js';
|
|
6
|
+
import { getChecksumAddress } from './BlockchainViemUtils.js';
|
|
7
|
+
import { SignatureUtils } from './SignatureUtils.js';
|
|
8
|
+
export class EthSignJWT extends SignJWT {
|
|
9
|
+
protectedHeader;
|
|
10
|
+
setProtectedHeader(protectedHeader) {
|
|
11
|
+
this.protectedHeader = protectedHeader;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
async ethSign(signatureUtils, account, eip712Data) {
|
|
15
|
+
const encoder = new TextEncoder();
|
|
16
|
+
const decoder = new TextDecoder();
|
|
17
|
+
let payload = this._payload;
|
|
18
|
+
if (eip712Data) {
|
|
19
|
+
payload = {
|
|
20
|
+
...payload,
|
|
21
|
+
eip712Data,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const encodedPayload = encoder.encode(this.base64url(JSON.stringify(payload)));
|
|
25
|
+
const encodedHeader = encoder.encode(this.base64url(JSON.stringify(this.protectedHeader)));
|
|
26
|
+
const data = this.concat(encodedHeader, encoder.encode('.'), encodedPayload);
|
|
27
|
+
// EIP-712 signature
|
|
28
|
+
let sign;
|
|
29
|
+
if (eip712Data) {
|
|
30
|
+
const domain = {
|
|
31
|
+
name: 'Nevermined',
|
|
32
|
+
version: '1',
|
|
33
|
+
chainId: eip712Data.chainId,
|
|
34
|
+
};
|
|
35
|
+
const types = {
|
|
36
|
+
Nevermined: [
|
|
37
|
+
{ name: 'from', type: 'address' },
|
|
38
|
+
{ name: 'message', type: 'string' },
|
|
39
|
+
{ name: 'token', type: 'string' },
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
const value = {
|
|
43
|
+
from: account.address,
|
|
44
|
+
message: eip712Data.message,
|
|
45
|
+
token: decoder.decode(data),
|
|
46
|
+
};
|
|
47
|
+
sign = await signatureUtils.signTypedData(domain, types, value, account);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
sign = await signatureUtils.signText(decoder.decode(data), account);
|
|
51
|
+
}
|
|
52
|
+
const input = hexToBytes(sign);
|
|
53
|
+
const signed = this.base64url(input);
|
|
54
|
+
const grantToken = `${decoder.decode(encodedHeader)}.${decoder.decode(encodedPayload)}.${signed}`;
|
|
55
|
+
return grantToken;
|
|
56
|
+
}
|
|
57
|
+
static async signText(text, account) {
|
|
58
|
+
try {
|
|
59
|
+
const message = typeof text === 'string' ? text : toHex(text);
|
|
60
|
+
return account.signMessage({
|
|
61
|
+
message: message,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
console.error('Error signing message:', e);
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
base64url(input) {
|
|
70
|
+
const buffer = typeof input === 'string' ? Buffer.from(input, 'utf-8') : Buffer.from(input);
|
|
71
|
+
return buffer.toString('base64').replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
|
72
|
+
}
|
|
73
|
+
concat(...buffers) {
|
|
74
|
+
const size = buffers.reduce((acc, { length }) => acc + length, 0);
|
|
75
|
+
const buf = new Uint8Array(size);
|
|
76
|
+
let i = 0;
|
|
77
|
+
buffers.forEach((buffer) => {
|
|
78
|
+
buf.set(buffer, i);
|
|
79
|
+
i += buffer.length;
|
|
80
|
+
});
|
|
81
|
+
return buf;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export class JwtUtils extends Instantiable {
|
|
85
|
+
static CLIENT_ASSERTION_TYPE = 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer';
|
|
86
|
+
// BASE_AUD = '/api/v1/node/services'
|
|
87
|
+
tokenCache;
|
|
88
|
+
signatureUtils;
|
|
89
|
+
constructor(config) {
|
|
90
|
+
super();
|
|
91
|
+
this.setInstanceConfig(config);
|
|
92
|
+
this.tokenCache = new Map();
|
|
93
|
+
this.signatureUtils = new SignatureUtils(config);
|
|
94
|
+
}
|
|
95
|
+
generateCacheKey(...args) {
|
|
96
|
+
return args.join();
|
|
97
|
+
}
|
|
98
|
+
async accountToJwk(account) {
|
|
99
|
+
const address = account.address.toLowerCase();
|
|
100
|
+
// Currently only works with HDWalletProvider
|
|
101
|
+
// eslint-disable-next-line
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
const publicKey = this.web3.currentProvider.wallets[address].getPublicKey();
|
|
104
|
+
// eslint-disable-next-line
|
|
105
|
+
// @ts-ignore
|
|
106
|
+
const privateKey = this.web3.currentProvider.wallets[address].getPrivateKey();
|
|
107
|
+
return importJWK({
|
|
108
|
+
alg: 'ES256K',
|
|
109
|
+
crv: 'secp256k1',
|
|
110
|
+
kty: 'EC',
|
|
111
|
+
d: privateKey.toString('base64'),
|
|
112
|
+
x: publicKey.slice(0, 32).toString('base64'),
|
|
113
|
+
y: publicKey.slice(32, 64).toString('base64'),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async generateClientAssertion(account, message) {
|
|
117
|
+
let eip712Data;
|
|
118
|
+
if (message) {
|
|
119
|
+
eip712Data = {
|
|
120
|
+
message,
|
|
121
|
+
chainId: await this.publicClient.getChainId(),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const address = getChecksumAddress(account.address);
|
|
125
|
+
return new EthSignJWT({
|
|
126
|
+
iss: address,
|
|
127
|
+
})
|
|
128
|
+
.setProtectedHeader({ alg: 'ES256K' })
|
|
129
|
+
.setIssuedAt()
|
|
130
|
+
.setExpirationTime('1h')
|
|
131
|
+
.ethSign(this.signatureUtils, account, eip712Data);
|
|
132
|
+
}
|
|
133
|
+
isTokenValid(token) {
|
|
134
|
+
const decodedToken = decodeJwt(token);
|
|
135
|
+
if (!decodedToken) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
const expiry = decodedToken.exp;
|
|
139
|
+
if (expiry) {
|
|
140
|
+
const now = new Date();
|
|
141
|
+
return now.getTime() < Number(expiry) * 1000;
|
|
142
|
+
}
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
static createCompressedJwt(token) {
|
|
146
|
+
const compressed = deflateSync(new TextEncoder().encode(token));
|
|
147
|
+
return urlSafeBase64Encode(compressed);
|
|
148
|
+
}
|
|
149
|
+
static decompressJwt(compressedJwt) {
|
|
150
|
+
const decoded = urlSafeBase64Decode(compressedJwt);
|
|
151
|
+
const decompressed = inflateSync(decoded);
|
|
152
|
+
return new TextDecoder().decode(decompressed);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Account, type Hash } from 'viem';
|
|
2
|
+
import { Instantiable, InstantiableConfig } from '../../Instantiable.abstract.js';
|
|
3
|
+
import type { TypedDataDomain, TypedDataTypes } from '@nvm-monorepo/commons';
|
|
4
|
+
import { SmartAccount } from 'viem/account-abstraction';
|
|
5
|
+
export declare class SignatureUtils extends Instantiable {
|
|
6
|
+
constructor(config: InstantiableConfig);
|
|
7
|
+
signText(text: string | Uint8Array, account: Account | SmartAccount): Promise<Hash>;
|
|
8
|
+
signTypedData(domain: TypedDataDomain, types: TypedDataTypes, value: Record<string, any>, account: Account | SmartAccount): Promise<Hash>;
|
|
9
|
+
signTransaction(tx: `0x${string}`, account: Account | SmartAccount): Promise<string>;
|
|
10
|
+
verifyIsSigner(text: string, signature: string, signerAddress: string): Promise<boolean>;
|
|
11
|
+
static recoverSignerAddress(message: string, signature: string): Promise<string>;
|
|
12
|
+
static hash(seed: string): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=SignatureUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignatureUtils.d.ts","sourceRoot":"","sources":["../../../src/nevermined/utils/SignatureUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAmD,MAAM,MAAM,CAAA;AAC1F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAEjF,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGvD,qBAAa,cAAe,SAAQ,YAAY;gBAClC,MAAM,EAAE,kBAAkB;IAKzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnF,aAAa,CACxB,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,EAAE,OAAO,GAAG,YAAY,GAC9B,OAAO,CAAC,IAAI,CAAC;IA6BH,eAAe,CAC1B,EAAE,EAAE,KAAK,MAAM,EAAE,EACjB,OAAO,EAAE,OAAO,GAAG,YAAY,GAC9B,OAAO,CAAC,MAAM,CAAC;IAmBL,cAAc,CACzB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC;WAQN,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOtF,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAGlC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { recoverMessageAddress, toHex } from 'viem';
|
|
2
|
+
import { Instantiable } from '../../Instantiable.abstract.js';
|
|
3
|
+
import { NvmAccountError } from '../../errors/NeverminedErrors.js';
|
|
4
|
+
import { keccak256 } from './BlockchainViemUtils.js';
|
|
5
|
+
export class SignatureUtils extends Instantiable {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
super();
|
|
8
|
+
this.setInstanceConfig(config);
|
|
9
|
+
}
|
|
10
|
+
async signText(text, account) {
|
|
11
|
+
const message = typeof text === 'string' ? text : toHex(text);
|
|
12
|
+
if (account.type === 'smart') {
|
|
13
|
+
const result = await account.signMessage({ message });
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
else if (account.type === 'local') {
|
|
17
|
+
return account.signMessage({
|
|
18
|
+
message: message,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
else if (account.type === 'json-rpc') {
|
|
22
|
+
const message = typeof text === 'string' ? text : toHex(text);
|
|
23
|
+
return await this.walletClient.signMessage({
|
|
24
|
+
account: account.address,
|
|
25
|
+
message: message,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new NvmAccountError('The account type is not supported for signing');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async signTypedData(domain, types, value, account) {
|
|
33
|
+
if (account.type === 'smart') {
|
|
34
|
+
const signature = await account.signTypedData({
|
|
35
|
+
domain,
|
|
36
|
+
types: types,
|
|
37
|
+
message: value,
|
|
38
|
+
primaryType: 'Nevermined',
|
|
39
|
+
});
|
|
40
|
+
return signature;
|
|
41
|
+
}
|
|
42
|
+
else if (account.type === 'local') {
|
|
43
|
+
return await account.signTypedData({
|
|
44
|
+
domain,
|
|
45
|
+
types: types,
|
|
46
|
+
message: value,
|
|
47
|
+
primaryType: 'Nevermined',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else if (account.type === 'json-rpc') {
|
|
51
|
+
return await this.walletClient.signTypedData({
|
|
52
|
+
domain,
|
|
53
|
+
types: types,
|
|
54
|
+
message: value,
|
|
55
|
+
primaryType: 'Nevermined',
|
|
56
|
+
account: account.address,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
throw new NvmAccountError('The account type is not supported for typed signing');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async signTransaction(tx, account) {
|
|
64
|
+
// if (account.type === 'smart') {
|
|
65
|
+
// return await account?.signTransaction({ data: tx })
|
|
66
|
+
// }
|
|
67
|
+
if (account.type === 'local') {
|
|
68
|
+
return account.signTransaction({
|
|
69
|
+
data: tx,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
else if (account.type === 'json-rpc') {
|
|
73
|
+
return await this.walletClient.signTransaction({
|
|
74
|
+
data: tx,
|
|
75
|
+
account: account.address,
|
|
76
|
+
chain: this.client.chain,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
throw new NvmAccountError('The account type is not supported for signing');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async verifyIsSigner(text, signature, signerAddress) {
|
|
84
|
+
return this.client.public.verifyMessage({
|
|
85
|
+
message: text,
|
|
86
|
+
signature: signature,
|
|
87
|
+
address: signerAddress,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
static async recoverSignerAddress(message, signature) {
|
|
91
|
+
return recoverMessageAddress({
|
|
92
|
+
message,
|
|
93
|
+
signature: signature,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
static hash(seed) {
|
|
97
|
+
return keccak256(seed).replace(/^0x([a-f0-9]{64})(:!.+)?$/i, '0x$1');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BodyInit, Response } from 'node-fetch';
|
|
2
|
+
import { ReadStream } from 'fs';
|
|
3
|
+
import { URL } from 'whatwg-url';
|
|
4
|
+
import { InstantiableConfig } from '../../Instantiable.abstract.js';
|
|
5
|
+
/**
|
|
6
|
+
* Provides a common interface to web services.
|
|
7
|
+
*/
|
|
8
|
+
export declare class WebServiceConnector {
|
|
9
|
+
config: InstantiableConfig;
|
|
10
|
+
constructor(config: InstantiableConfig);
|
|
11
|
+
post(url: string, payload: BodyInit, headers?: {
|
|
12
|
+
[header: string]: string;
|
|
13
|
+
}): Promise<Response>;
|
|
14
|
+
get(url: string | URL, headers?: {
|
|
15
|
+
[header: string]: string;
|
|
16
|
+
}): Promise<Response>;
|
|
17
|
+
put(url: string, payload: BodyInit, headers?: {
|
|
18
|
+
[header: string]: string;
|
|
19
|
+
}): Promise<Response>;
|
|
20
|
+
delete(url: string, payload?: BodyInit, headers?: {
|
|
21
|
+
[header: string]: string;
|
|
22
|
+
}): Promise<Response>;
|
|
23
|
+
downloadUrl(url: string, headers?: any): Promise<string>;
|
|
24
|
+
uploadMessage(url: string, data: string, encrypt?: boolean): Promise<any>;
|
|
25
|
+
uploadFile(url: string, data: ReadStream, encrypt?: boolean): Promise<any>;
|
|
26
|
+
fetchToken(url: string, grantToken: string, numberTries?: number, apiKeyHash?: string): Promise<Response>;
|
|
27
|
+
fetchCID(cid: string): Promise<string>;
|
|
28
|
+
private static getIPFSAuthToken;
|
|
29
|
+
private fetch;
|
|
30
|
+
private _sleep;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=WebServiceConnector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebServiceConnector.d.ts","sourceRoot":"","sources":["../../../src/nevermined/utils/WebServiceConnector.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAe,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAgBnE;;GAEG;AACH,qBAAa,mBAAmB;IAG9B,MAAM,EAAE,kBAAkB,CAAA;gBAEd,MAAM,EAAE,kBAAkB;IAM/B,IAAI,CACT,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,GACzC,OAAO,CAAC,QAAQ,CAAC;IAWb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IASrF,GAAG,CACR,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,QAAQ,EACjB,OAAO,GAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,GACzC,OAAO,CAAC,QAAQ,CAAC;IAWb,MAAM,CACX,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,QAAQ,EAClB,OAAO,GAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,GACzC,OAAO,CAAC,QAAQ,CAAC;IAgEP,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IASzE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAS1E,UAAU,CACrB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,WAAW,SAAI,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;IAuBP,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBnD,OAAO,CAAC,MAAM,CAAC,gBAAgB;YAUjB,KAAK;IAiBnB,OAAO,CAAC,MAAM;CAGf"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import FormData from 'form-data';
|
|
2
|
+
import { HttpError } from '../../errors/NeverminedErrors.js';
|
|
3
|
+
import { JwtUtils } from '../../nevermined/utils/JwtUtils.js';
|
|
4
|
+
let fetch;
|
|
5
|
+
async function initializeFetch() {
|
|
6
|
+
if (typeof window !== 'undefined') {
|
|
7
|
+
fetch = window.fetch.bind(window);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
const nodeFetch = await import('node-fetch');
|
|
11
|
+
fetch = nodeFetch.default;
|
|
12
|
+
}
|
|
13
|
+
return fetch;
|
|
14
|
+
}
|
|
15
|
+
fetch = initializeFetch();
|
|
16
|
+
/**
|
|
17
|
+
* Provides a common interface to web services.
|
|
18
|
+
*/
|
|
19
|
+
export class WebServiceConnector {
|
|
20
|
+
// extends Instantiable {
|
|
21
|
+
config;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
// super()
|
|
24
|
+
// this.setInstanceConfig(config)
|
|
25
|
+
this.config = config;
|
|
26
|
+
}
|
|
27
|
+
post(url, payload, headers = {}) {
|
|
28
|
+
return this.fetch(url, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
body: payload,
|
|
31
|
+
headers: {
|
|
32
|
+
'Content-type': 'application/json',
|
|
33
|
+
...headers,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
get(url, headers = {}) {
|
|
38
|
+
return this.fetch(url, {
|
|
39
|
+
method: 'GET',
|
|
40
|
+
headers: {
|
|
41
|
+
...headers,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
put(url, payload, headers = {}) {
|
|
46
|
+
return this.fetch(url, {
|
|
47
|
+
method: 'PUT',
|
|
48
|
+
body: payload,
|
|
49
|
+
headers: {
|
|
50
|
+
'Content-type': 'application/json',
|
|
51
|
+
...headers,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
delete(url, payload, headers = {}) {
|
|
56
|
+
return this.fetch(url, {
|
|
57
|
+
method: 'DELETE',
|
|
58
|
+
body: payload,
|
|
59
|
+
headers: {
|
|
60
|
+
'Content-type': 'application/json',
|
|
61
|
+
...headers,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// public async downloadFile(
|
|
66
|
+
// url: string,
|
|
67
|
+
// destination?: string,
|
|
68
|
+
// index?: number,
|
|
69
|
+
// headers?: { [key: string]: string },
|
|
70
|
+
// ): Promise<string> {
|
|
71
|
+
// const { response, name } = await this.getFileResponse(url, index, headers)
|
|
72
|
+
// if (destination) {
|
|
73
|
+
// await new Promise((resolve, reject) => {
|
|
74
|
+
// // @ts-ignore
|
|
75
|
+
// fs.mkdirSync(destination, { recursive: true })
|
|
76
|
+
// const fileStream = fs.createWriteStream(`${destination}${name}`)
|
|
77
|
+
// response.body.pipe(fileStream)
|
|
78
|
+
// response.body.on('error', reject)
|
|
79
|
+
// fileStream.on('finish', resolve)
|
|
80
|
+
// fileStream.on('close', resolve)
|
|
81
|
+
// })
|
|
82
|
+
// } else {
|
|
83
|
+
// const buff = await response.arrayBuffer()
|
|
84
|
+
// fileDownload(buff, name)
|
|
85
|
+
// destination = process.cwd()
|
|
86
|
+
// }
|
|
87
|
+
// const d = path.join(destination, name)
|
|
88
|
+
// return d
|
|
89
|
+
// }
|
|
90
|
+
// private async getFileResponse(
|
|
91
|
+
// url: string,
|
|
92
|
+
// index?: number,
|
|
93
|
+
// headers?: { [key: string]: string },
|
|
94
|
+
// ): Promise<{ response: Response; name: string }> {
|
|
95
|
+
// const response = await this.get(url, headers)
|
|
96
|
+
// if (!response.ok) {
|
|
97
|
+
// throw new Error('Response error.')
|
|
98
|
+
// }
|
|
99
|
+
// let name: string
|
|
100
|
+
// try {
|
|
101
|
+
// // @ts-ignore
|
|
102
|
+
// ;[, name] = response.headers.get('content-disposition').match(/attachment;filename=(.+)/)
|
|
103
|
+
// } catch {
|
|
104
|
+
// try {
|
|
105
|
+
// // @ts-ignore
|
|
106
|
+
// name = url.split('/').pop()
|
|
107
|
+
// } catch {
|
|
108
|
+
// name = `file${index}`
|
|
109
|
+
// }
|
|
110
|
+
// }
|
|
111
|
+
// return { response, name }
|
|
112
|
+
// }
|
|
113
|
+
async downloadUrl(url, headers) {
|
|
114
|
+
const response = await this.get(url, headers);
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new Error('Response error.');
|
|
117
|
+
}
|
|
118
|
+
return await response.text();
|
|
119
|
+
}
|
|
120
|
+
async uploadMessage(url, data, encrypt) {
|
|
121
|
+
const form = new FormData();
|
|
122
|
+
form.append('message', data);
|
|
123
|
+
if (encrypt) {
|
|
124
|
+
form.append('encrypt', 'true');
|
|
125
|
+
}
|
|
126
|
+
return this.fetch(url, { method: 'POST', body: form });
|
|
127
|
+
}
|
|
128
|
+
async uploadFile(url, data, encrypt) {
|
|
129
|
+
const form = new FormData();
|
|
130
|
+
form.append('file', data);
|
|
131
|
+
if (encrypt) {
|
|
132
|
+
form.append('encrypt', 'true');
|
|
133
|
+
}
|
|
134
|
+
return this.fetch(url, { method: 'POST', body: form });
|
|
135
|
+
}
|
|
136
|
+
async fetchToken(url, grantToken, numberTries = 1, apiKeyHash) {
|
|
137
|
+
const bodyParams = new URLSearchParams({
|
|
138
|
+
client_assertion_type: JwtUtils.CLIENT_ASSERTION_TYPE,
|
|
139
|
+
client_assertion: grantToken,
|
|
140
|
+
});
|
|
141
|
+
if (apiKeyHash) {
|
|
142
|
+
bodyParams.append('nvm_key_hash', apiKeyHash);
|
|
143
|
+
}
|
|
144
|
+
return await fetch(url, {
|
|
145
|
+
method: 'POST',
|
|
146
|
+
body: bodyParams.toString(),
|
|
147
|
+
headers: {
|
|
148
|
+
'Content-type': 'application/x-www-form-urlencoded',
|
|
149
|
+
},
|
|
150
|
+
}, numberTries);
|
|
151
|
+
}
|
|
152
|
+
async fetchCID(cid) {
|
|
153
|
+
const url = `${this.config.config?.ipfsGateway}/api/v0/cat?arg=${cid.replace('cid://', '')}`;
|
|
154
|
+
const authToken = WebServiceConnector.getIPFSAuthToken();
|
|
155
|
+
const options = {
|
|
156
|
+
method: 'POST',
|
|
157
|
+
...(authToken && {
|
|
158
|
+
headers: { Authorization: `Basic ${authToken}` },
|
|
159
|
+
}),
|
|
160
|
+
};
|
|
161
|
+
return fetch(url, options).then(async (res) => {
|
|
162
|
+
if (!res.ok) {
|
|
163
|
+
throw new Error(`${res.status}: ${res.statusText} - ${await res.text()}`);
|
|
164
|
+
}
|
|
165
|
+
return res.text();
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
static getIPFSAuthToken() {
|
|
169
|
+
if (!process.env.IPFS_PROJECT_ID || !process.env.IPFS_PROJECT_SECRET) {
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
return Buffer.from(`${process.env.IPFS_PROJECT_ID}:${process.env.IPFS_PROJECT_SECRET}`).toString('base64');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async fetch(url, opts, numberTries = 1) {
|
|
177
|
+
let counterTries = 1;
|
|
178
|
+
let result;
|
|
179
|
+
while (counterTries <= numberTries) {
|
|
180
|
+
result = await fetch(url, opts);
|
|
181
|
+
if (result.ok)
|
|
182
|
+
return result;
|
|
183
|
+
counterTries++;
|
|
184
|
+
await this._sleep(500);
|
|
185
|
+
}
|
|
186
|
+
throw new HttpError(`Request ${opts.method} ${url} fail - ${await result.clone().text()}`, result.status);
|
|
187
|
+
}
|
|
188
|
+
_sleep(ms) {
|
|
189
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Abi } from 'viem';
|
|
2
|
+
export declare function getPolicy(permissions: any[]): import("@zerodev/permissions").Policy;
|
|
3
|
+
export declare function getPermissions(config: any, functionNames: string[]): any[];
|
|
4
|
+
export declare function getERC20ApprovePermissions(contractAddress: `0x${string}`): {
|
|
5
|
+
target: `0x${string}`;
|
|
6
|
+
abi: Abi;
|
|
7
|
+
functionName: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const getERC20ApprovePolicy: (contractAddress: `0x${string}`) => import("@zerodev/permissions").Policy;
|
|
10
|
+
export declare const getAgentRegistrationPolicy: () => import("@zerodev/permissions").Policy;
|
|
11
|
+
export declare const getPricingPlanRegistrationPolicy: () => import("@zerodev/permissions").Policy;
|
|
12
|
+
export declare const getRegisterAssetsPolicy: () => import("@zerodev/permissions").Policy;
|
|
13
|
+
export declare const getOrderPolicy: () => import("@zerodev/permissions").Policy;
|
|
14
|
+
export declare const getMintNFTPolicy: () => import("@zerodev/permissions").Policy;
|
|
15
|
+
export declare const getBurnNFTPolicy: () => import("@zerodev/permissions").Policy;
|
|
16
|
+
export declare const getRegisterPolicy: () => import("@zerodev/permissions").Policy;
|
|
17
|
+
export declare const buildPolicy: (permissions: string[], contractAddress: `0x${string}`) => import("@zerodev/permissions").Policy;
|
|
18
|
+
export declare const getAllContractsPolicy: (contractAddress: `0x${string}`) => import("@zerodev/permissions").Policy;
|
|
19
|
+
//# sourceMappingURL=ZeroDevPolicies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZeroDevPolicies.d.ts","sourceRoot":"","sources":["../../../src/nevermined/utils/ZeroDevPolicies.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAY,MAAM,MAAM,CAAA;AAEpC,wBAAgB,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,yCAK3C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,SAelE;AAED,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,KAAK,MAAM,EAAE;;SAK/D,GAAG;;EAGZ;AACD,eAAO,MAAM,qBAAqB,GAAI,iBAAiB,KAAK,MAAM,EAAE,0CACV,CAAA;AAE1D,eAAO,MAAM,0BAA0B,6CACwB,CAAA;AAE/D,eAAO,MAAM,gCAAgC,6CACoB,CAAA;AAEjE,eAAO,MAAM,uBAAuB,6CACuC,CAAA;AAE3E,eAAO,MAAM,cAAc,6CACiD,CAAA;AAE5E,eAAO,MAAM,gBAAgB,6CAAkE,CAAA;AAE/F,eAAO,MAAM,gBAAgB,6CAAkE,CAAA;AAE/F,eAAO,MAAM,iBAAiB,6CAS3B,CAAA;AAEH,eAAO,MAAM,WAAW,GAAI,aAAa,MAAM,EAAE,EAAE,iBAAiB,KAAK,MAAM,EAAE,0CAoBhF,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,iBAAiB,KAAK,MAAM,EAAE,0CAcjE,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { CallPolicyVersion, toCallPolicy } from '@zerodev/permissions/policies';
|
|
2
|
+
import { assetsRegistryConfig, fixedPaymentTemplateConfig, nft1155CreditsConfig, } from '../../artifacts/generated.js';
|
|
3
|
+
import { parseAbi } from 'viem';
|
|
4
|
+
export function getPolicy(permissions) {
|
|
5
|
+
return toCallPolicy({
|
|
6
|
+
policyVersion: CallPolicyVersion.V0_0_4,
|
|
7
|
+
permissions,
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export function getPermissions(config, functionNames) {
|
|
11
|
+
const permissions = [];
|
|
12
|
+
functionNames.forEach((functionName) => {
|
|
13
|
+
const abis = config.abi.filter((item) => item.type === 'function' && item.name === functionName);
|
|
14
|
+
abis.forEach((abi) => {
|
|
15
|
+
permissions.push({
|
|
16
|
+
target: config.address,
|
|
17
|
+
abi: [abi],
|
|
18
|
+
functionName,
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
return permissions;
|
|
23
|
+
}
|
|
24
|
+
export function getERC20ApprovePermissions(contractAddress) {
|
|
25
|
+
return {
|
|
26
|
+
target: contractAddress,
|
|
27
|
+
abi: parseAbi([
|
|
28
|
+
'function approve(address spender, uint256 amount) external returns (bool)',
|
|
29
|
+
]),
|
|
30
|
+
functionName: 'approve',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export const getERC20ApprovePolicy = (contractAddress) => getPolicy([getERC20ApprovePermissions(contractAddress)]);
|
|
34
|
+
export const getAgentRegistrationPolicy = () => getPolicy(getPermissions(assetsRegistryConfig, ['register']));
|
|
35
|
+
export const getPricingPlanRegistrationPolicy = () => getPolicy(getPermissions(assetsRegistryConfig, ['createPlan']));
|
|
36
|
+
export const getRegisterAssetsPolicy = () => getPolicy(getPermissions(assetsRegistryConfig, ['registerAssetAndPlan']));
|
|
37
|
+
export const getOrderPolicy = () => getPolicy(getPermissions(fixedPaymentTemplateConfig, ['createAgreement']));
|
|
38
|
+
export const getMintNFTPolicy = () => getPolicy(getPermissions(nft1155CreditsConfig, ['mint']));
|
|
39
|
+
export const getBurnNFTPolicy = () => getPolicy(getPermissions(nft1155CreditsConfig, ['burn']));
|
|
40
|
+
export const getRegisterPolicy = () => getPolicy(getPermissions(assetsRegistryConfig, [
|
|
41
|
+
'register',
|
|
42
|
+
'createPlan',
|
|
43
|
+
'registerAssetAndPlan',
|
|
44
|
+
'addPlanToAsset',
|
|
45
|
+
'removePlanFromAsset',
|
|
46
|
+
]));
|
|
47
|
+
export const buildPolicy = (permissions, contractAddress) => {
|
|
48
|
+
const perms = [
|
|
49
|
+
...(permissions.includes('register')
|
|
50
|
+
? getPermissions(assetsRegistryConfig, [
|
|
51
|
+
'register',
|
|
52
|
+
'createPlan',
|
|
53
|
+
'registerAssetAndPlan',
|
|
54
|
+
'addPlanToAsset',
|
|
55
|
+
'removePlanFromAsset',
|
|
56
|
+
])
|
|
57
|
+
: []),
|
|
58
|
+
...(permissions.includes('mint') ? getPermissions(nft1155CreditsConfig, ['mint']) : []),
|
|
59
|
+
...(permissions.includes('burn') ? getPermissions(nft1155CreditsConfig, ['burn']) : []),
|
|
60
|
+
...(permissions.includes('order')
|
|
61
|
+
? getPermissions(fixedPaymentTemplateConfig, ['createAgreement'])
|
|
62
|
+
: []),
|
|
63
|
+
...(permissions.includes('order') ? [getERC20ApprovePermissions(contractAddress)] : []),
|
|
64
|
+
];
|
|
65
|
+
return getPolicy(perms);
|
|
66
|
+
};
|
|
67
|
+
export const getAllContractsPolicy = (contractAddress) => getPolicy([
|
|
68
|
+
...getPermissions(assetsRegistryConfig, [
|
|
69
|
+
'register',
|
|
70
|
+
'createPlan',
|
|
71
|
+
'registerAssetAndPlan',
|
|
72
|
+
'addPlanToAsset',
|
|
73
|
+
'removePlanFromAsset',
|
|
74
|
+
]),
|
|
75
|
+
...getPermissions(fixedPaymentTemplateConfig, ['createAgreement']),
|
|
76
|
+
...getPermissions(nft1155CreditsConfig, ['mint', 'burn']),
|
|
77
|
+
getERC20ApprovePermissions(contractAddress),
|
|
78
|
+
].filter(Boolean));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nevermined/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract.js';
|
|
2
|
+
export declare class Api extends Instantiable {
|
|
3
|
+
constructor(config: InstantiableConfig);
|
|
4
|
+
protected get url(): string | undefined;
|
|
5
|
+
validateAssertion(clientAssertion: string): Promise<string>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=Api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/services/Api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAK9E,qBAAa,GAAI,SAAQ,YAAY;gBACvB,MAAM,EAAE,kBAAkB;IAKtC,SAAS,KAAK,GAAG,uBAEhB;IAEY,iBAAiB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAkBzE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Instantiable } from '../Instantiable.abstract.js';
|
|
2
|
+
import { ApiError, HttpError } from '../errors/NeverminedErrors.js';
|
|
3
|
+
const authPath = '/api/v1/api-keys';
|
|
4
|
+
export class Api extends Instantiable {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
super();
|
|
7
|
+
this.setInstanceConfig(config);
|
|
8
|
+
}
|
|
9
|
+
get url() {
|
|
10
|
+
return this.config.backendUrl;
|
|
11
|
+
}
|
|
12
|
+
async validateAssertion(clientAssertion) {
|
|
13
|
+
try {
|
|
14
|
+
const response = await this.nevermined.utils.fetch.fetchToken(`${this.url}${authPath}/validate-assertion`, clientAssertion);
|
|
15
|
+
if (!response.ok) {
|
|
16
|
+
throw new HttpError(`Error Login - ${response.statusText} ${response.url}`, response.status);
|
|
17
|
+
}
|
|
18
|
+
const backendAuthToken = (await response.json()).access_token;
|
|
19
|
+
return backendAuthToken;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
throw new ApiError(error instanceof Error ? error.message : String(error));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|