@credo-ts/askar 0.4.1-alpha.157

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 (57) 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 +58 -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 +139 -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 +110 -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 +7 -0
  25. package/build/utils/askarKeyTypes.js +45 -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 +75 -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 +89 -0
  37. package/build/wallet/AskarBaseWallet.js +385 -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 +150 -0
  41. package/build/wallet/AskarProfileWallet.js.map +1 -0
  42. package/build/wallet/AskarWallet.d.ts +58 -0
  43. package/build/wallet/AskarWallet.js +342 -0
  44. package/build/wallet/AskarWallet.js.map +1 -0
  45. package/build/wallet/AskarWalletStorageConfig.d.ts +31 -0
  46. package/build/wallet/AskarWalletStorageConfig.js +12 -0
  47. package/build/wallet/AskarWalletStorageConfig.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/didcommV1.d.ts +8 -0
  52. package/build/wallet/didcommV1.js +156 -0
  53. package/build/wallet/didcommV1.js.map +1 -0
  54. package/build/wallet/index.d.ts +3 -0
  55. package/build/wallet/index.js +23 -0
  56. package/build/wallet/index.js.map +1 -0
  57. 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,110 @@
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, ...tagValues] = key.split(':');
31
+ const tagValue = tagValues.join(':');
32
+ const transformedValue = transformedTags[tagName];
33
+ if (Array.isArray(transformedValue)) {
34
+ transformedTags[tagName] = [...transformedValue, tagValue];
35
+ }
36
+ else {
37
+ transformedTags[tagName] = [tagValue];
38
+ }
39
+ }
40
+ // Transform '1' and '0' to boolean
41
+ else if (value === '1' || value === '0') {
42
+ transformedTags[key] = value === '1';
43
+ }
44
+ // If 1 or 0 is prefixed with 'n__' we need to remove it. This is to prevent
45
+ // casting the value to a boolean
46
+ else if (value === 'n__1' || value === 'n__0') {
47
+ transformedTags[key] = value === 'n__1' ? '1' : '0';
48
+ }
49
+ // Otherwise just use the value
50
+ else {
51
+ transformedTags[key] = value;
52
+ }
53
+ }
54
+ return transformedTags;
55
+ }
56
+ exports.transformToRecordTagValues = transformToRecordTagValues;
57
+ function transformFromRecordTagValues(tags) {
58
+ const transformedTags = {};
59
+ for (const [key, value] of Object.entries(tags)) {
60
+ // If the value is of type null we use the value undefined
61
+ // Askar doesn't support null as a value
62
+ if (value === null) {
63
+ transformedTags[key] = undefined;
64
+ }
65
+ // If the value is a boolean use the Askar
66
+ // '1' or '0' syntax
67
+ else if (typeof value === 'boolean') {
68
+ transformedTags[key] = value ? '1' : '0';
69
+ }
70
+ // If the value is 1 or 0, we need to add something to the value, otherwise
71
+ // the next time we deserialize the tag values it will be converted to boolean
72
+ else if (value === '1' || value === '0') {
73
+ transformedTags[key] = `n__${value}`;
74
+ }
75
+ // If the value is an array we create a tag for each array
76
+ // item ("tagName:arrayItem" = "1")
77
+ else if (Array.isArray(value)) {
78
+ value.forEach((item) => {
79
+ const tagName = `${key}:${item}`;
80
+ transformedTags[tagName] = '1';
81
+ });
82
+ }
83
+ // Otherwise just use the value
84
+ else {
85
+ transformedTags[key] = value;
86
+ }
87
+ }
88
+ return transformedTags;
89
+ }
90
+ exports.transformFromRecordTagValues = transformFromRecordTagValues;
91
+ /**
92
+ * Transforms the search query into a wallet query compatible with Askar WQL.
93
+ *
94
+ * The format used by Credo is almost the same as the WQL query, with the exception of
95
+ * the encoding of values, however this is handled by the {@link AskarStorageServiceUtil.transformToRecordTagValues}
96
+ * method.
97
+ */
98
+ function askarQueryFromSearchQuery(query) {
99
+ // eslint-disable-next-line prefer-const
100
+ let { $and, $or, $not } = query, tags = __rest(query, ["$and", "$or", "$not"]);
101
+ $and = $and === null || $and === void 0 ? void 0 : $and.map((q) => askarQueryFromSearchQuery(q));
102
+ $or = $or === null || $or === void 0 ? void 0 : $or.map((q) => askarQueryFromSearchQuery(q));
103
+ $not = $not ? askarQueryFromSearchQuery($not) : undefined;
104
+ const askarQuery = Object.assign(Object.assign({}, transformFromRecordTagValues(tags)), { $and,
105
+ $or,
106
+ $not });
107
+ return askarQuery;
108
+ }
109
+ exports.askarQueryFromSearchQuery = askarQueryFromSearchQuery;
110
+ //# 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,7 @@
1
+ import { KeyType } from '@credo-ts/core';
2
+ export declare enum AskarKeyTypePurpose {
3
+ KeyManagement = "KeyManagement",
4
+ Signing = "Signing"
5
+ }
6
+ export declare const isKeyTypeSupportedByAskarForPurpose: (keyType: KeyType, purpose: AskarKeyTypePurpose) => boolean;
7
+ export declare const keyTypesSupportedByAskar: KeyType[];
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.keyTypesSupportedByAskar = exports.isKeyTypeSupportedByAskarForPurpose = exports.AskarKeyTypePurpose = void 0;
4
+ const core_1 = require("@credo-ts/core");
5
+ const aries_askar_shared_1 = require("@hyperledger/aries-askar-shared");
6
+ var AskarKeyTypePurpose;
7
+ (function (AskarKeyTypePurpose) {
8
+ AskarKeyTypePurpose["KeyManagement"] = "KeyManagement";
9
+ AskarKeyTypePurpose["Signing"] = "Signing";
10
+ })(AskarKeyTypePurpose = exports.AskarKeyTypePurpose || (exports.AskarKeyTypePurpose = {}));
11
+ const keyTypeToAskarAlg = {
12
+ [core_1.KeyType.Ed25519]: {
13
+ keyAlg: aries_askar_shared_1.KeyAlgs.Ed25519,
14
+ purposes: [AskarKeyTypePurpose.KeyManagement, AskarKeyTypePurpose.Signing],
15
+ },
16
+ [core_1.KeyType.X25519]: {
17
+ keyAlg: aries_askar_shared_1.KeyAlgs.X25519,
18
+ purposes: [AskarKeyTypePurpose.KeyManagement, AskarKeyTypePurpose.Signing],
19
+ },
20
+ [core_1.KeyType.Bls12381g1]: {
21
+ keyAlg: aries_askar_shared_1.KeyAlgs.Bls12381G1,
22
+ purposes: [AskarKeyTypePurpose.KeyManagement],
23
+ },
24
+ [core_1.KeyType.Bls12381g2]: {
25
+ keyAlg: aries_askar_shared_1.KeyAlgs.Bls12381G2,
26
+ purposes: [AskarKeyTypePurpose.KeyManagement],
27
+ },
28
+ [core_1.KeyType.Bls12381g1g2]: {
29
+ keyAlg: aries_askar_shared_1.KeyAlgs.Bls12381G1,
30
+ purposes: [AskarKeyTypePurpose.KeyManagement],
31
+ },
32
+ [core_1.KeyType.P256]: {
33
+ keyAlg: aries_askar_shared_1.KeyAlgs.EcSecp256r1,
34
+ purposes: [AskarKeyTypePurpose.KeyManagement, AskarKeyTypePurpose.Signing],
35
+ },
36
+ [core_1.KeyType.K256]: {
37
+ keyAlg: aries_askar_shared_1.KeyAlgs.EcSecp256k1,
38
+ purposes: [AskarKeyTypePurpose.KeyManagement, AskarKeyTypePurpose.Signing],
39
+ },
40
+ };
41
+ const isKeyTypeSupportedByAskarForPurpose = (keyType, purpose) => keyType in keyTypeToAskarAlg &&
42
+ keyTypeToAskarAlg[keyType].purposes.includes(purpose);
43
+ exports.isKeyTypeSupportedByAskarForPurpose = isKeyTypeSupportedByAskarForPurpose;
44
+ exports.keyTypesSupportedByAskar = Object.keys(keyTypeToAskarAlg);
45
+ //# 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,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,sDAA+B,CAAA;IAC/B,0CAAmB,CAAA;AACrB,CAAC,EAHW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAG9B;AAED,MAAM,iBAAiB,GAAG;IACxB,CAAC,cAAO,CAAC,OAAO,CAAC,EAAE;QACjB,MAAM,EAAE,4BAAO,CAAC,OAAO;QACvB,QAAQ,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC;KAC3E;IACD,CAAC,cAAO,CAAC,MAAM,CAAC,EAAE;QAChB,MAAM,EAAE,4BAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC;KAC3E;IACD,CAAC,cAAO,CAAC,UAAU,CAAC,EAAE;QACpB,MAAM,EAAE,4BAAO,CAAC,UAAU;QAC1B,QAAQ,EAAE,CAAC,mBAAmB,CAAC,aAAa,CAAC;KAC9C;IACD,CAAC,cAAO,CAAC,UAAU,CAAC,EAAE;QACpB,MAAM,EAAE,4BAAO,CAAC,UAAU;QAC1B,QAAQ,EAAE,CAAC,mBAAmB,CAAC,aAAa,CAAC;KAC9C;IACD,CAAC,cAAO,CAAC,YAAY,CAAC,EAAE;QACtB,MAAM,EAAE,4BAAO,CAAC,UAAU;QAC1B,QAAQ,EAAE,CAAC,mBAAmB,CAAC,aAAa,CAAC;KAC9C;IACD,CAAC,cAAO,CAAC,IAAI,CAAC,EAAE;QACd,MAAM,EAAE,4BAAO,CAAC,WAAW;QAC3B,QAAQ,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC;KAC3E;IACD,CAAC,cAAO,CAAC,IAAI,CAAC,EAAE;QACd,MAAM,EAAE,4BAAO,CAAC,WAAW;QAC3B,QAAQ,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC;KAC3E;CACF,CAAA;AAEM,MAAM,mCAAmC,GAAG,CAAC,OAAgB,EAAE,OAA4B,EAAE,EAAE,CACpG,OAAO,IAAI,iBAAiB;IAC5B,iBAAiB,CAAC,OAAyC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAF5E,QAAA,mCAAmC,uCAEyC;AAE5E,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,75 @@
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 AskarWalletStorageConfig_1 = require("../wallet/AskarWalletStorageConfig");
7
+ const keyDerivationMethodToStoreKeyMethod = (keyDerivationMethod) => {
8
+ const correspondenceTable = {
9
+ [core_1.KeyDerivationMethod.Raw]: aries_askar_shared_1.KdfMethod.Raw,
10
+ [core_1.KeyDerivationMethod.Argon2IInt]: aries_askar_shared_1.KdfMethod.Argon2IInt,
11
+ [core_1.KeyDerivationMethod.Argon2IMod]: aries_askar_shared_1.KdfMethod.Argon2IMod,
12
+ };
13
+ return new aries_askar_shared_1.StoreKeyMethod(correspondenceTable[keyDerivationMethod]);
14
+ };
15
+ exports.keyDerivationMethodToStoreKeyMethod = keyDerivationMethodToStoreKeyMethod;
16
+ /**
17
+ * Creates a proper askar wallet URI value based on walletConfig
18
+ * @param walletConfig WalletConfig object
19
+ * @param credoDataPath framework data path (used in case walletConfig.storage.path is undefined)
20
+ * @returns string containing the askar wallet URI
21
+ */
22
+ const uriFromWalletConfig = (walletConfig, credoDataPath) => {
23
+ var _a, _b, _c, _d, _e;
24
+ let uri = '';
25
+ let path;
26
+ // By default use sqlite as database backend
27
+ if (!walletConfig.storage) {
28
+ walletConfig.storage = { type: 'sqlite' };
29
+ }
30
+ const urlParams = [];
31
+ const storageConfig = walletConfig.storage;
32
+ if ((0, AskarWalletStorageConfig_1.isAskarWalletSqliteStorageConfig)(storageConfig)) {
33
+ if ((_a = storageConfig.config) === null || _a === void 0 ? void 0 : _a.inMemory) {
34
+ uri = 'sqlite://:memory:';
35
+ }
36
+ else {
37
+ path = (_c = (_b = storageConfig.config) === null || _b === void 0 ? void 0 : _b.path) !== null && _c !== void 0 ? _c : `${credoDataPath}/wallet/${walletConfig.id}/sqlite.db`;
38
+ uri = `sqlite://${path}`;
39
+ }
40
+ }
41
+ else if ((0, AskarWalletStorageConfig_1.isAskarWalletPostgresStorageConfig)(storageConfig)) {
42
+ if (!storageConfig.config || !storageConfig.credentials) {
43
+ throw new core_1.WalletError('Invalid storage configuration for postgres wallet');
44
+ }
45
+ if (storageConfig.config.connectTimeout !== undefined) {
46
+ urlParams.push(`connect_timeout=${encodeURIComponent(storageConfig.config.connectTimeout)}`);
47
+ }
48
+ if (storageConfig.config.idleTimeout !== undefined) {
49
+ urlParams.push(`idle_timeout=${encodeURIComponent(storageConfig.config.idleTimeout)}`);
50
+ }
51
+ if (storageConfig.credentials.adminAccount !== undefined) {
52
+ urlParams.push(`admin_account=${encodeURIComponent(storageConfig.credentials.adminAccount)}`);
53
+ }
54
+ if (storageConfig.credentials.adminPassword !== undefined) {
55
+ urlParams.push(`admin_password=${encodeURIComponent(storageConfig.credentials.adminPassword)}`);
56
+ }
57
+ uri = `postgres://${encodeURIComponent(storageConfig.credentials.account)}:${encodeURIComponent(storageConfig.credentials.password)}@${storageConfig.config.host}/${encodeURIComponent(walletConfig.id)}`;
58
+ }
59
+ else {
60
+ throw new core_1.WalletError(`Storage type not supported: ${storageConfig.type}`);
61
+ }
62
+ // Common config options
63
+ if (((_d = storageConfig.config) === null || _d === void 0 ? void 0 : _d.maxConnections) !== undefined) {
64
+ urlParams.push(`max_connections=${encodeURIComponent(storageConfig.config.maxConnections)}`);
65
+ }
66
+ if (((_e = storageConfig.config) === null || _e === void 0 ? void 0 : _e.minConnections) !== undefined) {
67
+ urlParams.push(`min_connections=${encodeURIComponent(storageConfig.config.minConnections)}`);
68
+ }
69
+ if (urlParams.length > 0) {
70
+ uri = `${uri}?${urlParams.join('&')}`;
71
+ }
72
+ return { uri, path };
73
+ };
74
+ exports.uriFromWalletConfig = uriFromWalletConfig;
75
+ //# 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.CredoError(`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,yCAA2C;AAE3C,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,iBAAU,CAClB,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,89 @@
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 { Buffer, Key } from '@credo-ts/core';
4
+ import { Store } from '@hyperledger/aries-askar-shared';
5
+ export declare abstract class AskarBaseWallet implements Wallet {
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
+ protected abstract store: Store;
25
+ /**
26
+ * Run callback with the session provided, the session will
27
+ * be closed once the callback resolves or rejects if it is not closed yet.
28
+ *
29
+ * TODO: update to new `using` syntax so we don't have to use a callback
30
+ */
31
+ withSession<Return>(callback: (session: Session) => Return): Promise<Awaited<Return>>;
32
+ /**
33
+ * Run callback with a transaction. If the callback resolves the transaction
34
+ * will be committed if the transaction is not closed yet. If the callback rejects
35
+ * the transaction will be rolled back if the transaction is not closed yet.
36
+ *
37
+ * TODO: update to new `using` syntax so we don't have to use a callback
38
+ */
39
+ withTransaction<Return>(callback: (transaction: Session) => Return): Promise<Awaited<Return>>;
40
+ get supportedKeyTypes(): import("@credo-ts/core").KeyType[];
41
+ /**
42
+ * Create a key with an optional seed and keyType.
43
+ * The keypair is also automatically stored in the wallet afterwards
44
+ */
45
+ createKey({ seed, privateKey, keyType }: WalletCreateKeyOptions): Promise<Key>;
46
+ /**
47
+ * sign a Buffer with an instance of a Key class
48
+ *
49
+ * @param data Buffer The data that needs to be signed
50
+ * @param key Key The key that is used to sign the data
51
+ *
52
+ * @returns A signature for the data
53
+ */
54
+ sign({ data, key }: WalletSignOptions): Promise<Buffer>;
55
+ /**
56
+ * Verify the signature with the data and the used key
57
+ *
58
+ * @param data Buffer The data that has to be confirmed to be signed
59
+ * @param key Key The key that was used in the signing process
60
+ * @param signature Buffer The signature that was created by the signing process
61
+ *
62
+ * @returns A boolean whether the signature was created with the supplied data and key
63
+ *
64
+ * @throws {WalletError} When it could not do the verification
65
+ * @throws {WalletError} When an unsupported keytype is used
66
+ */
67
+ verify({ data, key, signature }: WalletVerifyOptions): Promise<boolean>;
68
+ /**
69
+ * Pack a message using DIDComm V1 algorithm
70
+ *
71
+ * @param payload message to send
72
+ * @param recipientKeys array containing recipient keys in base58
73
+ * @param senderVerkey sender key in base58
74
+ * @returns JWE Envelope to send
75
+ */
76
+ pack(payload: Record<string, unknown>, recipientKeys: string[], senderVerkey?: string): Promise<EncryptedMessage>;
77
+ /**
78
+ * Unpacks a JWE Envelope coded using DIDComm V1 algorithm
79
+ *
80
+ * @param messagePackage JWE Envelope
81
+ * @returns UnpackedMessageContext with plain text message, sender key and recipient key
82
+ */
83
+ unpack(messagePackage: EncryptedMessage): Promise<UnpackedMessageContext>;
84
+ generateNonce(): Promise<string>;
85
+ generateWalletKey(): Promise<string>;
86
+ private retrieveKeyPair;
87
+ private deleteKeyPair;
88
+ private storeKeyPair;
89
+ }