@keetanetwork/keetanet-client 0.16.0 → 0.16.2
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/client/builder.d.ts +3 -3
- package/client/client_common_tests.d.ts +23 -4
- package/client/index-browser.d.ts +15 -13
- package/client/index-browser.js +878 -351
- package/client/index.d.ts +15 -13
- package/client/index.js +737 -253
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/KeetaNetSDK.Client.html +10 -10
- package/docs/classes/KeetaNetSDK.Referenced.Account.html +34 -31
- package/docs/classes/KeetaNetSDK.Referenced.BaseSet.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.BaseVoteBuilder.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.Block.html +3 -3
- package/docs/classes/KeetaNetSDK.Referenced.BlockBuilder.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.BlockHash.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperation.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationCREATE_IDENTIFIER.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationMANAGE_CERTIFICATE.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationMODIFY_PERMISSIONS.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationRECEIVE.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationSEND.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationSET_INFO.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationSET_REP.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationTOKEN_ADMIN_MODIFY_BALANCE.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.BlockOperationTOKEN_ADMIN_SUPPLY.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.Certificate.html +7 -7
- package/docs/classes/KeetaNetSDK.Referenced.CertificateBundle.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.CertificateHash.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSAKeyPair.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1KeyPair.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1PrivateKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1PublicKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256K1Signature.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1KeyPair.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1PrivateKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1PublicKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ECDSASECP256R1Signature.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ED25519KeyPair.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ED25519PrivateKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ED25519PublicKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ED25519Signature.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ExternalKeyPair.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.ExternalSet.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.IdempotentKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.IdentifierKey.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.IdentifierKeyPair.html +4 -4
- package/docs/classes/KeetaNetSDK.Referenced.KeetaNetError.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.KeetaNetErrorBase.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.KeetaNetLedgerError.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.KeetaNetLedgerIdempotentKeyError.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.KeetaNetLedgerVoteError.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.KeyInterface.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.KeyStorage.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.Ledger.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.LedgerAtomicInterface.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.P2PSwitch.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.PermissionSetHolder.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.PossiblyExpiredVote.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.PossiblyUnsignedBlock.html +3 -3
- package/docs/classes/KeetaNetSDK.Referenced.SignatureStorage.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.Stats.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.StatsPending.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.UnsignedBlock.html +3 -3
- package/docs/classes/KeetaNetSDK.Referenced.UserClientBuilder.html +11 -11
- package/docs/classes/KeetaNetSDK.Referenced.Vote.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.VoteBlockBundle.html +4 -4
- package/docs/classes/KeetaNetSDK.Referenced.VoteBlockHash.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.VoteBuilder.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.VoteHash.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.VoteLikeBase.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.VoteQuote.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.VoteQuoteBuilder.html +2 -2
- package/docs/classes/KeetaNetSDK.Referenced.VoteStaple.html +4 -4
- package/docs/classes/KeetaNetSDK.Referenced.VoteStapleHash.html +1 -1
- package/docs/classes/KeetaNetSDK.Referenced.src_lib_utils_buffer.BufferStorage.html +1 -1
- package/docs/classes/KeetaNetSDK.UserClient.html +20 -20
- package/docs/documents/GETTING-STARTED.html +1 -1
- package/docs/enums/KeetaNetSDK.Referenced.AccountKeyAlgorithm.html +8 -8
- package/docs/functions/KeetaNetSDK.Referenced.src_lib_utils_domain-separation.applyNamespace.html +5 -0
- package/docs/functions/KeetaNetSDK.Referenced.src_lib_utils_helper.getTypedObjectEntries.html +1 -0
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.ACLEntry.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.ACLUpdate.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.ASN1ExplicitContextTag.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.ASN1ImplicitContextTag.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.ASN1Object.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BaseAccountInfo.html +10 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.BaseExternalKeyPairFunctions.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BaseGenerationConfig.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.BaseIdentifierAccountInfo.html +12 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.BaseIdentifierCreateArguments.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperation.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationCREATE_IDENTIFIER.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationMANAGE_CERTIFICATE.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationMODIFY_PERMISSIONS.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationRECEIVE.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationSEND.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationSET_INFO.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationSET_REP.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationTOKEN_ADMIN_MODIFY_BALANCE.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockJSONOperationTOKEN_ADMIN_SUPPLY.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockV1Canonical.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockV1JSON.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.BlockV2Canonical.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.BuilderBlockOptions.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.Constructor.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.DisposableTimingHandle.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.ECDSA_SECP256K1AccountInfo.html +10 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.ECDSA_SECP256R1AccountInfo.html +10 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.ED25519AccountInfo.html +10 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.ExternalKeyPairFunctionsNoEncryption.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.ExternalKeyPairFunctionsSupportsEncryption.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.FeeAmountAndToken.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.FeeAmountAndTokenJSON.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.IdentifierCreateRequest.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.InitialConfigSupply.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.InstanceSet.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.KVGenericOptionsType.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.KVSetOptionsType.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.LedgerConfig.html +4 -4
- package/docs/interfaces/KeetaNetSDK.Referenced.LedgerStorageAPI.html +5 -5
- package/docs/interfaces/KeetaNetSDK.Referenced.ModifyTokenBalanceEntry.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.MultiSigIdentifierCreateArguments.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.MultisigAccountInfo.html +14 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.MultisigConfig.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.NetworkAccountInfo.html +12 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.NodeConfig.html +4 -4
- package/docs/interfaces/KeetaNetSDK.Referenced.NumericValueEntry.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.P2PPeerBase.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.P2PPeerListener.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.P2PPeerRepBase.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.PendingOperations.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.PendingOperationsJSON.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.PrincipalACLWithInfoParsed.html +3 -10
- package/docs/interfaces/KeetaNetSDK.Referenced.PublicKeyStorage.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.PublishOptions.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.RequestTokenReceiveEntry.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.StorageAccountInfo.html +12 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.TokenAccountInfo.html +14 -0
- package/docs/interfaces/KeetaNetSDK.Referenced.TokenNumericEntry.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.UserClientConfig.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.UserClientOptions.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.VoteJSON.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.VoteStapleJSON.html +2 -2
- package/docs/interfaces/KeetaNetSDK.Referenced.WithIsInstance.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.signOptionsType.html +16 -3
- package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1BitString.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1Date.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1OID.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1Set.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1String.html +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.src_lib_utils_asn1.ASN1Struct.html +1 -1
- package/docs/modules/KeetaNetSDK.Referenced.html +1 -1
- package/docs/modules/KeetaNetSDK.Referenced.src_lib_utils_domain-separation.html +1 -0
- package/docs/modules/KeetaNetSDK.Referenced.src_lib_utils_helper.html +1 -1
- package/docs/types/KeetaNetSDK.Referenced.AccountInfo.html +1 -0
- package/docs/types/KeetaNetSDK.Referenced.AccountInfoForType.html +1 -0
- package/docs/types/KeetaNetSDK.Referenced.AccountInfoResponse.html +2 -2
- package/docs/types/KeetaNetSDK.Referenced.AccountInfoWithoutAccount.html +1 -0
- package/docs/types/{KeetaNetSDK.Referenced.src_lib_utils_helper.DistributiveOmit.html → KeetaNetSDK.Referenced.DistributiveOmit.html} +1 -1
- package/docs/types/KeetaNetSDK.Referenced.GetAccountStateAPIResponseFormatted.html +5 -12
- package/docs/types/KeetaNetSDK.Referenced.KeyPairAccountInfo.html +1 -0
- package/docs/types/KeetaNetSDK.Referenced.KeyPairKeyAlgorithm.html +1 -0
- package/docs/types/KeetaNetSDK.Referenced.NetworkAddress.html +1 -1
- package/docs/types/KeetaNetSDK.Referenced.StorageAddress.html +1 -1
- package/docs/types/KeetaNetSDK.Referenced.TokenAddress.html +1 -1
- package/docs/types/KeetaNetSDK.Referenced.TokenOrPending.html +1 -1
- package/docs/types/KeetaNetSDK.Referenced.UserEditableAccountInfo.html +1 -1
- package/docs/types/KeetaNetSDK.Referenced.VoteBuilderOptions.html +2 -2
- package/docs/types/KeetaNetSDK.Referenced.src_lib_utils_conversion.ToJSONSerializable.html +1 -1
- package/docs/types/KeetaNetSDK.Referenced.src_lib_utils_initial.BaseNetworkInfo.html +1 -1
- package/docs/variables/KeetaNetSDK.Referenced.allFullErrorCodes.html +1 -1
- package/docs/variables/KeetaNetSDK.Referenced.identifierKeyTypes.html +1 -1
- package/docs/variables/KeetaNetSDK.Referenced.src_lib_utils_domain-separation.KeetaNamespaceVersion.html +3 -0
- package/docs/variables/KeetaNetSDK.Referenced.src_lib_utils_domain-separation.MaxNamespaceLength.html +3 -0
- package/docs/variables/KeetaNetSDK.Referenced.src_lib_utils_domain-separation.namespacePrefixSchema.html +9 -0
- package/docs/variables/KeetaNetSDK.lib.html +2 -2
- package/lib/account.d.ts +39 -1
- package/lib/block/index.d.ts +126 -108
- package/lib/block/operations.d.ts +11 -0
- package/lib/error/account.d.ts +2 -2
- package/lib/error/index.d.ts +1 -1
- package/lib/error/vote.d.ts +2 -2
- package/lib/index.d.ts +4 -2
- package/lib/ledger/common.d.ts +15 -3
- package/lib/ledger/db_dynamodb.d.ts +6 -6
- package/lib/ledger/db_postgres.d.ts +3 -3
- package/lib/ledger/db_spanner.d.ts +4 -4
- package/lib/ledger/db_spanner_helper.d.ts +2 -2
- package/lib/ledger/db_sqlite.d.ts +3 -3
- package/lib/ledger/effects.d.ts +3 -1
- package/lib/ledger/index.d.ts +9 -9
- package/lib/ledger/types.d.ts +43 -9
- package/lib/log/target_gcp.js +3 -0
- package/lib/log/target_https.js +7 -0
- package/lib/utils/certificate.d.ts +13 -12
- package/lib/utils/conversion.d.ts +12 -3
- package/lib/utils/domain-separation.d.ts +31 -0
- package/lib/utils/external-keys/gcp-kms.d.ts +53 -0
- package/lib/utils/external-keys/gcp-kms.js +328 -0
- package/lib/utils/external-keys/passkey-prf.d.ts +1 -3
- package/lib/utils/external-keys/passkey-prf.js +6 -0
- package/lib/utils/helper.d.ts +1 -0
- package/lib/utils/initial.d.ts +3 -2
- package/lib/utils/never.d.ts +4 -0
- package/lib/vote.d.ts +96 -89
- package/npm-shrinkwrap.json +30 -12
- package/package.json +2 -2
- package/version.d.ts +1 -1
- package/docs/interfaces/KeetaNetSDK.Referenced.AccountInfo.html +0 -14
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/******/ (() => { // webpackBootstrap
|
|
2
|
+
/******/ "use strict";
|
|
3
|
+
/******/ // The require scope
|
|
4
|
+
/******/ var __webpack_require__ = {};
|
|
5
|
+
/******/
|
|
6
|
+
/************************************************************************/
|
|
7
|
+
/******/ /* webpack/runtime/define property getters */
|
|
8
|
+
/******/ (() => {
|
|
9
|
+
/******/ // define getter functions for harmony exports
|
|
10
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
11
|
+
/******/ for(var key in definition) {
|
|
12
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
13
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
14
|
+
/******/ }
|
|
15
|
+
/******/ }
|
|
16
|
+
/******/ };
|
|
17
|
+
/******/ })();
|
|
18
|
+
/******/
|
|
19
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
20
|
+
/******/ (() => {
|
|
21
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
22
|
+
/******/ })();
|
|
23
|
+
/******/
|
|
24
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
25
|
+
/******/ (() => {
|
|
26
|
+
/******/ // define __esModule on exports
|
|
27
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
28
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
29
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
30
|
+
/******/ }
|
|
31
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
32
|
+
/******/ };
|
|
33
|
+
/******/ })();
|
|
34
|
+
/******/
|
|
35
|
+
/************************************************************************/
|
|
36
|
+
var __webpack_exports__ = {};
|
|
37
|
+
__webpack_require__.r(__webpack_exports__);
|
|
38
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
39
|
+
/* harmony export */ KeetaGCPKMSKeyPairFactory: () => (/* binding */ KeetaGCPKMSKeyPairFactory)
|
|
40
|
+
/* harmony export */ });
|
|
41
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
42
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
43
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
44
|
+
/**
|
|
45
|
+
* ExternalKeyPair for the Keeta Network which uses Google Cloud KMS
|
|
46
|
+
* for signing operations. This implementation supports ECDSA keys on
|
|
47
|
+
* both SECP256K1 and SECP256R1 curves, with potential for ED25519
|
|
48
|
+
* support in the future.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Parse a full KMS key name into its components.
|
|
53
|
+
* Example: projects/<project_name>/locations/<location>/keyRings/<keyRingName>/cryptoKeys/<keyName>
|
|
54
|
+
*/
|
|
55
|
+
function parseGCPKMSKeyName(fullName) {
|
|
56
|
+
const pattern = /^projects\/([^/]+)\/locations\/([^/]+)\/keyRings\/([^/]+)\/cryptoKeys\/([^/]+)(?:\/cryptoKeyVersions\/(\d+))?$/;
|
|
57
|
+
const match = fullName.match(pattern);
|
|
58
|
+
if (!match) {
|
|
59
|
+
throw new Error(`Invalid KMS key name format: ${fullName}`);
|
|
60
|
+
}
|
|
61
|
+
const projectId = match[1];
|
|
62
|
+
const locationId = match[2];
|
|
63
|
+
const keyRingId = match[3];
|
|
64
|
+
const keyId = match[4];
|
|
65
|
+
const versionId = match[5];
|
|
66
|
+
if (!projectId || !locationId || !keyRingId || !keyId) {
|
|
67
|
+
throw new Error(`Invalid KMS key name format: ${fullName}`);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
projectId,
|
|
71
|
+
locationId,
|
|
72
|
+
keyRingId,
|
|
73
|
+
keyId,
|
|
74
|
+
versionId
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** @internal */
|
|
79
|
+
|
|
80
|
+
/** @internal */
|
|
81
|
+
|
|
82
|
+
/** @internal */
|
|
83
|
+
|
|
84
|
+
function KeetaGCPKMSKeyPairFactory(packages) {
|
|
85
|
+
let includeTesting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
86
|
+
if (!packages.KeyManagementServiceClient || !packages.KeetaNet || !packages.crypto) {
|
|
87
|
+
throw new Error('Missing required packages for KeetaGCPKMSKeyPairFactory');
|
|
88
|
+
}
|
|
89
|
+
const KeetaNet = Object.freeze({
|
|
90
|
+
lib: Object.freeze({
|
|
91
|
+
Account: packages.KeetaNet.lib.Account,
|
|
92
|
+
Utils: Object.freeze({
|
|
93
|
+
Helper: Object.freeze({
|
|
94
|
+
bufferToArrayBuffer: packages.KeetaNet.lib.Utils.Helper.bufferToArrayBuffer
|
|
95
|
+
}),
|
|
96
|
+
Buffer: packages.KeetaNet.lib.Utils.Buffer,
|
|
97
|
+
ASN1: packages.KeetaNet.lib.Utils.ASN1
|
|
98
|
+
})
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
const crypto = packages.crypto;
|
|
102
|
+
const bufferToArrayBuffer = KeetaNet.lib.Utils.Helper.bufferToArrayBuffer;
|
|
103
|
+
const Buffer = KeetaNet.lib.Utils.Buffer.Buffer;
|
|
104
|
+
const BufferStorage = KeetaNet.lib.Utils.Buffer.BufferStorage;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Build a full KMS key resource name from components.
|
|
108
|
+
*/
|
|
109
|
+
async function buildGCPKMSKeyName(config) {
|
|
110
|
+
var _cryptoKey$primary$na, _cryptoKey$primary;
|
|
111
|
+
let lookupVersion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
112
|
+
const base = `projects/${config.projectId}/locations/${config.locationId}/keyRings/${config.keyRingId}/cryptoKeys/${config.keyId}`;
|
|
113
|
+
if (config.versionId) {
|
|
114
|
+
return `${base}/cryptoKeyVersions/${config.versionId}`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/*
|
|
118
|
+
* Just omit the version if it's not requested
|
|
119
|
+
*/
|
|
120
|
+
if (!lookupVersion) {
|
|
121
|
+
return base;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* If the versionID is missing, get the latest
|
|
126
|
+
* version from KMS.
|
|
127
|
+
*/
|
|
128
|
+
const client = new packages.KeyManagementServiceClient({
|
|
129
|
+
projectId: config.projectId
|
|
130
|
+
});
|
|
131
|
+
const [cryptoKey] = await client.getCryptoKey({
|
|
132
|
+
name: base
|
|
133
|
+
});
|
|
134
|
+
const latestVersionNumber = (_cryptoKey$primary$na = (_cryptoKey$primary = cryptoKey.primary) === null || _cryptoKey$primary === void 0 || (_cryptoKey$primary = _cryptoKey$primary.name) === null || _cryptoKey$primary === void 0 ? void 0 : _cryptoKey$primary.split('/').at(-1)) !== null && _cryptoKey$primary$na !== void 0 ? _cryptoKey$primary$na : '1';
|
|
135
|
+
return `${base}/cryptoKeyVersions/${latestVersionNumber}`;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Extract raw EC public key bytes from PEM format.
|
|
140
|
+
*/
|
|
141
|
+
function extractPublicKeyFromPem(pem, cryptoPkg) {
|
|
142
|
+
const publicKey = cryptoPkg.createPublicKey(pem);
|
|
143
|
+
const jwk = publicKey.export({
|
|
144
|
+
format: "jwk"
|
|
145
|
+
});
|
|
146
|
+
if (typeof jwk !== 'object' || jwk === null) {
|
|
147
|
+
throw new Error("Invalid JWK format");
|
|
148
|
+
}
|
|
149
|
+
if (!('x' in jwk) || !('y' in jwk) || typeof jwk.x !== 'string' || typeof jwk.y !== 'string') {
|
|
150
|
+
throw new Error("Invalid EC public key in JWK format");
|
|
151
|
+
}
|
|
152
|
+
const xBuf = Buffer.from(jwk.x, "base64url");
|
|
153
|
+
const yBuf = Buffer.from(jwk.y, "base64url");
|
|
154
|
+
const uncompressed = new Uint8Array(65);
|
|
155
|
+
uncompressed[0] = 0x04;
|
|
156
|
+
uncompressed.set(xBuf, 1);
|
|
157
|
+
uncompressed.set(yBuf, 33);
|
|
158
|
+
return uncompressed;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Convert uncompressed public key to compressed format.
|
|
163
|
+
*/
|
|
164
|
+
function compressPublicKey(uncompressed) {
|
|
165
|
+
if (uncompressed.length !== 65 || uncompressed[0] !== 0x04) {
|
|
166
|
+
throw new Error("Invalid uncompressed public key format");
|
|
167
|
+
}
|
|
168
|
+
const x = uncompressed.slice(1, 33);
|
|
169
|
+
const y = uncompressed.slice(33, 65);
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
171
|
+
const prefix = (y[31] & 1) === 0 ? 0x02 : 0x03;
|
|
172
|
+
const compressed = new Uint8Array(33);
|
|
173
|
+
compressed[0] = prefix;
|
|
174
|
+
compressed.set(x, 1);
|
|
175
|
+
return compressed;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Convert DER-encoded ECDSA signature to raw R||S format (64 bytes).
|
|
180
|
+
*/
|
|
181
|
+
function derSignatureToRaw(derSig, pkgs) {
|
|
182
|
+
const ValidateASN1 = pkgs.KeetaNet.lib.Utils.ASN1.ValidateASN1;
|
|
183
|
+
const bufferToArrayBufferLocal = pkgs.KeetaNet.lib.Utils.Helper.bufferToArrayBuffer;
|
|
184
|
+
const BufferLocal = pkgs.KeetaNet.lib.Utils.Buffer.Buffer;
|
|
185
|
+
const BufferStorageLocal = pkgs.KeetaNet.lib.Utils.Buffer.BufferStorage;
|
|
186
|
+
const validator = new ValidateASN1({
|
|
187
|
+
type: 'struct',
|
|
188
|
+
fieldNames: ['r', 's'],
|
|
189
|
+
contains: {
|
|
190
|
+
r: ValidateASN1.IsInteger,
|
|
191
|
+
s: ValidateASN1.IsInteger
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
const parts = validator.validate(pkgs.KeetaNet.lib.Utils.ASN1.ASN1toJS(bufferToArrayBufferLocal(BufferLocal.from(derSig))));
|
|
195
|
+
const rBuffer = new BufferStorageLocal(parts.contains.r, 32);
|
|
196
|
+
const sBuffer = new BufferStorageLocal(parts.contains.s, 32);
|
|
197
|
+
const r = new Uint8Array(rBuffer.get());
|
|
198
|
+
const s = new Uint8Array(sBuffer.get());
|
|
199
|
+
const rawSig = new Uint8Array(64);
|
|
200
|
+
rawSig.set(r, 0);
|
|
201
|
+
rawSig.set(s, 32);
|
|
202
|
+
return rawSig;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Detect the key algorithm from the algorithm name or curve name.
|
|
207
|
+
*/
|
|
208
|
+
function detectKeyAlgorithm(algorithmOrCurve) {
|
|
209
|
+
if (typeof algorithmOrCurve !== 'string' && algorithmOrCurve !== null && algorithmOrCurve !== undefined) {
|
|
210
|
+
algorithmOrCurve = String(algorithmOrCurve);
|
|
211
|
+
}
|
|
212
|
+
const algoStr = algorithmOrCurve;
|
|
213
|
+
switch (algoStr) {
|
|
214
|
+
case 'EC_SIGN_SECP256K1_SHA256':
|
|
215
|
+
case 'secp256k1':
|
|
216
|
+
return KeetaNet.lib.Account.AccountKeyAlgorithm.ECDSA_SECP256K1;
|
|
217
|
+
case 'EC_SIGN_P256_SHA256':
|
|
218
|
+
case 'prime256v1':
|
|
219
|
+
case 'P-256':
|
|
220
|
+
return KeetaNet.lib.Account.AccountKeyAlgorithm.ECDSA_SECP256R1;
|
|
221
|
+
default:
|
|
222
|
+
throw new Error(`Unsupported algorithm or curve: ${String(algoStr)}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* A KeetaNet ExternalKeyPair implementation backed by Google Cloud KMS.
|
|
228
|
+
*/
|
|
229
|
+
class KeetaGCPKMSKeyPair extends KeetaNet.lib.Account.ExternalKeyPair {
|
|
230
|
+
/**
|
|
231
|
+
* Creates a new KeetaGCPKMSKeyPair instance with the given
|
|
232
|
+
* parameters. Generally this constructor should not be called
|
|
233
|
+
* directly, as the preferred way to access a key is through
|
|
234
|
+
* the static @see KeetaGCPKMSKeyPair.lookup method.
|
|
235
|
+
*/
|
|
236
|
+
constructor(client, keyVersionName, rawPublicKey, keyType) {
|
|
237
|
+
super({
|
|
238
|
+
sign: async (data, options) => {
|
|
239
|
+
// data is already hashed by the SDK (since rawSignatures = false)
|
|
240
|
+
const digest = {
|
|
241
|
+
sha256: Buffer.from(data)
|
|
242
|
+
};
|
|
243
|
+
const [signResponse] = await client.asymmetricSign({
|
|
244
|
+
name: keyVersionName,
|
|
245
|
+
digest: digest
|
|
246
|
+
});
|
|
247
|
+
if (!signResponse.signature) {
|
|
248
|
+
throw new Error("No signature returned from KMS");
|
|
249
|
+
}
|
|
250
|
+
const derSigBuffer = Buffer.from(signResponse.signature);
|
|
251
|
+
if (options !== null && options !== void 0 && options.forCert) {
|
|
252
|
+
return new BufferStorage(derSigBuffer, derSigBuffer.byteLength);
|
|
253
|
+
}
|
|
254
|
+
const derSig = new Uint8Array(derSigBuffer);
|
|
255
|
+
let signature;
|
|
256
|
+
switch (keyType) {
|
|
257
|
+
case KeetaNet.lib.Account.AccountKeyAlgorithm.ECDSA_SECP256K1:
|
|
258
|
+
case KeetaNet.lib.Account.AccountKeyAlgorithm.ECDSA_SECP256R1:
|
|
259
|
+
signature = KeetaNet.lib.Account.KeyPairs[keyType].signatureFromDER([...derSig]);
|
|
260
|
+
break;
|
|
261
|
+
default:
|
|
262
|
+
throw new Error(`Unsupported key type for signature conversion: ${keyType}`);
|
|
263
|
+
}
|
|
264
|
+
return signature;
|
|
265
|
+
},
|
|
266
|
+
supportsEncryption: false
|
|
267
|
+
}, rawPublicKey, keyType, false);
|
|
268
|
+
this.keyName = keyVersionName;
|
|
269
|
+
Object.freeze(this);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Lookup (or open) an existing GCP KMS key and create a
|
|
274
|
+
* KeetaGCPKMSKeyPair instance for it.
|
|
275
|
+
*/
|
|
276
|
+
static async lookup(options) {
|
|
277
|
+
var _options$keyType;
|
|
278
|
+
let keyConfig;
|
|
279
|
+
if (typeof options.key === 'string') {
|
|
280
|
+
keyConfig = parseGCPKMSKeyName(options.key);
|
|
281
|
+
} else {
|
|
282
|
+
keyConfig = options.key;
|
|
283
|
+
}
|
|
284
|
+
const client = new packages.KeyManagementServiceClient({
|
|
285
|
+
projectId: keyConfig.projectId
|
|
286
|
+
});
|
|
287
|
+
const keyVersionName = await buildGCPKMSKeyName(keyConfig);
|
|
288
|
+
const [publicKeyResponse] = await client.getPublicKey({
|
|
289
|
+
name: keyVersionName
|
|
290
|
+
});
|
|
291
|
+
const detectedKeyType = detectKeyAlgorithm(publicKeyResponse.algorithm);
|
|
292
|
+
const keyType = (_options$keyType = options.keyType) !== null && _options$keyType !== void 0 ? _options$keyType : detectedKeyType;
|
|
293
|
+
if (options.keyType !== undefined && options.keyType !== detectedKeyType) {
|
|
294
|
+
throw new Error(`Key type mismatch: expected ${options.keyType}, but KMS key has ${detectedKeyType}`);
|
|
295
|
+
}
|
|
296
|
+
if (!publicKeyResponse.pem) {
|
|
297
|
+
throw new Error("No public key PEM data available from KMS");
|
|
298
|
+
}
|
|
299
|
+
const uncompressedPublicKey = extractPublicKeyFromPem(publicKeyResponse.pem, crypto);
|
|
300
|
+
const compressedPublicKey = compressPublicKey(uncompressedPublicKey);
|
|
301
|
+
return new KeetaGCPKMSKeyPair(client, keyVersionName, bufferToArrayBuffer(Buffer.from(compressedPublicKey)), keyType);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/** @internal */
|
|
305
|
+
_defineProperty(KeetaGCPKMSKeyPair, "_Testing", {
|
|
306
|
+
parseKeyName: parseGCPKMSKeyName,
|
|
307
|
+
buildKeyName: buildGCPKMSKeyName,
|
|
308
|
+
extractPublicKeyFromPem: extractPublicKeyFromPem,
|
|
309
|
+
derSignatureToRaw: derSignatureToRaw
|
|
310
|
+
});
|
|
311
|
+
if (!includeTesting) {
|
|
312
|
+
/**
|
|
313
|
+
* The _Testing property is only included for testing
|
|
314
|
+
* so remove it if we're not including testing.
|
|
315
|
+
*/
|
|
316
|
+
// @ts-ignore
|
|
317
|
+
delete KeetaGCPKMSKeyPair._Testing;
|
|
318
|
+
}
|
|
319
|
+
Object.freeze(KeetaGCPKMSKeyPair);
|
|
320
|
+
Object.freeze(KeetaGCPKMSKeyPair.prototype);
|
|
321
|
+
return KeetaGCPKMSKeyPair;
|
|
322
|
+
}
|
|
323
|
+
Object.freeze(KeetaGCPKMSKeyPairFactory);
|
|
324
|
+
var __webpack_export_target__ = exports;
|
|
325
|
+
for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];
|
|
326
|
+
if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true });
|
|
327
|
+
/******/ })()
|
|
328
|
+
;
|
|
@@ -150,7 +150,5 @@ interface KeetaPasskeyPRFKeyPairClass {
|
|
|
150
150
|
lookup: (options?: KeetaPasskeyPRFKeyPairLookupOptions) => Promise<KeetaPasskeyPRFKeyPair>;
|
|
151
151
|
generate: (options: KeetaPasskeyPRFKeyPairGenerateOptions) => Promise<KeetaPasskeyPRFKeyPair>;
|
|
152
152
|
}
|
|
153
|
-
export declare function KeetaPasskeyPRFKeyPairFactory(packages: KeetaPasskeyPRFKeyPairPackages
|
|
154
|
-
export declare function KeetaPasskeyPRFKeyPairFactory(packages: KeetaPasskeyPRFKeyPairPackages, includeTesting?: false): Omit<KeetaPasskeyPRFKeyPairClass, '_Testing'>;
|
|
155
|
-
export declare function KeetaPasskeyPRFKeyPairFactory(packages: KeetaPasskeyPRFKeyPairPackages, includeTesting?: boolean): KeetaPasskeyPRFKeyPairClass;
|
|
153
|
+
export declare function KeetaPasskeyPRFKeyPairFactory(packages: KeetaPasskeyPRFKeyPairPackages): Omit<KeetaPasskeyPRFKeyPairClass, '_Testing'>;
|
|
156
154
|
export {};
|
|
@@ -64,6 +64,12 @@ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.h
|
|
|
64
64
|
* credential.
|
|
65
65
|
*/
|
|
66
66
|
|
|
67
|
+
/** @internal */
|
|
68
|
+
|
|
69
|
+
/** @internal */
|
|
70
|
+
|
|
71
|
+
/** @internal */
|
|
72
|
+
|
|
67
73
|
function KeetaPasskeyPRFKeyPairFactory(packages) {
|
|
68
74
|
var _KeetaPasskeyPRFKeyPair;
|
|
69
75
|
let includeTesting = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
package/lib/utils/helper.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _crypto from 'crypto';
|
|
2
2
|
import { inspect as nodeUtilsInspect, types as nodeUtilsTypes } from 'util';
|
|
3
3
|
import type { JSONSerializable } from './conversion';
|
|
4
|
+
export declare function getTypedObjectEntries<T extends object>(obj: T): Array<[keyof T, T[keyof T]]>;
|
|
4
5
|
export type DistributiveOmit<T, P extends PropertyKey> = T extends T ? Omit<T, P> : never;
|
|
5
6
|
export declare function validateBase64ToBuffer(input: string): Buffer;
|
|
6
7
|
export declare function bufferToArrayBuffer(input: Buffer): ArrayBuffer;
|
package/lib/utils/initial.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { AccountKeyAlgorithm } from '../account';
|
|
1
2
|
import Account from '../account';
|
|
2
3
|
import Block from '../block';
|
|
3
|
-
import type {
|
|
4
|
+
import type { AccountInfoForType } from '../ledger/types';
|
|
4
5
|
import { Permissions } from '../permissions';
|
|
5
6
|
import type { VoteStaple } from '../vote';
|
|
6
7
|
export interface BaseTokenInfo {
|
|
@@ -9,7 +10,7 @@ export interface BaseTokenInfo {
|
|
|
9
10
|
decimalPlaces: number;
|
|
10
11
|
defaultPermission?: Permissions;
|
|
11
12
|
}
|
|
12
|
-
export type BaseNetworkInfo = Partial<Pick<
|
|
13
|
+
export type BaseNetworkInfo = Partial<Pick<AccountInfoForType<AccountKeyAlgorithm.NETWORK>, 'name' | 'description' | 'metadata' | 'defaultPermission'>>;
|
|
13
14
|
interface BaseGenerationConfig {
|
|
14
15
|
network: bigint;
|
|
15
16
|
initialTrustedAccount: Account;
|