@credo-ts/askar 0.6.1-pr-2091-20241119140918 → 0.6.1

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 (166) hide show
  1. package/build/AskarApi.d.mts +68 -0
  2. package/build/AskarApi.d.mts.map +1 -0
  3. package/build/AskarApi.mjs +94 -0
  4. package/build/AskarApi.mjs.map +1 -0
  5. package/build/AskarApiOptions.d.mts +29 -0
  6. package/build/AskarApiOptions.d.mts.map +1 -0
  7. package/build/AskarModule.d.mts +18 -0
  8. package/build/AskarModule.d.mts.map +1 -0
  9. package/build/AskarModule.mjs +61 -0
  10. package/build/AskarModule.mjs.map +1 -0
  11. package/build/AskarModuleConfig.d.mts +125 -0
  12. package/build/AskarModuleConfig.d.mts.map +1 -0
  13. package/build/AskarModuleConfig.mjs +41 -0
  14. package/build/AskarModuleConfig.mjs.map +1 -0
  15. package/build/AskarStorageConfig.d.mts +32 -0
  16. package/build/AskarStorageConfig.d.mts.map +1 -0
  17. package/build/AskarStorageConfig.mjs +11 -0
  18. package/build/AskarStorageConfig.mjs.map +1 -0
  19. package/build/AskarStoreManager.d.mts +109 -0
  20. package/build/AskarStoreManager.d.mts.map +1 -0
  21. package/build/AskarStoreManager.mjs +386 -0
  22. package/build/AskarStoreManager.mjs.map +1 -0
  23. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
  24. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
  25. package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
  26. package/build/error/AskarError.d.mts +1 -0
  27. package/build/error/AskarError.mjs +12 -0
  28. package/build/error/AskarError.mjs.map +1 -0
  29. package/build/error/AskarStoreDuplicateError.d.mts +13 -0
  30. package/build/error/AskarStoreDuplicateError.d.mts.map +1 -0
  31. package/build/error/AskarStoreDuplicateError.mjs +12 -0
  32. package/build/error/AskarStoreDuplicateError.mjs.map +1 -0
  33. package/build/error/AskarStoreError.d.mts +13 -0
  34. package/build/error/AskarStoreError.d.mts.map +1 -0
  35. package/build/error/AskarStoreError.mjs +12 -0
  36. package/build/error/AskarStoreError.mjs.map +1 -0
  37. package/build/error/AskarStoreExportPathExistsError.d.mts +13 -0
  38. package/build/error/AskarStoreExportPathExistsError.d.mts.map +1 -0
  39. package/build/error/AskarStoreExportPathExistsError.mjs +12 -0
  40. package/build/error/AskarStoreExportPathExistsError.mjs.map +1 -0
  41. package/build/error/AskarStoreExportUnsupportedError.d.mts +13 -0
  42. package/build/error/AskarStoreExportUnsupportedError.d.mts.map +1 -0
  43. package/build/error/AskarStoreExportUnsupportedError.mjs +12 -0
  44. package/build/error/AskarStoreExportUnsupportedError.mjs.map +1 -0
  45. package/build/error/AskarStoreImportPathExistsError.d.mts +13 -0
  46. package/build/error/AskarStoreImportPathExistsError.d.mts.map +1 -0
  47. package/build/error/AskarStoreImportPathExistsError.mjs +12 -0
  48. package/build/error/AskarStoreImportPathExistsError.mjs.map +1 -0
  49. package/build/error/AskarStoreInvalidKeyError.d.mts +13 -0
  50. package/build/error/AskarStoreInvalidKeyError.d.mts.map +1 -0
  51. package/build/error/AskarStoreInvalidKeyError.mjs +12 -0
  52. package/build/error/AskarStoreInvalidKeyError.mjs.map +1 -0
  53. package/build/error/AskarStoreNotFoundError.d.mts +13 -0
  54. package/build/error/AskarStoreNotFoundError.d.mts.map +1 -0
  55. package/build/error/AskarStoreNotFoundError.mjs +12 -0
  56. package/build/error/AskarStoreNotFoundError.mjs.map +1 -0
  57. package/build/error/index.d.mts +8 -0
  58. package/build/error/index.mjs +8 -0
  59. package/build/index.d.mts +19 -0
  60. package/build/index.mjs +19 -0
  61. package/build/kms/AskarKeyManagementService.d.mts +30 -0
  62. package/build/kms/AskarKeyManagementService.d.mts.map +1 -0
  63. package/build/kms/AskarKeyManagementService.mjs +415 -0
  64. package/build/kms/AskarKeyManagementService.mjs.map +1 -0
  65. package/build/kms/crypto/decrypt.mjs +21 -0
  66. package/build/kms/crypto/decrypt.mjs.map +1 -0
  67. package/build/kms/crypto/deriveKey.mjs +87 -0
  68. package/build/kms/crypto/deriveKey.mjs.map +1 -0
  69. package/build/kms/crypto/encrypt.mjs +24 -0
  70. package/build/kms/crypto/encrypt.mjs.map +1 -0
  71. package/build/kms/crypto/randomBytes.mjs +19 -0
  72. package/build/kms/crypto/randomBytes.mjs.map +1 -0
  73. package/build/storage/AskarStorageService.d.mts +34 -0
  74. package/build/storage/AskarStorageService.d.mts.map +1 -0
  75. package/build/storage/AskarStorageService.mjs +169 -0
  76. package/build/storage/AskarStorageService.mjs.map +1 -0
  77. package/build/storage/index.d.mts +1 -0
  78. package/build/storage/index.mjs +1 -0
  79. package/build/storage/utils.d.mts +8 -0
  80. package/build/storage/utils.d.mts.map +1 -0
  81. package/build/storage/utils.mjs +58 -0
  82. package/build/storage/utils.mjs.map +1 -0
  83. package/build/tenants.mjs +42 -0
  84. package/build/tenants.mjs.map +1 -0
  85. package/build/utils/askarError.d.mts +1 -0
  86. package/build/utils/askarError.mjs +21 -0
  87. package/build/utils/askarError.mjs.map +1 -0
  88. package/build/utils/askarKeyTypes.d.mts +2 -0
  89. package/build/utils/askarKeyTypes.mjs +25 -0
  90. package/build/utils/askarKeyTypes.mjs.map +1 -0
  91. package/build/utils/askarStoreConfig.d.mts +2 -0
  92. package/build/utils/askarStoreConfig.mjs +47 -0
  93. package/build/utils/askarStoreConfig.mjs.map +1 -0
  94. package/build/utils/index.d.mts +4 -0
  95. package/build/utils/index.mjs +4 -0
  96. package/build/utils/transformPrivateKey.d.mts +73 -0
  97. package/build/utils/transformPrivateKey.d.mts.map +1 -0
  98. package/build/utils/transformPrivateKey.mjs +73 -0
  99. package/build/utils/transformPrivateKey.mjs.map +1 -0
  100. package/package.json +21 -29
  101. package/build/AskarModule.d.ts +0 -9
  102. package/build/AskarModule.js +0 -58
  103. package/build/AskarModule.js.map +0 -1
  104. package/build/AskarModuleConfig.d.ts +0 -68
  105. package/build/AskarModuleConfig.js +0 -33
  106. package/build/AskarModuleConfig.js.map +0 -1
  107. package/build/index.d.ts +0 -4
  108. package/build/index.js +0 -16
  109. package/build/index.js.map +0 -1
  110. package/build/secureEnvironment/index.d.ts +0 -1
  111. package/build/secureEnvironment/index.js +0 -18
  112. package/build/secureEnvironment/index.js.map +0 -1
  113. package/build/secureEnvironment/secureEnvironment.d.ts +0 -5
  114. package/build/secureEnvironment/secureEnvironment.js +0 -7
  115. package/build/secureEnvironment/secureEnvironment.js.map +0 -1
  116. package/build/secureEnvironment/secureEnvironment.native.d.ts +0 -1
  117. package/build/secureEnvironment/secureEnvironment.native.js +0 -14
  118. package/build/secureEnvironment/secureEnvironment.native.js.map +0 -1
  119. package/build/storage/AskarStorageService.d.ts +0 -17
  120. package/build/storage/AskarStorageService.js +0 -141
  121. package/build/storage/AskarStorageService.js.map +0 -1
  122. package/build/storage/index.d.ts +0 -1
  123. package/build/storage/index.js +0 -18
  124. package/build/storage/index.js.map +0 -1
  125. package/build/storage/utils.d.ts +0 -15
  126. package/build/storage/utils.js +0 -109
  127. package/build/storage/utils.js.map +0 -1
  128. package/build/utils/askarError.d.ts +0 -14
  129. package/build/utils/askarError.js +0 -20
  130. package/build/utils/askarError.js.map +0 -1
  131. package/build/utils/askarKeyBackend.d.ts +0 -3
  132. package/build/utils/askarKeyBackend.js +0 -15
  133. package/build/utils/askarKeyBackend.js.map +0 -1
  134. package/build/utils/askarKeyTypes.d.ts +0 -8
  135. package/build/utils/askarKeyTypes.js +0 -46
  136. package/build/utils/askarKeyTypes.js.map +0 -1
  137. package/build/utils/askarWalletConfig.d.ts +0 -14
  138. package/build/utils/askarWalletConfig.js +0 -75
  139. package/build/utils/askarWalletConfig.js.map +0 -1
  140. package/build/utils/assertAskarWallet.d.ts +0 -3
  141. package/build/utils/assertAskarWallet.js +0 -14
  142. package/build/utils/assertAskarWallet.js.map +0 -1
  143. package/build/utils/index.d.ts +0 -3
  144. package/build/utils/index.js +0 -20
  145. package/build/utils/index.js.map +0 -1
  146. package/build/wallet/AskarBaseWallet.d.ts +0 -112
  147. package/build/wallet/AskarBaseWallet.js +0 -540
  148. package/build/wallet/AskarBaseWallet.js.map +0 -1
  149. package/build/wallet/AskarProfileWallet.d.ts +0 -24
  150. package/build/wallet/AskarProfileWallet.js +0 -150
  151. package/build/wallet/AskarProfileWallet.js.map +0 -1
  152. package/build/wallet/AskarWallet.d.ts +0 -58
  153. package/build/wallet/AskarWallet.js +0 -342
  154. package/build/wallet/AskarWallet.js.map +0 -1
  155. package/build/wallet/AskarWalletStorageConfig.d.ts +0 -31
  156. package/build/wallet/AskarWalletStorageConfig.js +0 -11
  157. package/build/wallet/AskarWalletStorageConfig.js.map +0 -1
  158. package/build/wallet/JweEnvelope.d.ts +0 -32
  159. package/build/wallet/JweEnvelope.js +0 -55
  160. package/build/wallet/JweEnvelope.js.map +0 -1
  161. package/build/wallet/didcommV1.d.ts +0 -8
  162. package/build/wallet/didcommV1.js +0 -155
  163. package/build/wallet/didcommV1.js.map +0 -1
  164. package/build/wallet/index.d.ts +0 -3
  165. package/build/wallet/index.js +0 -23
  166. package/build/wallet/index.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ import { AskarError } from "./error/AskarError.mjs";
