@credo-ts/askar 0.5.0-alpha.101
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/LICENSE +202 -0
- package/README.md +31 -0
- package/build/AskarModule.d.ts +9 -0
- package/build/AskarModule.js +62 -0
- package/build/AskarModule.js.map +1 -0
- package/build/AskarModuleConfig.d.ts +68 -0
- package/build/AskarModuleConfig.js +33 -0
- package/build/AskarModuleConfig.js.map +1 -0
- package/build/index.d.ts +4 -0
- package/build/index.js +16 -0
- package/build/index.js.map +1 -0
- package/build/storage/AskarStorageService.d.ts +17 -0
- package/build/storage/AskarStorageService.js +145 -0
- package/build/storage/AskarStorageService.js.map +1 -0
- package/build/storage/index.d.ts +1 -0
- package/build/storage/index.js +18 -0
- package/build/storage/index.js.map +1 -0
- package/build/storage/utils.d.ts +15 -0
- package/build/storage/utils.js +109 -0
- package/build/storage/utils.js.map +1 -0
- package/build/utils/askarError.d.ts +14 -0
- package/build/utils/askarError.js +20 -0
- package/build/utils/askarError.js.map +1 -0
- package/build/utils/askarKeyTypes.d.ts +3 -0
- package/build/utils/askarKeyTypes.js +17 -0
- package/build/utils/askarKeyTypes.js.map +1 -0
- package/build/utils/askarWalletConfig.d.ts +14 -0
- package/build/utils/askarWalletConfig.js +73 -0
- package/build/utils/askarWalletConfig.js.map +1 -0
- package/build/utils/assertAskarWallet.d.ts +3 -0
- package/build/utils/assertAskarWallet.js +15 -0
- package/build/utils/assertAskarWallet.js.map +1 -0
- package/build/utils/index.d.ts +3 -0
- package/build/utils/index.js +20 -0
- package/build/utils/index.js.map +1 -0
- package/build/wallet/AskarBaseWallet.d.ts +73 -0
- package/build/wallet/AskarBaseWallet.js +429 -0
- package/build/wallet/AskarBaseWallet.js.map +1 -0
- package/build/wallet/AskarProfileWallet.d.ts +24 -0
- package/build/wallet/AskarProfileWallet.js +166 -0
- package/build/wallet/AskarProfileWallet.js.map +1 -0
- package/build/wallet/AskarWallet.d.ts +64 -0
- package/build/wallet/AskarWallet.js +338 -0
- package/build/wallet/AskarWallet.js.map +1 -0
- package/build/wallet/AskarWalletPostgresStorageConfig.d.ts +19 -0
- package/build/wallet/AskarWalletPostgresStorageConfig.js +3 -0
- package/build/wallet/AskarWalletPostgresStorageConfig.js.map +1 -0
- package/build/wallet/JweEnvelope.d.ts +32 -0
- package/build/wallet/JweEnvelope.js +55 -0
- package/build/wallet/JweEnvelope.js.map +1 -0
- package/build/wallet/index.d.ts +3 -0
- package/build/wallet/index.js +23 -0
- package/build/wallet/index.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BaseRecord, BaseRecordConstructor, Query, TagsBase } from '@credo-ts/core';
|
|
2
|
+
import type { EntryObject } from '@hyperledger/aries-askar-shared';
|
|
3
|
+
export declare function recordToInstance<T extends BaseRecord>(record: EntryObject, recordClass: BaseRecordConstructor<T>): T;
|
|
4
|
+
export declare function transformToRecordTagValues(tags: Record<string, unknown>): TagsBase;
|
|
5
|
+
export declare function transformFromRecordTagValues(tags: TagsBase): {
|
|
6
|
+
[key: string]: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Transforms the search query into a wallet query compatible with Askar WQL.
|
|
10
|
+
*
|
|
11
|
+
* The format used by Credo is almost the same as the WQL query, with the exception of
|
|
12
|
+
* the encoding of values, however this is handled by the {@link AskarStorageServiceUtil.transformToRecordTagValues}
|
|
13
|
+
* method.
|
|
14
|
+
*/
|
|
15
|
+
export declare function askarQueryFromSearchQuery<T extends BaseRecord>(query: Query<T>): Record<string, unknown>;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.askarQueryFromSearchQuery = exports.transformFromRecordTagValues = exports.transformToRecordTagValues = exports.recordToInstance = void 0;
|
|
15
|
+
const core_1 = require("@credo-ts/core");
|
|
16
|
+
function recordToInstance(record, recordClass) {
|
|
17
|
+
const instance = core_1.JsonTransformer.deserialize(record.value, recordClass);
|
|
18
|
+
instance.id = record.name;
|
|
19
|
+
const tags = record.tags ? transformToRecordTagValues(record.tags) : {};
|
|
20
|
+
instance.replaceTags(tags);
|
|
21
|
+
return instance;
|
|
22
|
+
}
|
|
23
|
+
exports.recordToInstance = recordToInstance;
|
|
24
|
+
function transformToRecordTagValues(tags) {
|
|
25
|
+
const transformedTags = {};
|
|
26
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
27
|
+
// If the value is a boolean string ('1' or '0')
|
|
28
|
+
// use the boolean val
|
|
29
|
+
if (value === '1' && (key === null || key === void 0 ? void 0 : key.includes(':'))) {
|
|
30
|
+
const [tagName, tagValue] = key.split(':');
|
|
31
|
+
const transformedValue = transformedTags[tagName];
|
|
32
|
+
if (Array.isArray(transformedValue)) {
|
|
33
|
+
transformedTags[tagName] = [...transformedValue, tagValue];
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
transformedTags[tagName] = [tagValue];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Transform '1' and '0' to boolean
|
|
40
|
+
else if (value === '1' || value === '0') {
|
|
41
|
+
transformedTags[key] = value === '1';
|
|
42
|
+
}
|
|
43
|
+
// If 1 or 0 is prefixed with 'n__' we need to remove it. This is to prevent
|
|
44
|
+
// casting the value to a boolean
|
|
45
|
+
else if (value === 'n__1' || value === 'n__0') {
|
|
46
|
+
transformedTags[key] = value === 'n__1' ? '1' : '0';
|
|
47
|
+
}
|
|
48
|
+
// Otherwise just use the value
|
|
49
|
+
else {
|
|
50
|
+
transformedTags[key] = value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return transformedTags;
|
|
54
|
+
}
|
|
55
|
+
exports.transformToRecordTagValues = transformToRecordTagValues;
|
|
56
|
+
function transformFromRecordTagValues(tags) {
|
|
57
|
+
const transformedTags = {};
|
|
58
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
59
|
+
// If the value is of type null we use the value undefined
|
|
60
|
+
// Askar doesn't support null as a value
|
|
61
|
+
if (value === null) {
|
|
62
|
+
transformedTags[key] = undefined;
|
|
63
|
+
}
|
|
64
|
+
// If the value is a boolean use the Askar
|
|
65
|
+
// '1' or '0' syntax
|
|
66
|
+
else if (typeof value === 'boolean') {
|
|
67
|
+
transformedTags[key] = value ? '1' : '0';
|
|
68
|
+
}
|
|
69
|
+
// If the value is 1 or 0, we need to add something to the value, otherwise
|
|
70
|
+
// the next time we deserialize the tag values it will be converted to boolean
|
|
71
|
+
else if (value === '1' || value === '0') {
|
|
72
|
+
transformedTags[key] = `n__${value}`;
|
|
73
|
+
}
|
|
74
|
+
// If the value is an array we create a tag for each array
|
|
75
|
+
// item ("tagName:arrayItem" = "1")
|
|
76
|
+
else if (Array.isArray(value)) {
|
|
77
|
+
value.forEach((item) => {
|
|
78
|
+
const tagName = `${key}:${item}`;
|
|
79
|
+
transformedTags[tagName] = '1';
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Otherwise just use the value
|
|
83
|
+
else {
|
|
84
|
+
transformedTags[key] = value;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return transformedTags;
|
|
88
|
+
}
|
|
89
|
+
exports.transformFromRecordTagValues = transformFromRecordTagValues;
|
|
90
|
+
/**
|
|
91
|
+
* Transforms the search query into a wallet query compatible with Askar WQL.
|
|
92
|
+
*
|
|
93
|
+
* The format used by Credo is almost the same as the WQL query, with the exception of
|
|
94
|
+
* the encoding of values, however this is handled by the {@link AskarStorageServiceUtil.transformToRecordTagValues}
|
|
95
|
+
* method.
|
|
96
|
+
*/
|
|
97
|
+
function askarQueryFromSearchQuery(query) {
|
|
98
|
+
// eslint-disable-next-line prefer-const
|
|
99
|
+
let { $and, $or, $not } = query, tags = __rest(query, ["$and", "$or", "$not"]);
|
|
100
|
+
$and = $and === null || $and === void 0 ? void 0 : $and.map((q) => askarQueryFromSearchQuery(q));
|
|
101
|
+
$or = $or === null || $or === void 0 ? void 0 : $or.map((q) => askarQueryFromSearchQuery(q));
|
|
102
|
+
$not = $not ? askarQueryFromSearchQuery($not) : undefined;
|
|
103
|
+
const askarQuery = Object.assign(Object.assign({}, transformFromRecordTagValues(tags)), { $and,
|
|
104
|
+
$or,
|
|
105
|
+
$not });
|
|
106
|
+
return askarQuery;
|
|
107
|
+
}
|
|
108
|
+
exports.askarQueryFromSearchQuery = askarQueryFromSearchQuery;
|
|
109
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/storage/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AriesAskarError } from '@hyperledger/aries-askar-shared';
|
|
2
|
+
export declare enum AskarErrorCode {
|
|
3
|
+
Success = 0,
|
|
4
|
+
Backend = 1,
|
|
5
|
+
Busy = 2,
|
|
6
|
+
Duplicate = 3,
|
|
7
|
+
Encryption = 4,
|
|
8
|
+
Input = 5,
|
|
9
|
+
NotFound = 6,
|
|
10
|
+
Unexpected = 7,
|
|
11
|
+
Unsupported = 8,
|
|
12
|
+
Custom = 100
|
|
13
|
+
}
|
|
14
|
+
export declare const isAskarError: (error: Error, askarErrorCode?: AskarErrorCode) => error is AriesAskarError;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAskarError = exports.AskarErrorCode = void 0;
|
|
4
|
+
const aries_askar_shared_1 = require("@hyperledger/aries-askar-shared");
|
|
5
|
+
var AskarErrorCode;
|
|
6
|
+
(function (AskarErrorCode) {
|
|
7
|
+
AskarErrorCode[AskarErrorCode["Success"] = 0] = "Success";
|
|
8
|
+
AskarErrorCode[AskarErrorCode["Backend"] = 1] = "Backend";
|
|
9
|
+
AskarErrorCode[AskarErrorCode["Busy"] = 2] = "Busy";
|
|
10
|
+
AskarErrorCode[AskarErrorCode["Duplicate"] = 3] = "Duplicate";
|
|
11
|
+
AskarErrorCode[AskarErrorCode["Encryption"] = 4] = "Encryption";
|
|
12
|
+
AskarErrorCode[AskarErrorCode["Input"] = 5] = "Input";
|
|
13
|
+
AskarErrorCode[AskarErrorCode["NotFound"] = 6] = "NotFound";
|
|
14
|
+
AskarErrorCode[AskarErrorCode["Unexpected"] = 7] = "Unexpected";
|
|
15
|
+
AskarErrorCode[AskarErrorCode["Unsupported"] = 8] = "Unsupported";
|
|
16
|
+
AskarErrorCode[AskarErrorCode["Custom"] = 100] = "Custom";
|
|
17
|
+
})(AskarErrorCode = exports.AskarErrorCode || (exports.AskarErrorCode = {}));
|
|
18
|
+
const isAskarError = (error, askarErrorCode) => error instanceof aries_askar_shared_1.AriesAskarError && (askarErrorCode === undefined || error.code === askarErrorCode);
|
|
19
|
+
exports.isAskarError = isAskarError;
|
|
20
|
+
//# sourceMappingURL=askarError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"askarError.js","sourceRoot":"","sources":["../../src/utils/askarError.ts"],"names":[],"mappings":";;;AAAA,wEAAiE;AAEjE,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,yDAAW,CAAA;IACX,yDAAW,CAAA;IACX,mDAAQ,CAAA;IACR,6DAAa,CAAA;IACb,+DAAc,CAAA;IACd,qDAAS,CAAA;IACT,2DAAY,CAAA;IACZ,+DAAc,CAAA;IACd,iEAAe,CAAA;IACf,yDAAY,CAAA;AACd,CAAC,EAXW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAWzB;AAEM,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,cAA+B,EAA4B,EAAE,CACtG,KAAK,YAAY,oCAAe,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;AADxF,QAAA,YAAY,gBAC4E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.keyTypesSupportedByAskar = exports.isKeyTypeSupportedByAskar = void 0;
|
|
4
|
+
const core_1 = require("@credo-ts/core");
|
|
5
|
+
const aries_askar_shared_1 = require("@hyperledger/aries-askar-shared");
|
|
6
|
+
const keyTypeToAskarAlg = {
|
|
7
|
+
[core_1.KeyType.Ed25519]: aries_askar_shared_1.KeyAlgs.Ed25519,
|
|
8
|
+
[core_1.KeyType.X25519]: aries_askar_shared_1.KeyAlgs.X25519,
|
|
9
|
+
[core_1.KeyType.Bls12381g1]: aries_askar_shared_1.KeyAlgs.Bls12381G1,
|
|
10
|
+
[core_1.KeyType.Bls12381g2]: aries_askar_shared_1.KeyAlgs.Bls12381G2,
|
|
11
|
+
[core_1.KeyType.Bls12381g1g2]: aries_askar_shared_1.KeyAlgs.Bls12381G1G2,
|
|
12
|
+
[core_1.KeyType.P256]: aries_askar_shared_1.KeyAlgs.EcSecp256r1,
|
|
13
|
+
};
|
|
14
|
+
const isKeyTypeSupportedByAskar = (keyType) => keyType in keyTypeToAskarAlg;
|
|
15
|
+
exports.isKeyTypeSupportedByAskar = isKeyTypeSupportedByAskar;
|
|
16
|
+
exports.keyTypesSupportedByAskar = Object.keys(keyTypeToAskarAlg);
|
|
17
|
+
//# sourceMappingURL=askarKeyTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"askarKeyTypes.js","sourceRoot":"","sources":["../../src/utils/askarKeyTypes.ts"],"names":[],"mappings":";;;AAAA,yCAAwC;AACxC,wEAAyD;AAEzD,MAAM,iBAAiB,GAAG;IACxB,CAAC,cAAO,CAAC,OAAO,CAAC,EAAE,4BAAO,CAAC,OAAO;IAClC,CAAC,cAAO,CAAC,MAAM,CAAC,EAAE,4BAAO,CAAC,MAAM;IAChC,CAAC,cAAO,CAAC,UAAU,CAAC,EAAE,4BAAO,CAAC,UAAU;IACxC,CAAC,cAAO,CAAC,UAAU,CAAC,EAAE,4BAAO,CAAC,UAAU;IACxC,CAAC,cAAO,CAAC,YAAY,CAAC,EAAE,4BAAO,CAAC,YAAY;IAC5C,CAAC,cAAO,CAAC,IAAI,CAAC,EAAE,4BAAO,CAAC,WAAW;CAC3B,CAAA;AAEH,MAAM,yBAAyB,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,IAAI,iBAAiB,CAAA;AAA9E,QAAA,yBAAyB,6BAAqD;AAE9E,QAAA,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAc,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { WalletConfig } from '@credo-ts/core';
|
|
2
|
+
import { KeyDerivationMethod } from '@credo-ts/core';
|
|
3
|
+
import { StoreKeyMethod } from '@hyperledger/aries-askar-shared';
|
|
4
|
+
export declare const keyDerivationMethodToStoreKeyMethod: (keyDerivationMethod: KeyDerivationMethod) => StoreKeyMethod;
|
|
5
|
+
/**
|
|
6
|
+
* Creates a proper askar wallet URI value based on walletConfig
|
|
7
|
+
* @param walletConfig WalletConfig object
|
|
8
|
+
* @param credoDataPath framework data path (used in case walletConfig.storage.path is undefined)
|
|
9
|
+
* @returns string containing the askar wallet URI
|
|
10
|
+
*/
|
|
11
|
+
export declare const uriFromWalletConfig: (walletConfig: WalletConfig, credoDataPath: string) => {
|
|
12
|
+
uri: string;
|
|
13
|
+
path?: string | undefined;
|
|
14
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uriFromWalletConfig = exports.keyDerivationMethodToStoreKeyMethod = void 0;
|
|
4
|
+
const core_1 = require("@credo-ts/core");
|
|
5
|
+
const aries_askar_shared_1 = require("@hyperledger/aries-askar-shared");
|
|
6
|
+
const keyDerivationMethodToStoreKeyMethod = (keyDerivationMethod) => {
|
|
7
|
+
const correspondenceTable = {
|
|
8
|
+
[core_1.KeyDerivationMethod.Raw]: aries_askar_shared_1.KdfMethod.Raw,
|
|
9
|
+
[core_1.KeyDerivationMethod.Argon2IInt]: aries_askar_shared_1.KdfMethod.Argon2IInt,
|
|
10
|
+
[core_1.KeyDerivationMethod.Argon2IMod]: aries_askar_shared_1.KdfMethod.Argon2IMod,
|
|
11
|
+
};
|
|
12
|
+
return new aries_askar_shared_1.StoreKeyMethod(correspondenceTable[keyDerivationMethod]);
|
|
13
|
+
};
|
|
14
|
+
exports.keyDerivationMethodToStoreKeyMethod = keyDerivationMethodToStoreKeyMethod;
|
|
15
|
+
/**
|
|
16
|
+
* Creates a proper askar wallet URI value based on walletConfig
|
|
17
|
+
* @param walletConfig WalletConfig object
|
|
18
|
+
* @param credoDataPath framework data path (used in case walletConfig.storage.path is undefined)
|
|
19
|
+
* @returns string containing the askar wallet URI
|
|
20
|
+
*/
|
|
21
|
+
const uriFromWalletConfig = (walletConfig, credoDataPath) => {
|
|
22
|
+
var _a;
|
|
23
|
+
let uri = '';
|
|
24
|
+
let path;
|
|
25
|
+
// By default use sqlite as database backend
|
|
26
|
+
if (!walletConfig.storage) {
|
|
27
|
+
walletConfig.storage = { type: 'sqlite' };
|
|
28
|
+
}
|
|
29
|
+
if (walletConfig.storage.type === 'sqlite') {
|
|
30
|
+
if (walletConfig.storage.inMemory) {
|
|
31
|
+
uri = 'sqlite://:memory:';
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
path = (_a = walletConfig.storage.path) !== null && _a !== void 0 ? _a : `${credoDataPath}/wallet/${walletConfig.id}/sqlite.db`;
|
|
35
|
+
uri = `sqlite://${path}`;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else if (walletConfig.storage.type === 'postgres') {
|
|
39
|
+
const storageConfig = walletConfig.storage;
|
|
40
|
+
if (!storageConfig.config || !storageConfig.credentials) {
|
|
41
|
+
throw new core_1.WalletError('Invalid storage configuration for postgres wallet');
|
|
42
|
+
}
|
|
43
|
+
const urlParams = [];
|
|
44
|
+
if (storageConfig.config.connectTimeout !== undefined) {
|
|
45
|
+
urlParams.push(`connect_timeout=${encodeURIComponent(storageConfig.config.connectTimeout)}`);
|
|
46
|
+
}
|
|
47
|
+
if (storageConfig.config.idleTimeout !== undefined) {
|
|
48
|
+
urlParams.push(`idle_timeout=${encodeURIComponent(storageConfig.config.idleTimeout)}`);
|
|
49
|
+
}
|
|
50
|
+
if (storageConfig.config.maxConnections !== undefined) {
|
|
51
|
+
urlParams.push(`max_connections=${encodeURIComponent(storageConfig.config.maxConnections)}`);
|
|
52
|
+
}
|
|
53
|
+
if (storageConfig.config.minConnections !== undefined) {
|
|
54
|
+
urlParams.push(`min_connections=${encodeURIComponent(storageConfig.config.minConnections)}`);
|
|
55
|
+
}
|
|
56
|
+
if (storageConfig.credentials.adminAccount !== undefined) {
|
|
57
|
+
urlParams.push(`admin_account=${encodeURIComponent(storageConfig.credentials.adminAccount)}`);
|
|
58
|
+
}
|
|
59
|
+
if (storageConfig.credentials.adminPassword !== undefined) {
|
|
60
|
+
urlParams.push(`admin_password=${encodeURIComponent(storageConfig.credentials.adminPassword)}`);
|
|
61
|
+
}
|
|
62
|
+
uri = `postgres://${encodeURIComponent(storageConfig.credentials.account)}:${encodeURIComponent(storageConfig.credentials.password)}@${storageConfig.config.host}/${encodeURIComponent(walletConfig.id)}`;
|
|
63
|
+
if (urlParams.length > 0) {
|
|
64
|
+
uri = `${uri}?${urlParams.join('&')}`;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
throw new core_1.WalletError(`Storage type not supported: ${walletConfig.storage.type}`);
|
|
69
|
+
}
|
|
70
|
+
return { uri, path };
|
|
71
|
+
};
|
|
72
|
+
exports.uriFromWalletConfig = uriFromWalletConfig;
|
|
73
|
+
//# sourceMappingURL=askarWalletConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"askarWalletConfig.js","sourceRoot":"","sources":["../../src/utils/askarWalletConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertAskarWallet = void 0;
|
|
4
|
+
const core_1 = require("@credo-ts/core");
|
|
5
|
+
const wallet_1 = require("../wallet");
|
|
6
|
+
function assertAskarWallet(wallet) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
if (!(wallet instanceof wallet_1.AskarProfileWallet) && !(wallet instanceof wallet_1.AskarWallet)) {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
const walletClassName = (_b = (_a = wallet.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'unknown';
|
|
11
|
+
throw new core_1.AriesFrameworkError(`Expected wallet to be instance of AskarProfileWallet or AskarWallet, found ${walletClassName}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.assertAskarWallet = assertAskarWallet;
|
|
15
|
+
//# sourceMappingURL=assertAskarWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertAskarWallet.js","sourceRoot":"","sources":["../../src/utils/assertAskarWallet.ts"],"names":[],"mappings":";;;AAEA,yCAAoD;AAEpD,sCAA2D;AAE3D,SAAgB,iBAAiB,CAAC,MAAc;;IAC9C,IAAI,CAAC,CAAC,MAAM,YAAY,2BAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,YAAY,oBAAW,CAAC,EAAE;QAC/E,8DAA8D;QAC9D,MAAM,eAAe,GAAG,MAAA,MAAC,MAAc,CAAC,WAAW,0CAAE,IAAI,mCAAI,SAAS,CAAA;QACtE,MAAM,IAAI,0BAAmB,CAC3B,8EAA8E,eAAe,EAAE,CAChG,CAAA;KACF;AACH,CAAC;AARD,8CAQC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./askarError"), exports);
|
|
18
|
+
__exportStar(require("./askarKeyTypes"), exports);
|
|
19
|
+
__exportStar(require("./askarWalletConfig"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,kDAA+B;AAC/B,sDAAmC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { EncryptedMessage, WalletConfig, WalletCreateKeyOptions, WalletSignOptions, UnpackedMessageContext, WalletVerifyOptions, Wallet, WalletConfigRekey, WalletExportImportConfig, Logger, SigningProviderRegistry } from '@credo-ts/core';
|
|
2
|
+
import type { Session } from '@hyperledger/aries-askar-shared';
|
|
3
|
+
import { KeyType, Buffer, Key } from '@credo-ts/core';
|
|
4
|
+
export declare abstract class AskarBaseWallet implements Wallet {
|
|
5
|
+
protected _session?: Session;
|
|
6
|
+
protected logger: Logger;
|
|
7
|
+
protected signingKeyProviderRegistry: SigningProviderRegistry;
|
|
8
|
+
constructor(logger: Logger, signingKeyProviderRegistry: SigningProviderRegistry);
|
|
9
|
+
/**
|
|
10
|
+
* Abstract methods that need to be implemented by subclasses
|
|
11
|
+
*/
|
|
12
|
+
abstract isInitialized: boolean;
|
|
13
|
+
abstract isProvisioned: boolean;
|
|
14
|
+
abstract create(walletConfig: WalletConfig): Promise<void>;
|
|
15
|
+
abstract createAndOpen(walletConfig: WalletConfig): Promise<void>;
|
|
16
|
+
abstract open(walletConfig: WalletConfig): Promise<void>;
|
|
17
|
+
abstract rotateKey(walletConfig: WalletConfigRekey): Promise<void>;
|
|
18
|
+
abstract close(): Promise<void>;
|
|
19
|
+
abstract delete(): Promise<void>;
|
|
20
|
+
abstract export(exportConfig: WalletExportImportConfig): Promise<void>;
|
|
21
|
+
abstract import(walletConfig: WalletConfig, importConfig: WalletExportImportConfig): Promise<void>;
|
|
22
|
+
abstract dispose(): void | Promise<void>;
|
|
23
|
+
abstract profile: string;
|
|
24
|
+
get session(): Session;
|
|
25
|
+
get supportedKeyTypes(): KeyType[];
|
|
26
|
+
/**
|
|
27
|
+
* Create a key with an optional seed and keyType.
|
|
28
|
+
* The keypair is also automatically stored in the wallet afterwards
|
|
29
|
+
*/
|
|
30
|
+
createKey({ seed, privateKey, keyType }: WalletCreateKeyOptions): Promise<Key>;
|
|
31
|
+
/**
|
|
32
|
+
* sign a Buffer with an instance of a Key class
|
|
33
|
+
*
|
|
34
|
+
* @param data Buffer The data that needs to be signed
|
|
35
|
+
* @param key Key The key that is used to sign the data
|
|
36
|
+
*
|
|
37
|
+
* @returns A signature for the data
|
|
38
|
+
*/
|
|
39
|
+
sign({ data, key }: WalletSignOptions): Promise<Buffer>;
|
|
40
|
+
/**
|
|
41
|
+
* Verify the signature with the data and the used key
|
|
42
|
+
*
|
|
43
|
+
* @param data Buffer The data that has to be confirmed to be signed
|
|
44
|
+
* @param key Key The key that was used in the signing process
|
|
45
|
+
* @param signature Buffer The signature that was created by the signing process
|
|
46
|
+
*
|
|
47
|
+
* @returns A boolean whether the signature was created with the supplied data and key
|
|
48
|
+
*
|
|
49
|
+
* @throws {WalletError} When it could not do the verification
|
|
50
|
+
* @throws {WalletError} When an unsupported keytype is used
|
|
51
|
+
*/
|
|
52
|
+
verify({ data, key, signature }: WalletVerifyOptions): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Pack a message using DIDComm V1 algorithm
|
|
55
|
+
*
|
|
56
|
+
* @param payload message to send
|
|
57
|
+
* @param recipientKeys array containing recipient keys in base58
|
|
58
|
+
* @param senderVerkey sender key in base58
|
|
59
|
+
* @returns JWE Envelope to send
|
|
60
|
+
*/
|
|
61
|
+
pack(payload: Record<string, unknown>, recipientKeys: string[], senderVerkey?: string): Promise<EncryptedMessage>;
|
|
62
|
+
/**
|
|
63
|
+
* Unpacks a JWE Envelope coded using DIDComm V1 algorithm
|
|
64
|
+
*
|
|
65
|
+
* @param messagePackage JWE Envelope
|
|
66
|
+
* @returns UnpackedMessageContext with plain text message, sender key and recipient key
|
|
67
|
+
*/
|
|
68
|
+
unpack(messagePackage: EncryptedMessage): Promise<UnpackedMessageContext>;
|
|
69
|
+
generateNonce(): Promise<string>;
|
|
70
|
+
generateWalletKey(): Promise<string>;
|
|
71
|
+
private retrieveKeyPair;
|
|
72
|
+
private storeKeyPair;
|
|
73
|
+
}
|