@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.
- package/build/AskarApi.d.mts +68 -0
- package/build/AskarApi.d.mts.map +1 -0
- package/build/AskarApi.mjs +94 -0
- package/build/AskarApi.mjs.map +1 -0
- package/build/AskarApiOptions.d.mts +29 -0
- package/build/AskarApiOptions.d.mts.map +1 -0
- package/build/AskarModule.d.mts +18 -0
- package/build/AskarModule.d.mts.map +1 -0
- package/build/AskarModule.mjs +61 -0
- package/build/AskarModule.mjs.map +1 -0
- package/build/AskarModuleConfig.d.mts +125 -0
- package/build/AskarModuleConfig.d.mts.map +1 -0
- package/build/AskarModuleConfig.mjs +41 -0
- package/build/AskarModuleConfig.mjs.map +1 -0
- package/build/AskarStorageConfig.d.mts +32 -0
- package/build/AskarStorageConfig.d.mts.map +1 -0
- package/build/AskarStorageConfig.mjs +11 -0
- package/build/AskarStorageConfig.mjs.map +1 -0
- package/build/AskarStoreManager.d.mts +109 -0
- package/build/AskarStoreManager.d.mts.map +1 -0
- package/build/AskarStoreManager.mjs +386 -0
- package/build/AskarStoreManager.mjs.map +1 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +10 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +7 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
- package/build/error/AskarError.d.mts +1 -0
- package/build/error/AskarError.mjs +12 -0
- package/build/error/AskarError.mjs.map +1 -0
- package/build/error/AskarStoreDuplicateError.d.mts +13 -0
- package/build/error/AskarStoreDuplicateError.d.mts.map +1 -0
- package/build/error/AskarStoreDuplicateError.mjs +12 -0
- package/build/error/AskarStoreDuplicateError.mjs.map +1 -0
- package/build/error/AskarStoreError.d.mts +13 -0
- package/build/error/AskarStoreError.d.mts.map +1 -0
- package/build/error/AskarStoreError.mjs +12 -0
- package/build/error/AskarStoreError.mjs.map +1 -0
- package/build/error/AskarStoreExportPathExistsError.d.mts +13 -0
- package/build/error/AskarStoreExportPathExistsError.d.mts.map +1 -0
- package/build/error/AskarStoreExportPathExistsError.mjs +12 -0
- package/build/error/AskarStoreExportPathExistsError.mjs.map +1 -0
- package/build/error/AskarStoreExportUnsupportedError.d.mts +13 -0
- package/build/error/AskarStoreExportUnsupportedError.d.mts.map +1 -0
- package/build/error/AskarStoreExportUnsupportedError.mjs +12 -0
- package/build/error/AskarStoreExportUnsupportedError.mjs.map +1 -0
- package/build/error/AskarStoreImportPathExistsError.d.mts +13 -0
- package/build/error/AskarStoreImportPathExistsError.d.mts.map +1 -0
- package/build/error/AskarStoreImportPathExistsError.mjs +12 -0
- package/build/error/AskarStoreImportPathExistsError.mjs.map +1 -0
- package/build/error/AskarStoreInvalidKeyError.d.mts +13 -0
- package/build/error/AskarStoreInvalidKeyError.d.mts.map +1 -0
- package/build/error/AskarStoreInvalidKeyError.mjs +12 -0
- package/build/error/AskarStoreInvalidKeyError.mjs.map +1 -0
- package/build/error/AskarStoreNotFoundError.d.mts +13 -0
- package/build/error/AskarStoreNotFoundError.d.mts.map +1 -0
- package/build/error/AskarStoreNotFoundError.mjs +12 -0
- package/build/error/AskarStoreNotFoundError.mjs.map +1 -0
- package/build/error/index.d.mts +8 -0
- package/build/error/index.mjs +8 -0
- package/build/index.d.mts +19 -0
- package/build/index.mjs +19 -0
- package/build/kms/AskarKeyManagementService.d.mts +30 -0
- package/build/kms/AskarKeyManagementService.d.mts.map +1 -0
- package/build/kms/AskarKeyManagementService.mjs +415 -0
- package/build/kms/AskarKeyManagementService.mjs.map +1 -0
- package/build/kms/crypto/decrypt.mjs +21 -0
- package/build/kms/crypto/decrypt.mjs.map +1 -0
- package/build/kms/crypto/deriveKey.mjs +87 -0
- package/build/kms/crypto/deriveKey.mjs.map +1 -0
- package/build/kms/crypto/encrypt.mjs +24 -0
- package/build/kms/crypto/encrypt.mjs.map +1 -0
- package/build/kms/crypto/randomBytes.mjs +19 -0
- package/build/kms/crypto/randomBytes.mjs.map +1 -0
- package/build/storage/AskarStorageService.d.mts +34 -0
- package/build/storage/AskarStorageService.d.mts.map +1 -0
- package/build/storage/AskarStorageService.mjs +169 -0
- package/build/storage/AskarStorageService.mjs.map +1 -0
- package/build/storage/index.d.mts +1 -0
- package/build/storage/index.mjs +1 -0
- package/build/storage/utils.d.mts +8 -0
- package/build/storage/utils.d.mts.map +1 -0
- package/build/storage/utils.mjs +58 -0
- package/build/storage/utils.mjs.map +1 -0
- package/build/tenants.mjs +42 -0
- package/build/tenants.mjs.map +1 -0
- package/build/utils/askarError.d.mts +1 -0
- package/build/utils/askarError.mjs +21 -0
- package/build/utils/askarError.mjs.map +1 -0
- package/build/utils/askarKeyTypes.d.mts +2 -0
- package/build/utils/askarKeyTypes.mjs +25 -0
- package/build/utils/askarKeyTypes.mjs.map +1 -0
- package/build/utils/askarStoreConfig.d.mts +2 -0
- package/build/utils/askarStoreConfig.mjs +47 -0
- package/build/utils/askarStoreConfig.mjs.map +1 -0
- package/build/utils/index.d.mts +4 -0
- package/build/utils/index.mjs +4 -0
- package/build/utils/transformPrivateKey.d.mts +73 -0
- package/build/utils/transformPrivateKey.d.mts.map +1 -0
- package/build/utils/transformPrivateKey.mjs +73 -0
- package/build/utils/transformPrivateKey.mjs.map +1 -0
- package/package.json +21 -29
- package/build/AskarModule.d.ts +0 -9
- package/build/AskarModule.js +0 -58
- package/build/AskarModule.js.map +0 -1
- package/build/AskarModuleConfig.d.ts +0 -68
- package/build/AskarModuleConfig.js +0 -33
- package/build/AskarModuleConfig.js.map +0 -1
- package/build/index.d.ts +0 -4
- package/build/index.js +0 -16
- package/build/index.js.map +0 -1
- package/build/secureEnvironment/index.d.ts +0 -1
- package/build/secureEnvironment/index.js +0 -18
- package/build/secureEnvironment/index.js.map +0 -1
- package/build/secureEnvironment/secureEnvironment.d.ts +0 -5
- package/build/secureEnvironment/secureEnvironment.js +0 -7
- package/build/secureEnvironment/secureEnvironment.js.map +0 -1
- package/build/secureEnvironment/secureEnvironment.native.d.ts +0 -1
- package/build/secureEnvironment/secureEnvironment.native.js +0 -14
- package/build/secureEnvironment/secureEnvironment.native.js.map +0 -1
- package/build/storage/AskarStorageService.d.ts +0 -17
- package/build/storage/AskarStorageService.js +0 -141
- package/build/storage/AskarStorageService.js.map +0 -1
- package/build/storage/index.d.ts +0 -1
- package/build/storage/index.js +0 -18
- package/build/storage/index.js.map +0 -1
- package/build/storage/utils.d.ts +0 -15
- package/build/storage/utils.js +0 -109
- package/build/storage/utils.js.map +0 -1
- package/build/utils/askarError.d.ts +0 -14
- package/build/utils/askarError.js +0 -20
- package/build/utils/askarError.js.map +0 -1
- package/build/utils/askarKeyBackend.d.ts +0 -3
- package/build/utils/askarKeyBackend.js +0 -15
- package/build/utils/askarKeyBackend.js.map +0 -1
- package/build/utils/askarKeyTypes.d.ts +0 -8
- package/build/utils/askarKeyTypes.js +0 -46
- package/build/utils/askarKeyTypes.js.map +0 -1
- package/build/utils/askarWalletConfig.d.ts +0 -14
- package/build/utils/askarWalletConfig.js +0 -75
- package/build/utils/askarWalletConfig.js.map +0 -1
- package/build/utils/assertAskarWallet.d.ts +0 -3
- package/build/utils/assertAskarWallet.js +0 -14
- package/build/utils/assertAskarWallet.js.map +0 -1
- package/build/utils/index.d.ts +0 -3
- package/build/utils/index.js +0 -20
- package/build/utils/index.js.map +0 -1
- package/build/wallet/AskarBaseWallet.d.ts +0 -112
- package/build/wallet/AskarBaseWallet.js +0 -540
- package/build/wallet/AskarBaseWallet.js.map +0 -1
- package/build/wallet/AskarProfileWallet.d.ts +0 -24
- package/build/wallet/AskarProfileWallet.js +0 -150
- package/build/wallet/AskarProfileWallet.js.map +0 -1
- package/build/wallet/AskarWallet.d.ts +0 -58
- package/build/wallet/AskarWallet.js +0 -342
- package/build/wallet/AskarWallet.js.map +0 -1
- package/build/wallet/AskarWalletStorageConfig.d.ts +0 -31
- package/build/wallet/AskarWalletStorageConfig.js +0 -11
- package/build/wallet/AskarWalletStorageConfig.js.map +0 -1
- package/build/wallet/JweEnvelope.d.ts +0 -32
- package/build/wallet/JweEnvelope.js +0 -55
- package/build/wallet/JweEnvelope.js.map +0 -1
- package/build/wallet/didcommV1.d.ts +0 -8
- package/build/wallet/didcommV1.js +0 -155
- package/build/wallet/didcommV1.js.map +0 -1
- package/build/wallet/index.d.ts +0 -3
- package/build/wallet/index.js +0 -23
- 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,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,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 { 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
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
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.
|
|
24
|
-
"tsyringe": "^4.
|
|
25
|
-
"@credo-ts/core": "0.6.1
|
|
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
|
-
"@
|
|
29
|
-
"@
|
|
30
|
-
"@
|
|
31
|
-
"@types/
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
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
|
-
"@
|
|
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": "
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
41
|
+
"build": "tsdown --config-loader unconfig"
|
|
42
|
+
},
|
|
43
|
+
"types": "./build/index.d.mts",
|
|
44
|
+
"module": "./build/index.mjs"
|
|
53
45
|
}
|
package/build/AskarModule.d.ts
DELETED
|
@@ -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
|
-
}
|
package/build/AskarModule.js
DELETED
|
@@ -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
|
package/build/AskarModule.js.map
DELETED
|
@@ -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
|
package/build/index.js.map
DELETED
|
@@ -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';
|