2
+ import "./error/index.mjs";
3
+ import { getApiForModuleByName } from "@credo-ts/core";
4
+
5
+ //#region src/tenants.ts
6
+ const ASKAR_STORE_CONFIG_METADATA_KEY = "_askar/storeConfig";
7
+ /**
8
+ * Store the aksar store config associated with a context correlation id. If multi-tenancy is not used
9
+ * this method won't do anything as we can just use the store config from the default context. However
10
+ * if multi-tenancy is used, we will store the askar store config in the tenant record metadata so it can
11
+ * be queried when a wallet is opened.
12
+ *
13
+ * This method will only be used when using the DatabasePerWallet database scheme, where each wallet has it's own
14
+ * database and also it's own encryption key.
15
+ */
16
+ async function storeAskarStoreConfigForContextCorrelationId(agentContext, config) {
17
+ const tenantsApi = getApiForModuleByName(agentContext, "TenantsModule");
18
+ if (!tenantsApi || agentContext.isRootAgentContext) throw new AskarError("Tenants module is not registered, make sure to only call this method when the tenants module is enabled");
19
+ const tenantId = agentContext.contextCorrelationId.replace("tenant-", "");
20
+ const tenantRecord = await tenantsApi.getTenantById(tenantId);
21
+ tenantRecord.metadata.set(ASKAR_STORE_CONFIG_METADATA_KEY, config);
22
+ await tenantsApi.updateTenant(tenantRecord);
23
+ }
24
+ async function getAskarStoreConfigForContextCorrelationId(agentContext) {
25
+ const tenantsApi = getApiForModuleByName(agentContext, "TenantsModule");
26
+ if (!tenantsApi || agentContext.isRootAgentContext) throw new AskarError("Tenants module is not registered, make sure to only call this method when the tenants module is enabled");
27
+ const tenantId = agentContext.contextCorrelationId.replace("tenant-", "");
28
+ const tenantRecord = await tenantsApi.getTenantById(tenantId);
29
+ const storeConfig = tenantRecord.metadata.get(ASKAR_STORE_CONFIG_METADATA_KEY);
30
+ if (storeConfig) return storeConfig;
31
+ const { walletConfig } = tenantRecord.config;
32
+ if (walletConfig) {
33
+ tenantRecord.metadata.set(ASKAR_STORE_CONFIG_METADATA_KEY, { key: walletConfig.key });
34
+ await tenantsApi.updateTenant(tenantRecord);
35
+ return { key: walletConfig.key };
36
+ }
37
+ throw new AskarError("Unable to extract askar store from tenant record");
38
+ }
39
+
40
+ //#endregion
41
+ export { getAskarStoreConfigForContextCorrelationId, storeAskarStoreConfigForContextCorrelationId };
42
+ //# sourceMappingURL=tenants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenants.mjs","names":[],"sources":["../src/tenants.ts"],"sourcesContent":["import type { AgentContext } from '@credo-ts/core'\nimport { getApiForModuleByName } from '@credo-ts/core'\nimport type { TenantsModule } from '@credo-ts/tenants'\nimport { AskarError } from './error'\n\nconst ASKAR_STORE_CONFIG_METADATA_KEY = '_askar/storeConfig'\n\ntype TenantRecordAskarStoreConfig = { key: string }\n\n/**\n * Store the aksar store config associated with a context correlation id. If multi-tenancy is not used\n * this method won't do anything as we can just use the store config from the default context. However\n * if multi-tenancy is used, we will store the askar store config in the tenant record metadata so it can\n * be queried when a wallet is opened.\n *\n * This method will only be used when using the DatabasePerWallet database scheme, where each wallet has it's own\n * database and also it's own encryption key.\n */\nexport async function storeAskarStoreConfigForContextCorrelationId(\n agentContext: AgentContext,\n config: TenantRecordAskarStoreConfig\n) {\n // It's kind of hacky, but we add support for the tenants module specifically here to map an actorId to\n // a specific tenant. Otherwise we have to expose /:contextCorrelationId/:actorId in all the public URLs\n // which is of course not so nice.\n const tenantsApi = getApiForModuleByName<TenantsModule>(agentContext, 'TenantsModule')\n if (!tenantsApi || agentContext.isRootAgentContext) {\n throw new AskarError(\n 'Tenants module is not registered, make sure to only call this method when the tenants module is enabled'\n )\n }\n\n // TODO: we duplicate this logic, would be good to keep it in one place\n const tenantId = agentContext.contextCorrelationId.replace('tenant-', '')\n // We don't want to query the tenant record if the current context is the root context\n const tenantRecord = await tenantsApi.getTenantById(tenantId)\n\n tenantRecord.metadata.set<TenantRecordAskarStoreConfig>(ASKAR_STORE_CONFIG_METADATA_KEY, config)\n await tenantsApi.updateTenant(tenantRecord)\n}\n\nexport async function getAskarStoreConfigForContextCorrelationId(\n agentContext: AgentContext\n): Promise<TenantRecordAskarStoreConfig> {\n // It's kind of hacky, but we add support for the tenants module specifically here\n const tenantsApi = getApiForModuleByName<TenantsModule>(agentContext, 'TenantsModule')\n if (!tenantsApi || agentContext.isRootAgentContext) {\n throw new AskarError(\n 'Tenants module is not registered, make sure to only call this method when the tenants module is enabled'\n )\n }\n\n // TODO: we duplicate this logic, would be good to keep it in one place\n const tenantId = agentContext.contextCorrelationId.replace('tenant-', '')\n const tenantRecord = await tenantsApi.getTenantById(tenantId)\n\n const storeConfig = tenantRecord.metadata.get<TenantRecordAskarStoreConfig>(ASKAR_STORE_CONFIG_METADATA_KEY)\n\n if (storeConfig) return storeConfig\n\n const { walletConfig } = tenantRecord.config as {\n walletConfig?: { key: string }\n }\n\n // for backwards compatibility we also look at the walletConfig.key\n if (walletConfig) {\n // Update so we can access it directly next time\n tenantRecord.metadata.set<TenantRecordAskarStoreConfig>(ASKAR_STORE_CONFIG_METADATA_KEY, {\n key: walletConfig.key,\n })\n await tenantsApi.updateTenant(tenantRecord)\n\n return {\n key: walletConfig.key,\n }\n }\n\n throw new AskarError('Unable to extract askar store from tenant record')\n}\n"],"mappings":";;;;;AAKA,MAAM,kCAAkC;;;;;;;;;;AAaxC,eAAsB,6CACpB,cACA,QACA;CAIA,MAAM,aAAa,sBAAqC,cAAc,gBAAgB;AACtF,KAAI,CAAC,cAAc,aAAa,mBAC9B,OAAM,IAAI,WACR,0GACD;CAIH,MAAM,WAAW,aAAa,qBAAqB,QAAQ,WAAW,GAAG;CAEzE,MAAM,eAAe,MAAM,WAAW,cAAc,SAAS;AAE7D,cAAa,SAAS,IAAkC,iCAAiC,OAAO;AAChG,OAAM,WAAW,aAAa,aAAa;;AAG7C,eAAsB,2CACpB,cACuC;CAEvC,MAAM,aAAa,sBAAqC,cAAc,gBAAgB;AACtF,KAAI,CAAC,cAAc,aAAa,mBAC9B,OAAM,IAAI,WACR,0GACD;CAIH,MAAM,WAAW,aAAa,qBAAqB,QAAQ,WAAW,GAAG;CACzE,MAAM,eAAe,MAAM,WAAW,cAAc,SAAS;CAE7D,MAAM,cAAc,aAAa,SAAS,IAAkC,gCAAgC;AAE5G,KAAI,YAAa,QAAO;CAExB,MAAM,EAAE,iBAAiB,aAAa;AAKtC,KAAI,cAAc;AAEhB,eAAa,SAAS,IAAkC,iCAAiC,EACvF,KAAK,aAAa,KACnB,CAAC;AACF,QAAM,WAAW,aAAa,aAAa;AAE3C,SAAO,EACL,KAAK,aAAa,KACnB;;AAGH,OAAM,IAAI,WAAW,mDAAmD"}
@@ -0,0 +1 @@
1
+ import { AskarError } from "@openwallet-foundation/askar-shared";
@@ -0,0 +1,21 @@
1
+ import { AskarError } from "@openwallet-foundation/askar-shared";
2
+
3
+ //#region src/utils/askarError.ts
4
+ let AskarErrorCode = /* @__PURE__ */ function(AskarErrorCode$1) {
5
+ AskarErrorCode$1[AskarErrorCode$1["Success"] = 0] = "Success";
6
+ AskarErrorCode$1[AskarErrorCode$1["Backend"] = 1] = "Backend";
7
+ AskarErrorCode$1[AskarErrorCode$1["Busy"] = 2] = "Busy";
8
+ AskarErrorCode$1[AskarErrorCode$1["Duplicate"] = 3] = "Duplicate";
9
+ AskarErrorCode$1[AskarErrorCode$1["Encryption"] = 4] = "Encryption";
10
+ AskarErrorCode$1[AskarErrorCode$1["Input"] = 5] = "Input";
11
+ AskarErrorCode$1[AskarErrorCode$1["NotFound"] = 6] = "NotFound";
12
+ AskarErrorCode$1[AskarErrorCode$1["Unexpected"] = 7] = "Unexpected";
13
+ AskarErrorCode$1[AskarErrorCode$1["Unsupported"] = 8] = "Unsupported";
14
+ AskarErrorCode$1[AskarErrorCode$1["Custom"] = 100] = "Custom";
15
+ return AskarErrorCode$1;
16
+ }({});
17
+ const isAskarError = (error, askarErrorCode) => error instanceof AskarError && (askarErrorCode === void 0 || error.code === askarErrorCode);
18
+
19
+ //#endregion
20
+ export { AskarErrorCode, isAskarError };
21
+ //# sourceMappingURL=askarError.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askarError.mjs","names":[],"sources":["../../src/utils/askarError.ts"],"sourcesContent":["import { AskarError } from '@openwallet-foundation/askar-shared'\n\nexport enum AskarErrorCode {\n Success = 0,\n Backend = 1,\n Busy = 2,\n Duplicate = 3,\n Encryption = 4,\n Input = 5,\n NotFound = 6,\n Unexpected = 7,\n Unsupported = 8,\n Custom = 100,\n}\n\nexport const isAskarError = (error: Error, askarErrorCode?: AskarErrorCode): error is AskarError =>\n error instanceof AskarError && (askarErrorCode === undefined || error.code === askarErrorCode)\n"],"mappings":";;;AAEA,IAAY,4DAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGF,MAAa,gBAAgB,OAAc,mBACzC,iBAAiB,eAAe,mBAAmB,UAAa,MAAM,SAAS"}
@@ -0,0 +1,2 @@
1
+ import { Kms } from "@credo-ts/core";
2
+ import { KeyAlgorithm } from "@openwallet-foundation/askar-shared";
@@ -0,0 +1,25 @@
1
+ import { Kms } from "@credo-ts/core";
2
+ import { KeyAlgorithm } from "@openwallet-foundation/askar-shared";
3
+
4
+ //#region src/utils/askarKeyTypes.ts
5
+ const jwkCrvToAskarAlg = {
6
+ secp256k1: KeyAlgorithm.EcSecp256k1,
7
+ "P-256": KeyAlgorithm.EcSecp256r1,
8
+ "P-384": KeyAlgorithm.EcSecp384r1,
9
+ X25519: KeyAlgorithm.X25519,
10
+ Ed25519: KeyAlgorithm.Ed25519
11
+ };
12
+ const jwkEncToAskarAlg = {
13
+ "A128CBC-HS256": KeyAlgorithm.AesA128CbcHs256,
14
+ A128GCM: KeyAlgorithm.AesA128Gcm,
15
+ "A256CBC-HS512": KeyAlgorithm.AesA256CbcHs512,
16
+ A256GCM: KeyAlgorithm.AesA256Gcm,
17
+ C20P: KeyAlgorithm.Chacha20C20P,
18
+ XC20P: KeyAlgorithm.Chacha20XC20P,
19
+ A128KW: KeyAlgorithm.AesA128Kw,
20
+ A256KW: KeyAlgorithm.AesA256Kw
21
+ };
22
+
23
+ //#endregion
24
+ export { jwkCrvToAskarAlg, jwkEncToAskarAlg };
25
+ //# sourceMappingURL=askarKeyTypes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askarKeyTypes.mjs","names":["jwkCrvToAskarAlg: Partial<\n Record<Kms.KmsJwkPublicEc['crv'] | Kms.KmsJwkPublicOkp['crv'], KeyAlgorithm | undefined>\n>"],"sources":["../../src/utils/askarKeyTypes.ts"],"sourcesContent":["import { Kms } from '@credo-ts/core'\nimport { KeyAlgorithm } from '@openwallet-foundation/askar-shared'\n\nexport const jwkCrvToAskarAlg: Partial<\n Record<Kms.KmsJwkPublicEc['crv'] | Kms.KmsJwkPublicOkp['crv'], KeyAlgorithm | undefined>\n> = {\n // EC\n secp256k1: KeyAlgorithm.EcSecp256k1,\n 'P-256': KeyAlgorithm.EcSecp256r1,\n 'P-384': KeyAlgorithm.EcSecp384r1,\n\n // OKP\n X25519: KeyAlgorithm.X25519,\n Ed25519: KeyAlgorithm.Ed25519,\n}\n\nexport const jwkEncToAskarAlg = {\n 'A128CBC-HS256': KeyAlgorithm.AesA128CbcHs256,\n A128GCM: KeyAlgorithm.AesA128Gcm,\n 'A256CBC-HS512': KeyAlgorithm.AesA256CbcHs512,\n A256GCM: KeyAlgorithm.AesA256Gcm,\n C20P: KeyAlgorithm.Chacha20C20P,\n XC20P: KeyAlgorithm.Chacha20XC20P,\n\n A128KW: KeyAlgorithm.AesA128Kw,\n A256KW: KeyAlgorithm.AesA256Kw,\n} satisfies Partial<Record<Kms.KnownJwaContentEncryptionAlgorithm | Kms.KnownJwaKeyEncryptionAlgorithm, KeyAlgorithm>>\n"],"mappings":";;;;AAGA,MAAaA,mBAET;CAEF,WAAW,aAAa;CACxB,SAAS,aAAa;CACtB,SAAS,aAAa;CAGtB,QAAQ,aAAa;CACrB,SAAS,aAAa;CACvB;AAED,MAAa,mBAAmB;CAC9B,iBAAiB,aAAa;CAC9B,SAAS,aAAa;CACtB,iBAAiB,aAAa;CAC9B,SAAS,aAAa;CACtB,MAAM,aAAa;CACnB,OAAO,aAAa;CAEpB,QAAQ,aAAa;CACrB,QAAQ,aAAa;CACtB"}
@@ -0,0 +1,2 @@
1
+ import "../AskarModuleConfig.mjs";
2
+ import { StoreKeyMethod } from "@openwallet-foundation/askar-shared";
@@ -0,0 +1,47 @@
1
+ import { AskarError as AskarError$1 } from "../error/AskarError.mjs";
2
+ import "../error/index.mjs";
3
+ import { isAskarPostgresStorageConfig, isAskarSqliteStorageConfig } from "../AskarStorageConfig.mjs";
4
+ import { KdfMethod, StoreKeyMethod } from "@openwallet-foundation/askar-shared";
5
+
6
+ //#region src/utils/askarStoreConfig.ts
7
+ /**
8
+ * Creates an askar wallet URI value based on store config
9
+ * @param credoDataPath framework data path (used in case walletConfig.storage.path is undefined)
10
+ * @returns string containing the askar wallet URI
11
+ */
12
+ const uriFromStoreConfig = (storeConfig, credoDataPath) => {
13
+ let uri = "";
14
+ let path;
15
+ const urlParams = [];
16
+ const database = storeConfig.database ?? { type: "sqlite" };
17
+ if (isAskarSqliteStorageConfig(database)) if (database.config?.inMemory) uri = "sqlite://:memory:";
18
+ else {
19
+ path = database.config?.path ?? `${credoDataPath}/wallet/${storeConfig.id}/sqlite.db`;
20
+ uri = `sqlite://${path}`;
21
+ }
22
+ else if (isAskarPostgresStorageConfig(database)) {
23
+ if (!database.config || !database.credentials) throw new AskarError$1("Invalid storage configuration for postgres wallet");
24
+ if (database.config.connectTimeout !== void 0) urlParams.push(`connect_timeout=${encodeURIComponent(database.config.connectTimeout)}`);
25
+ if (database.config.idleTimeout !== void 0) urlParams.push(`idle_timeout=${encodeURIComponent(database.config.idleTimeout)}`);
26
+ if (database.credentials.adminAccount !== void 0) urlParams.push(`admin_account=${encodeURIComponent(database.credentials.adminAccount)}`);
27
+ if (database.credentials.adminPassword !== void 0) urlParams.push(`admin_password=${encodeURIComponent(database.credentials.adminPassword)}`);
28
+ uri = `postgres://${encodeURIComponent(database.credentials.account)}:${encodeURIComponent(database.credentials.password)}@${database.config.host}/${encodeURIComponent(storeConfig.id)}`;
29
+ } else throw new AskarError$1("Storage type not supported");
30
+ if (database.config?.maxConnections !== void 0) urlParams.push(`max_connections=${encodeURIComponent(database.config.maxConnections)}`);
31
+ if (database.config?.minConnections !== void 0) urlParams.push(`min_connections=${encodeURIComponent(database.config.minConnections)}`);
32
+ if (urlParams.length > 0) uri = `${uri}?${urlParams.join("&")}`;
33
+ return {
34
+ uri,
35
+ path
36
+ };
37
+ };
38
+ function keyDerivationMethodFromStoreConfig(keyDerivationMethod) {
39
+ return new StoreKeyMethod(keyDerivationMethod ?? KdfMethod.Argon2IMod);
40
+ }
41
+ function isSqliteInMemoryUri(uri) {
42
+ return uri.startsWith("sqlite://:memory:");
43
+ }
44
+
45
+ //#endregion
46
+ export { isSqliteInMemoryUri, keyDerivationMethodFromStoreConfig, uriFromStoreConfig };
47
+ //# sourceMappingURL=askarStoreConfig.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"askarStoreConfig.mjs","names":["path: string | undefined","AskarError"],"sources":["../../src/utils/askarStoreConfig.ts"],"sourcesContent":["import { KdfMethod, StoreKeyMethod } from '@openwallet-foundation/askar-shared'\nimport type { AskarModuleConfigStoreOptions } from '../AskarModuleConfig'\n\nimport { isAskarPostgresStorageConfig, isAskarSqliteStorageConfig } from '../AskarStorageConfig'\nimport { AskarError } from '../error'\n\n/**\n * Creates an askar wallet URI value based on store config\n * @param credoDataPath framework data path (used in case walletConfig.storage.path is undefined)\n * @returns string containing the askar wallet URI\n */\nexport const uriFromStoreConfig = (\n storeConfig: AskarModuleConfigStoreOptions,\n credoDataPath: string\n): { uri: string; path?: string } => {\n let uri = ''\n let path: string | undefined\n\n const urlParams = []\n\n const database = storeConfig.database ?? { type: 'sqlite' }\n if (isAskarSqliteStorageConfig(database)) {\n if (database.config?.inMemory) {\n uri = 'sqlite://:memory:'\n } else {\n path = database.config?.path ?? `${credoDataPath}/wallet/${storeConfig.id}/sqlite.db`\n uri = `sqlite://${path}`\n }\n } else if (isAskarPostgresStorageConfig(database)) {\n if (!database.config || !database.credentials) {\n throw new AskarError('Invalid storage configuration for postgres wallet')\n }\n\n if (database.config.connectTimeout !== undefined) {\n urlParams.push(`connect_timeout=${encodeURIComponent(database.config.connectTimeout)}`)\n }\n if (database.config.idleTimeout !== undefined) {\n urlParams.push(`idle_timeout=${encodeURIComponent(database.config.idleTimeout)}`)\n }\n if (database.credentials.adminAccount !== undefined) {\n urlParams.push(`admin_account=${encodeURIComponent(database.credentials.adminAccount)}`)\n }\n if (database.credentials.adminPassword !== undefined) {\n urlParams.push(`admin_password=${encodeURIComponent(database.credentials.adminPassword)}`)\n }\n\n uri = `postgres://${encodeURIComponent(database.credentials.account)}:${encodeURIComponent(\n database.credentials.password\n )}@${database.config.host}/${encodeURIComponent(storeConfig.id)}`\n } else {\n throw new AskarError('Storage type not supported')\n }\n\n // Common config options\n if (database.config?.maxConnections !== undefined) {\n urlParams.push(`max_connections=${encodeURIComponent(database.config.maxConnections)}`)\n }\n if (database.config?.minConnections !== undefined) {\n urlParams.push(`min_connections=${encodeURIComponent(database.config.minConnections)}`)\n }\n\n if (urlParams.length > 0) {\n uri = `${uri}?${urlParams.join('&')}`\n }\n\n return { uri, path }\n}\n\nexport function keyDerivationMethodFromStoreConfig(\n keyDerivationMethod?: AskarModuleConfigStoreOptions['keyDerivationMethod']\n) {\n return new StoreKeyMethod(\n (keyDerivationMethod ?? KdfMethod.Argon2IMod) satisfies `${KdfMethod}` | KdfMethod as KdfMethod\n )\n}\n\nexport function isSqliteInMemoryUri(uri: string) {\n return uri.startsWith('sqlite://:memory:')\n}\n\nexport function isSqliteFileUri(uri: string) {\n return uri.startsWith('sqlite://') && !isSqliteInMemoryUri(uri)\n}\n\nexport function isPostgresUri(uri: string) {\n return uri.startsWith('postgres://')\n}\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,sBACX,aACA,kBACmC;CACnC,IAAI,MAAM;CACV,IAAIA;CAEJ,MAAM,YAAY,EAAE;CAEpB,MAAM,WAAW,YAAY,YAAY,EAAE,MAAM,UAAU;AAC3D,KAAI,2BAA2B,SAAS,CACtC,KAAI,SAAS,QAAQ,SACnB,OAAM;MACD;AACL,SAAO,SAAS,QAAQ,QAAQ,GAAG,cAAc,UAAU,YAAY,GAAG;AAC1E,QAAM,YAAY;;UAEX,6BAA6B,SAAS,EAAE;AACjD,MAAI,CAAC,SAAS,UAAU,CAAC,SAAS,YAChC,OAAM,IAAIC,aAAW,oDAAoD;AAG3E,MAAI,SAAS,OAAO,mBAAmB,OACrC,WAAU,KAAK,mBAAmB,mBAAmB,SAAS,OAAO,eAAe,GAAG;AAEzF,MAAI,SAAS,OAAO,gBAAgB,OAClC,WAAU,KAAK,gBAAgB,mBAAmB,SAAS,OAAO,YAAY,GAAG;AAEnF,MAAI,SAAS,YAAY,iBAAiB,OACxC,WAAU,KAAK,iBAAiB,mBAAmB,SAAS,YAAY,aAAa,GAAG;AAE1F,MAAI,SAAS,YAAY,kBAAkB,OACzC,WAAU,KAAK,kBAAkB,mBAAmB,SAAS,YAAY,cAAc,GAAG;AAG5F,QAAM,cAAc,mBAAmB,SAAS,YAAY,QAAQ,CAAC,GAAG,mBACtE,SAAS,YAAY,SACtB,CAAC,GAAG,SAAS,OAAO,KAAK,GAAG,mBAAmB,YAAY,GAAG;OAE/D,OAAM,IAAIA,aAAW,6BAA6B;AAIpD,KAAI,SAAS,QAAQ,mBAAmB,OACtC,WAAU,KAAK,mBAAmB,mBAAmB,SAAS,OAAO,eAAe,GAAG;AAEzF,KAAI,SAAS,QAAQ,mBAAmB,OACtC,WAAU,KAAK,mBAAmB,mBAAmB,SAAS,OAAO,eAAe,GAAG;AAGzF,KAAI,UAAU,SAAS,EACrB,OAAM,GAAG,IAAI,GAAG,UAAU,KAAK,IAAI;AAGrC,QAAO;EAAE;EAAK;EAAM;;AAGtB,SAAgB,mCACd,qBACA;AACA,QAAO,IAAI,eACR,uBAAuB,UAAU,WACnC;;AAGH,SAAgB,oBAAoB,KAAa;AAC/C,QAAO,IAAI,WAAW,oBAAoB"}
@@ -0,0 +1,4 @@
1
+ import "./askarError.mjs";
2
+ import "./askarKeyTypes.mjs";
3
+ import "./askarStoreConfig.mjs";
4
+ import { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk } from "./transformPrivateKey.mjs";
@@ -0,0 +1,4 @@
1
+ import { AskarErrorCode, isAskarError } from "./askarError.mjs";
2
+ import { jwkCrvToAskarAlg, jwkEncToAskarAlg } from "./askarKeyTypes.mjs";
3
+ import { isSqliteInMemoryUri, keyDerivationMethodFromStoreConfig, uriFromStoreConfig } from "./askarStoreConfig.mjs";
4
+ import { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk } from "./transformPrivateKey.mjs";
@@ -0,0 +1,73 @@
1
+ import { AnyUint8Array, Kms } from "@credo-ts/core";
2
+
3
+ //#region src/utils/transformPrivateKey.d.ts
4
+
5
+ /**
6
+ * Method to transform private key bytes into a private jwk,
7
+ * which allows the key to be imported in the KMS API.
8
+ *
9
+ * This method is to still allow private keys that were
10
+ * used before the KMS API was introduced, to be used and imported.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { transformPrivateKeyToPrivateJwk } from '@credo-ts/askar'
15
+ *
16
+ * const { privateJwk } = transformPrivateKeyToPrivateJwk({
17
+ * type: {
18
+ * kty: 'EC',
19
+ * crv: 'P-256',
20
+ * },
21
+ * privateKey: TypedArrayEncoder.fromString('00000000000000000000000000000My1')
22
+ * })
23
+ *
24
+ * const { keyId } = await agent.kms.importKey({
25
+ * privateJwk
26
+ * })
27
+ * ```
28
+ */
29
+ declare function transformPrivateKeyToPrivateJwk<Type extends Kms.KmsCreateKeyTypeOkp | Kms.KmsCreateKeyTypeEc>({
30
+ type,
31
+ privateKey
32
+ }: {
33
+ type: Type;
34
+ privateKey: AnyUint8Array;
35
+ }): {
36
+ privateJwk: Kms.KmsJwkPrivateFromKmsJwkPublic<Kms.KmsJwkPublicFromCreateType<Type>>;
37
+ };
38
+ /**
39
+ * Method to transform seed into a private jwk,
40
+ * which allows the key to be imported in the KMS API.
41
+ *
42
+ * This method is to still allow seeds that were
43
+ * used before the KMS API was introduced, to be used and imported.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { transformSeedToPrivateJwk } from '@credo-ts/askar'
48
+ *
49
+ * const { privateJwk } = transformSeedToPrivateJwk({
50
+ * type: {
51
+ * kty: 'EC',
52
+ * crv: 'P-256',
53
+ * },
54
+ * seed: TypedArrayEncoder.fromString('00000000000000000000000000000My1')
55
+ * })
56
+ *
57
+ * const { keyId } = await agent.kms.importKey({
58
+ * privateJwk
59
+ * })
60
+ * ```
61
+ */
62
+ declare function transformSeedToPrivateJwk<Type extends Kms.KmsCreateKeyTypeOkp | Kms.KmsCreateKeyTypeEc>({
63
+ type,
64
+ seed
65
+ }: {
66
+ type: Type;
67
+ seed: AnyUint8Array;
68
+ }): {
69
+ privateJwk: Kms.KmsJwkPrivateFromKmsJwkPublic<Kms.KmsJwkPublicFromCreateType<Type>>;
70
+ };
71
+ //#endregion
72
+ export { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk };
73
+ //# sourceMappingURL=transformPrivateKey.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformPrivateKey.d.mts","names":[],"sources":["../../src/utils/transformPrivateKey.ts"],"sourcesContent":[],"mappings":";;;;;;AA4BA;;;;;;;;;;;AA+CA;;;;;;;;;;;iBA/CgB,6CAA6C,GAAA,CAAI,sBAAsB,GAAA,CAAI;;;;QAInF;cACM;;cACI,GAAA,CAAI,8BAA8B,GAAA,CAAI,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCnE,uCAAuC,GAAA,CAAI,sBAAsB,GAAA,CAAI;;;;QAI7E;QACA;;cACU,GAAA,CAAI,8BAA8B,GAAA,CAAI,2BAA2B"}
@@ -0,0 +1,73 @@
1
+ import { jwkCrvToAskarAlg } from "./askarKeyTypes.mjs";
2
+ import { CredoError, Kms } from "@credo-ts/core";
3
+ import { Key } from "@openwallet-foundation/askar-shared";
4
+
5
+ //#region src/utils/transformPrivateKey.ts
6
+ /**
7
+ * Method to transform private key bytes into a private jwk,
8
+ * which allows the key to be imported in the KMS API.
9
+ *
10
+ * This method is to still allow private keys that were
11
+ * used before the KMS API was introduced, to be used and imported.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { transformPrivateKeyToPrivateJwk } from '@credo-ts/askar'
16
+ *
17
+ * const { privateJwk } = transformPrivateKeyToPrivateJwk({
18
+ * type: {
19
+ * kty: 'EC',
20
+ * crv: 'P-256',
21
+ * },
22
+ * privateKey: TypedArrayEncoder.fromString('00000000000000000000000000000My1')
23
+ * })
24
+ *
25
+ * const { keyId } = await agent.kms.importKey({
26
+ * privateJwk
27
+ * })
28
+ * ```
29
+ */
30
+ function transformPrivateKeyToPrivateJwk({ type, privateKey }) {
31
+ const askarAlgorithm = jwkCrvToAskarAlg[type.crv];
32
+ if (!askarAlgorithm) throw new CredoError(`kty '${type.kty}' with crv '${type.crv}' not supported by Askar`);
33
+ return { privateJwk: Key.fromSecretBytes({
34
+ algorithm: askarAlgorithm,
35
+ secretKey: privateKey
36
+ }).jwkSecret };
37
+ }
38
+ /**
39
+ * Method to transform seed into a private jwk,
40
+ * which allows the key to be imported in the KMS API.
41
+ *
42
+ * This method is to still allow seeds that were
43
+ * used before the KMS API was introduced, to be used and imported.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { transformSeedToPrivateJwk } from '@credo-ts/askar'
48
+ *
49
+ * const { privateJwk } = transformSeedToPrivateJwk({
50
+ * type: {
51
+ * kty: 'EC',
52
+ * crv: 'P-256',
53
+ * },
54
+ * seed: TypedArrayEncoder.fromString('00000000000000000000000000000My1')
55
+ * })
56
+ *
57
+ * const { keyId } = await agent.kms.importKey({
58
+ * privateJwk
59
+ * })
60
+ * ```
61
+ */
62
+ function transformSeedToPrivateJwk({ type, seed }) {
63
+ const askarAlgorithm = jwkCrvToAskarAlg[type.crv];
64
+ if (!askarAlgorithm) throw new CredoError(`kty '${type.kty}' with crv '${type.crv}' not supported by Askar`);
65
+ return { privateJwk: Key.fromSeed({
66
+ algorithm: askarAlgorithm,
67
+ seed
68
+ }).jwkSecret };
69
+ }
70
+
71
+ //#endregion
72
+ export { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk };
73
+ //# sourceMappingURL=transformPrivateKey.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformPrivateKey.mjs","names":["AskarKey"],"sources":["../../src/utils/transformPrivateKey.ts"],"sourcesContent":["import { type AnyUint8Array, CredoError, Kms } from '@credo-ts/core'\nimport { Key as AskarKey } from '@openwallet-foundation/askar-shared'\nimport { jwkCrvToAskarAlg } from './askarKeyTypes'\n\n/**\n * Method to transform private key bytes into a private jwk,\n * which allows the key to be imported in the KMS API.\n *\n * This method is to still allow private keys that were\n * used before the KMS API was introduced, to be used and imported.\n *\n * @example\n * ```ts\n * import { transformPrivateKeyToPrivateJwk } from '@credo-ts/askar'\n *\n * const { privateJwk } = transformPrivateKeyToPrivateJwk({\n * type: {\n * kty: 'EC',\n * crv: 'P-256',\n * },\n * privateKey: TypedArrayEncoder.fromString('00000000000000000000000000000My1')\n * })\n *\n * const { keyId } = await agent.kms.importKey({\n * privateJwk\n * })\n * ```\n */\nexport function transformPrivateKeyToPrivateJwk<Type extends Kms.KmsCreateKeyTypeOkp | Kms.KmsCreateKeyTypeEc>({\n type,\n privateKey,\n}: {\n type: Type\n privateKey: AnyUint8Array\n}): { privateJwk: Kms.KmsJwkPrivateFromKmsJwkPublic<Kms.KmsJwkPublicFromCreateType<Type>> } {\n const askarAlgorithm = jwkCrvToAskarAlg[type.crv]\n if (!askarAlgorithm) {\n throw new CredoError(`kty '${type.kty}' with crv '${type.crv}' not supported by Askar`)\n }\n\n const privateJwk = AskarKey.fromSecretBytes({\n algorithm: askarAlgorithm,\n secretKey: privateKey,\n }).jwkSecret\n\n return {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n privateJwk: privateJwk as any,\n }\n}\n\n/**\n * Method to transform seed into a private jwk,\n * which allows the key to be imported in the KMS API.\n *\n * This method is to still allow seeds that were\n * used before the KMS API was introduced, to be used and imported.\n *\n * @example\n * ```ts\n * import { transformSeedToPrivateJwk } from '@credo-ts/askar'\n *\n * const { privateJwk } = transformSeedToPrivateJwk({\n * type: {\n * kty: 'EC',\n * crv: 'P-256',\n * },\n * seed: TypedArrayEncoder.fromString('00000000000000000000000000000My1')\n * })\n *\n * const { keyId } = await agent.kms.importKey({\n * privateJwk\n * })\n * ```\n */\nexport function transformSeedToPrivateJwk<Type extends Kms.KmsCreateKeyTypeOkp | Kms.KmsCreateKeyTypeEc>({\n type,\n seed,\n}: {\n type: Type\n seed: AnyUint8Array\n}): { privateJwk: Kms.KmsJwkPrivateFromKmsJwkPublic<Kms.KmsJwkPublicFromCreateType<Type>> } {\n const askarAlgorithm = jwkCrvToAskarAlg[type.crv]\n if (!askarAlgorithm) {\n throw new CredoError(`kty '${type.kty}' with crv '${type.crv}' not supported by Askar`)\n }\n\n const privateJwk = AskarKey.fromSeed({\n algorithm: askarAlgorithm,\n seed,\n }).jwkSecret\n\n return {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n privateJwk: privateJwk as any,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,gCAA+F,EAC7G,MACA,cAI0F;CAC1F,MAAM,iBAAiB,iBAAiB,KAAK;AAC7C,KAAI,CAAC,eACH,OAAM,IAAI,WAAW,QAAQ,KAAK,IAAI,cAAc,KAAK,IAAI,0BAA0B;AAQzF,QAAO,EAEL,YAPiBA,IAAS,gBAAgB;EAC1C,WAAW;EACX,WAAW;EACZ,CAAC,CAAC,WAKF;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BH,SAAgB,0BAAyF,EACvG,MACA,QAI0F;CAC1F,MAAM,iBAAiB,iBAAiB,KAAK;AAC7C,KAAI,CAAC,eACH,OAAM,IAAI,WAAW,QAAQ,KAAK,IAAI,cAAc,KAAK,IAAI,0BAA0B;AAQzF,QAAO,EAEL,YAPiBA,IAAS,SAAS;EACnC,WAAW;EACX;EACD,CAAC,CAAC,WAKF"}
package/package.json CHANGED
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "@credo-ts/askar",
3
- "main": "build/index",
4
- "types": "build/index",
5
- "version": "0.6.1-pr-2091-20241119140918",
3
+ "exports": {
4
+ ".": "./build/index.mjs",
5
+ "./package.json": "./package.json"
6
+ },
7
+ "version": "0.6.1",
6
8
  "files": [
7
9
  "build"
8
10
  ],
