@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.
Files changed (54) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +31 -0
  3. package/build/AskarModule.d.ts +9 -0
  4. package/build/AskarModule.js +62 -0
  5. package/build/AskarModule.js.map +1 -0
  6. package/build/AskarModuleConfig.d.ts +68 -0
  7. package/build/AskarModuleConfig.js +33 -0
  8. package/build/AskarModuleConfig.js.map +1 -0
  9. package/build/index.d.ts +4 -0
  10. package/build/index.js +16 -0
  11. package/build/index.js.map +1 -0
  12. package/build/storage/AskarStorageService.d.ts +17 -0
  13. package/build/storage/AskarStorageService.js +145 -0
  14. package/build/storage/AskarStorageService.js.map +1 -0
  15. package/build/storage/index.d.ts +1 -0
  16. package/build/storage/index.js +18 -0
  17. package/build/storage/index.js.map +1 -0
  18. package/build/storage/utils.d.ts +15 -0
  19. package/build/storage/utils.js +109 -0
  20. package/build/storage/utils.js.map +1 -0
  21. package/build/utils/askarError.d.ts +14 -0
  22. package/build/utils/askarError.js +20 -0
  23. package/build/utils/askarError.js.map +1 -0
  24. package/build/utils/askarKeyTypes.d.ts +3 -0
  25. package/build/utils/askarKeyTypes.js +17 -0
  26. package/build/utils/askarKeyTypes.js.map +1 -0
  27. package/build/utils/askarWalletConfig.d.ts +14 -0
  28. package/build/utils/askarWalletConfig.js +73 -0
  29. package/build/utils/askarWalletConfig.js.map +1 -0
  30. package/build/utils/assertAskarWallet.d.ts +3 -0
  31. package/build/utils/assertAskarWallet.js +15 -0
  32. package/build/utils/assertAskarWallet.js.map +1 -0
  33. package/build/utils/index.d.ts +3 -0
  34. package/build/utils/index.js +20 -0
  35. package/build/utils/index.js.map +1 -0
  36. package/build/wallet/AskarBaseWallet.d.ts +73 -0
  37. package/build/wallet/AskarBaseWallet.js +429 -0
  38. package/build/wallet/AskarBaseWallet.js.map +1 -0
  39. package/build/wallet/AskarProfileWallet.d.ts +24 -0
  40. package/build/wallet/AskarProfileWallet.js +166 -0
  41. package/build/wallet/AskarProfileWallet.js.map +1 -0
  42. package/build/wallet/AskarWallet.d.ts +64 -0
  43. package/build/wallet/AskarWallet.js +338 -0
  44. package/build/wallet/AskarWallet.js.map +1 -0
  45. package/build/wallet/AskarWalletPostgresStorageConfig.d.ts +19 -0
  46. package/build/wallet/AskarWalletPostgresStorageConfig.js +3 -0
  47. package/build/wallet/AskarWalletPostgresStorageConfig.js.map +1 -0
  48. package/build/wallet/JweEnvelope.d.ts +32 -0
  49. package/build/wallet/JweEnvelope.js +55 -0
  50. package/build/wallet/JweEnvelope.js.map +1 -0
  51. package/build/wallet/index.d.ts +3 -0
  52. package/build/wallet/index.js +23 -0
  53. package/build/wallet/index.js.map +1 -0
  54. 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,3 @@
1
+ import { KeyType } from '@credo-ts/core';
2
+ export declare const isKeyTypeSupportedByAskar: (keyType: KeyType) => boolean;
3
+ export declare const keyTypesSupportedByAskar: KeyType[];
@@ -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,3 @@
1
+ import type { Wallet } from '@credo-ts/core';
2
+ import { AskarWallet, AskarProfileWallet } from '../wallet';
3
+ export declare function assertAskarWallet(wallet: Wallet): asserts wallet is AskarProfileWallet | AskarWallet;
@@ -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,3 @@
1
+ export * from './askarError';
2
+ export * from './askarKeyTypes';
3
+ export * from './askarWalletConfig';
@@ -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
+ }