@@ -17,37 +19,27 @@
17
19
  "directory": "packages/askar"
18
20
  },
19
21
  "dependencies": {
20
- "bn.js": "^5.2.1",
21
22
  "class-transformer": "0.5.1",
22
- "class-validator": "0.14.1",
23
- "rxjs": "^7.8.0",
24
- "tsyringe": "^4.8.0",
25
- "@credo-ts/core": "0.6.1-pr-2091-20241119140918"
23
+ "class-validator": "^0.14.1",
24
+ "rxjs": "^7.8.2",
25
+ "tsyringe": "^4.10.0",
26
+ "@credo-ts/core": "0.6.1"
26
27
  },
27
28
  "devDependencies": {
28
- "@animo-id/expo-secure-environment": "^0.0.1-alpha.0",
29
- "@hyperledger/aries-askar-nodejs": "^0.2.3",
30
- "@hyperledger/aries-askar-shared": "^0.2.3",
31
- "@types/bn.js": "^5.1.0",
32
- "@types/ref-array-di": "^1.2.6",
33
- "@types/ref-struct-di": "^1.1.10",
34
- "reflect-metadata": "^0.1.13",
35
- "rimraf": "^4.4.0",
36
- "typescript": "~5.5.2"
29
+ "@openwallet-foundation/askar-nodejs": "^0.4.3",
30
+ "@openwallet-foundation/askar-shared": "^0.4.3",
31
+ "@types/ref-array-di": "^1.2.8",
32
+ "@types/ref-struct-di": "^1.1.12",
33
+ "reflect-metadata": "0.2.2",
34
+ "typescript": "~5.9.3",
35
+ "@credo-ts/tenants": "0.6.1"
37
36
  },
38
37
  "peerDependencies": {
39
- "@hyperledger/aries-askar-shared": "^0.2.3",
40
- "@animo-id/expo-secure-environment": "^0.0.1-alpha.0"
41
- },
42
- "peerDependenciesMeta": {
43
- "@animo-id/expo-secure-environment": {
44
- "optional": true
45
- }
38
+ "@openwallet-foundation/askar-shared": "^0.4.3"
46
39
  },
47
40
  "scripts": {
48
- "build": "pnpm run clean && pnpm run compile",
49
- "clean": "rimraf ./build",
50
- "compile": "tsc -p tsconfig.build.json",
51
- "test": "jest"
52
- }
41
+ "build": "tsdown --config-loader unconfig"
42
+ },
43
+ "types": "./build/index.d.mts",
44
+ "module": "./build/index.mjs"
53
45
  }
@@ -1,9 +0,0 @@
1
- import type { AskarModuleConfigOptions } from './AskarModuleConfig';
2
- import type { AgentContext, DependencyManager, Module } from '@credo-ts/core';
3
- import { AskarModuleConfig } from './AskarModuleConfig';
4
- export declare class AskarModule implements Module {
5
- readonly config: AskarModuleConfig;
6
- constructor(config: AskarModuleConfigOptions);
7
- register(dependencyManager: DependencyManager): void;
8
- initialize(agentContext: AgentContext): Promise<void>;
9
- }
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AskarModule = void 0;
4
- const core_1 = require("@credo-ts/core");
5
- const aries_askar_shared_1 = require("@hyperledger/aries-askar-shared");
6
- const AskarModuleConfig_1 = require("./AskarModuleConfig");
7
- const storage_1 = require("./storage");
8
- const assertAskarWallet_1 = require("./utils/assertAskarWallet");
9
- const wallet_1 = require("./wallet");
10
- class AskarModule {
11
- constructor(config) {
12
- this.config = new AskarModuleConfig_1.AskarModuleConfig(config);
13
- }
14
- register(dependencyManager) {
15
- dependencyManager.registerInstance(AskarModuleConfig_1.AskarModuleConfig, this.config);
16
- if (dependencyManager.isRegistered(core_1.InjectionSymbols.Wallet)) {
17
- throw new core_1.CredoError('There is an instance of Wallet already registered');
18
- }
19
- else {
20
- dependencyManager.registerContextScoped(core_1.InjectionSymbols.Wallet, wallet_1.AskarWallet);
21
- // If the multiWalletDatabaseScheme is set to ProfilePerWallet, we want to register the AskarProfileWallet
22
- if (this.config.multiWalletDatabaseScheme === AskarModuleConfig_1.AskarMultiWalletDatabaseScheme.ProfilePerWallet) {
23
- dependencyManager.registerContextScoped(wallet_1.AskarProfileWallet);
24
- }
25
- }
26
- if (dependencyManager.isRegistered(core_1.InjectionSymbols.StorageService)) {
27
- throw new core_1.CredoError('There is an instance of StorageService already registered');
28
- }
29
- else {
30
- dependencyManager.registerSingleton(core_1.InjectionSymbols.StorageService, storage_1.AskarStorageService);
31
- }
32
- }
33
- async initialize(agentContext) {
34
- // We MUST use an askar wallet here
35
- (0, assertAskarWallet_1.assertAskarWallet)(agentContext.wallet);
36
- const wallet = agentContext.wallet;
37
- // Register the Askar store instance on the dependency manager
38
- // This allows it to be re-used for tenants
39
- agentContext.dependencyManager.registerInstance(aries_askar_shared_1.Store, agentContext.wallet.store);
40
- // If the multiWalletDatabaseScheme is set to ProfilePerWallet, we want to register the AskarProfileWallet
41
- // and return that as the wallet for all tenants, but not for the main agent, that should use the AskarWallet
42
- if (this.config.multiWalletDatabaseScheme === AskarModuleConfig_1.AskarMultiWalletDatabaseScheme.ProfilePerWallet) {
43
- agentContext.dependencyManager.container.register(core_1.InjectionSymbols.Wallet, {
44
- useFactory: (container) => {
45
- // If the container is the same as the root dependency manager container
46
- // it means we are in the main agent, and we should use the root wallet
47
- if (container === agentContext.dependencyManager.container) {
48
- return wallet;
49
- }
50
- // Otherwise we want to return the AskarProfileWallet
51
- return container.resolve(wallet_1.AskarProfileWallet);
52
- },
53
- });
54
- }
55
- }
56
- }
57
- exports.AskarModule = AskarModule;
58
- //# sourceMappingURL=AskarModule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AskarModule.js","sourceRoot":"","sources":["../src/AskarModule.ts"],"names":[],"mappings":";;;AAGA,yCAA6D;AAC7D,wEAAuD;AAEvD,2DAAuF;AACvF,uCAA+C;AAC/C,iEAA6D;AAC7D,qCAA0D;AAE1D,MAAa,WAAW;IAGtB,YAAmB,MAAgC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,qCAAiB,CAAC,MAAM,CAAC,CAAA;IAC7C,CAAC;IAEM,QAAQ,CAAC,iBAAoC;QAClD,iBAAiB,CAAC,gBAAgB,CAAC,qCAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAElE,IAAI,iBAAiB,CAAC,YAAY,CAAC,uBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,iBAAU,CAAC,mDAAmD,CAAC,CAAA;QAC3E,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,qBAAqB,CAAC,uBAAgB,CAAC,MAAM,EAAE,oBAAW,CAAC,CAAA;YAE7E,0GAA0G;YAC1G,IAAI,IAAI,CAAC,MAAM,CAAC,yBAAyB,KAAK,kDAA8B,CAAC,gBAAgB,EAAE,CAAC;gBAC9F,iBAAiB,CAAC,qBAAqB,CAAC,2BAAkB,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;QAED,IAAI,iBAAiB,CAAC,YAAY,CAAC,uBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,iBAAU,CAAC,2DAA2D,CAAC,CAAA;QACnF,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,iBAAiB,CAAC,uBAAgB,CAAC,cAAc,EAAE,6BAAmB,CAAC,CAAA;QAC3F,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,YAA0B;QAChD,mCAAmC;QACnC,IAAA,qCAAiB,EAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAEtC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAA;QAElC,8DAA8D;QAC9D,2CAA2C;QAC3C,YAAY,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,0BAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEjF,0GAA0G;QAC1G,6GAA6G;QAC7G,IAAI,IAAI,CAAC,MAAM,CAAC,yBAAyB,KAAK,kDAA8B,CAAC,gBAAgB,EAAE,CAAC;YAC9F,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,uBAAgB,CAAC,MAAM,EAAE;gBACzE,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE;oBACxB,wEAAwE;oBACxE,uEAAuE;oBACvE,IAAI,SAAS,KAAK,YAAY,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;wBAC3D,OAAO,MAAM,CAAA;oBACf,CAAC;oBAED,qDAAqD;oBACrD,OAAO,SAAS,CAAC,OAAO,CAAC,2BAAkB,CAAC,CAAA;gBAC9C,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF;AAvDD,kCAuDC"}
@@ -1,68 +0,0 @@
1
- import type { AriesAskar } from '@hyperledger/aries-askar-shared';
2
- export declare enum AskarMultiWalletDatabaseScheme {
3
- /**
4
- * Each wallet get its own database and uses a separate store.
5
- */
6
- DatabasePerWallet = "DatabasePerWallet",
7
- /**
8
- * All wallets are stored in a single database, but each wallet uses a separate profile.
9
- */
10
- ProfilePerWallet = "ProfilePerWallet"
11
- }
12
- export interface AskarModuleConfigOptions {
13
- /**
14
- *
15
- * ## Node.JS
16
- *
17
- * ```ts
18
- * import { ariesAskar } from '@hyperledger/aries-askar-nodejs'
19
- *
20
- * const agent = new Agent({
21
- * config: {},
22
- * dependencies: agentDependencies,
23
- * modules: {
24
- * ariesAskar: new AskarModule({
25
- * ariesAskar,
26
- * })
27
- * }
28
- * })
29
- * ```
30
- *
31
- * ## React Native
32
- *
33
- * ```ts
34
- * import { ariesAskar } from '@hyperledger/aries-askar-react-native'
35
- *
36
- * const agent = new Agent({
37
- * config: {},
38
- * dependencies: agentDependencies,
39
- * modules: {
40
- * ariesAskar: new AskarModule({
41
- * ariesAskar,
42
- * })
43
- * }
44
- * })
45
- * ```
46
- */
47
- ariesAskar: AriesAskar;
48
- /**
49
- * Determine the strategy for storing wallets if multiple wallets are used in a single agent.
50
- * This is mostly the case in multi-tenancy, and determines whether each tenant will get a separate
51
- * database, or whether all wallets will be stored in a single database, using a different profile
52
- * for each wallet.
53
- *
54
- * @default {@link AskarMultiWalletDatabaseScheme.DatabasePerWallet} (for backwards compatibility)
55
- */
56
- multiWalletDatabaseScheme?: AskarMultiWalletDatabaseScheme;
57
- }
58
- /**
59
- * @public
60
- */
61
- export declare class AskarModuleConfig {
62
- private options;
63
- constructor(options: AskarModuleConfigOptions);
64
- /** See {@link AskarModuleConfigOptions.ariesAskar} */
65
- get ariesAskar(): AriesAskar;
66
- /** See {@link AskarModuleConfigOptions.multiWalletDatabaseScheme} */
67
- get multiWalletDatabaseScheme(): AskarMultiWalletDatabaseScheme;
68
- }
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AskarModuleConfig = exports.AskarMultiWalletDatabaseScheme = void 0;
4
- var AskarMultiWalletDatabaseScheme;
5
- (function (AskarMultiWalletDatabaseScheme) {
6
- /**
7
- * Each wallet get its own database and uses a separate store.
8
- */
9
- AskarMultiWalletDatabaseScheme["DatabasePerWallet"] = "DatabasePerWallet";
10
- /**
11
- * All wallets are stored in a single database, but each wallet uses a separate profile.
12
- */
13
- AskarMultiWalletDatabaseScheme["ProfilePerWallet"] = "ProfilePerWallet";
14
- })(AskarMultiWalletDatabaseScheme || (exports.AskarMultiWalletDatabaseScheme = AskarMultiWalletDatabaseScheme = {}));
15
- /**
16
- * @public
17
- */
18
- class AskarModuleConfig {
19
- constructor(options) {
20
- this.options = options;
21
- }
22
- /** See {@link AskarModuleConfigOptions.ariesAskar} */
23
- get ariesAskar() {
24
- return this.options.ariesAskar;
25
- }
26
- /** See {@link AskarModuleConfigOptions.multiWalletDatabaseScheme} */
27
- get multiWalletDatabaseScheme() {
28
- var _a;
29
- return (_a = this.options.multiWalletDatabaseScheme) !== null && _a !== void 0 ? _a : AskarMultiWalletDatabaseScheme.DatabasePerWallet;
30
- }
31
- }
32
- exports.AskarModuleConfig = AskarModuleConfig;
33
- //# sourceMappingURL=AskarModuleConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AskarModuleConfig.js","sourceRoot":"","sources":["../src/AskarModuleConfig.ts"],"names":[],"mappings":";;;AAEA,IAAY,8BAUX;AAVD,WAAY,8BAA8B;IACxC;;OAEG;IACH,yEAAuC,CAAA;IAEvC;;OAEG;IACH,uEAAqC,CAAA;AACvC,CAAC,EAVW,8BAA8B,8CAA9B,8BAA8B,QAUzC;AAkDD;;GAEG;AACH,MAAa,iBAAiB;IAG5B,YAAmB,OAAiC;QAClD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,sDAAsD;IACtD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAA;IAChC,CAAC;IAED,qEAAqE;IACrE,IAAW,yBAAyB;;QAClC,OAAO,MAAA,IAAI,CAAC,OAAO,CAAC,yBAAyB,mCAAI,8BAA8B,CAAC,iBAAiB,CAAA;IACnG,CAAC;CACF;AAhBD,8CAgBC"}
package/build/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export { AskarWallet, AskarWalletPostgresStorageConfig, AskarWalletPostgresConfig, AskarWalletPostgresCredentials, AskarProfileWallet, } from './wallet';
2
- export { AskarStorageService } from './storage';
3
- export { AskarModule } from './AskarModule';
4
- export { AskarModuleConfigOptions, AskarMultiWalletDatabaseScheme } from './AskarModuleConfig';
package/build/index.js DELETED
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AskarMultiWalletDatabaseScheme = exports.AskarModule = exports.AskarStorageService = exports.AskarProfileWallet = exports.AskarWallet = void 0;
4
- // Wallet
5
- var wallet_1 = require("./wallet");
6
- Object.defineProperty(exports, "AskarWallet", { enumerable: true, get: function () { return wallet_1.AskarWallet; } });
7
- Object.defineProperty(exports, "AskarProfileWallet", { enumerable: true, get: function () { return wallet_1.AskarProfileWallet; } });
8
- // Storage
9
- var storage_1 = require("./storage");
10
- Object.defineProperty(exports, "AskarStorageService", { enumerable: true, get: function () { return storage_1.AskarStorageService; } });
11
- // Module
12
- var AskarModule_1 = require("./AskarModule");
13
- Object.defineProperty(exports, "AskarModule", { enumerable: true, get: function () { return AskarModule_1.AskarModule; } });
14
- var AskarModuleConfig_1 = require("./AskarModuleConfig");
15
- Object.defineProperty(exports, "AskarMultiWalletDatabaseScheme", { enumerable: true, get: function () { return AskarModuleConfig_1.AskarMultiWalletDatabaseScheme; } });
16
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,SAAS;AACT,mCAMiB;AALf,qGAAA,WAAW,OAAA;AAIX,4GAAA,kBAAkB,OAAA;AAGpB,UAAU;AACV,qCAA+C;AAAtC,8GAAA,mBAAmB,OAAA;AAE5B,SAAS;AACT,6CAA2C;AAAlC,0GAAA,WAAW,OAAA;AACpB,yDAA8F;AAA3D,mIAAA,8BAA8B,OAAA"}
@@ -1 +0,0 @@
1
- export * from './secureEnvironment';