@notabene/javascript-sdk 2.8.0-next.4 → 2.8.0-next.6
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/README.md +30 -0
- package/dist/cjs/notabene.cjs +1 -1
- package/dist/cjs/notabene.d.ts +92 -8
- package/dist/cjs/package.json +1 -1
- package/dist/esm/notabene.d.ts +92 -8
- package/dist/esm/notabene.js +282 -137
- package/dist/esm/package.json +1 -1
- package/dist/notabene.d.ts +92 -8
- package/dist/notabene.js +282 -137
- package/docs/README.md +30 -0
- package/docs/_media/TransactionOptions.md +6 -6
- package/docs/ivms/types/enumerations/PayloadVersionCode.md +2 -2
- package/docs/ivms/types/interfaces/PayloadMetadata.md +2 -2
- package/docs/ivms/types/type-aliases/Address.md +1 -1
- package/docs/ivms/types/type-aliases/AddressTypeCode.md +1 -1
- package/docs/ivms/types/type-aliases/Beneficiary.md +1 -1
- package/docs/ivms/types/type-aliases/BeneficiaryVASP.md +1 -1
- package/docs/ivms/types/type-aliases/DateAndPlaceOfBirth.md +1 -1
- package/docs/ivms/types/type-aliases/ISOCountryCode.md +1 -1
- package/docs/ivms/types/type-aliases/ISODate.md +1 -1
- package/docs/ivms/types/type-aliases/IVMS101.md +1 -1
- package/docs/ivms/types/type-aliases/IntermediaryVASP.md +1 -1
- package/docs/ivms/types/type-aliases/LegalPerson.md +1 -1
- package/docs/ivms/types/type-aliases/LegalPersonName.md +1 -1
- package/docs/ivms/types/type-aliases/LegalPersonNameID.md +1 -1
- package/docs/ivms/types/type-aliases/LegalPersonNameTypeCode.md +1 -1
- package/docs/ivms/types/type-aliases/LocalLegalPersonNameID.md +1 -1
- package/docs/ivms/types/type-aliases/LocalNaturalPersonNameID.md +1 -1
- package/docs/ivms/types/type-aliases/NationalIdentification.md +1 -1
- package/docs/ivms/types/type-aliases/NationalIdentifierTypeCode.md +1 -1
- package/docs/ivms/types/type-aliases/NaturalPerson.md +1 -1
- package/docs/ivms/types/type-aliases/NaturalPersonName.md +1 -1
- package/docs/ivms/types/type-aliases/NaturalPersonNameID.md +1 -1
- package/docs/ivms/types/type-aliases/NaturalPersonNameTypeCode.md +1 -1
- package/docs/ivms/types/type-aliases/OriginatingVASP.md +1 -1
- package/docs/ivms/types/type-aliases/Originator.md +1 -1
- package/docs/ivms/types/type-aliases/Person.md +1 -1
- package/docs/ivms/types/type-aliases/TransferPath.md +1 -1
- package/docs/ivms/types/type-aliases/TransliterationMethodCode.md +1 -1
- package/docs/notabene/README.md +5 -0
- package/docs/notabene/classes/ConnectionManager.md +165 -0
- package/docs/notabene/classes/EmbeddedComponent.md +17 -17
- package/docs/notabene/classes/default.md +7 -7
- package/docs/notabene/functions/decodeFragmentToObject.md +1 -1
- package/docs/notabene/interfaces/ConnectionData.md +41 -0
- package/docs/notabene/interfaces/ConnectionMetadata.md +37 -0
- package/docs/notabene/interfaces/ConnectionResponse.md +61 -0
- package/docs/notabene/interfaces/NotabeneConfig.md +5 -5
- package/docs/notabene/type-aliases/MessageCallback.md +1 -1
- package/docs/notabene/type-aliases/TransactionType.md +13 -0
- package/docs/types/README.md +1 -0
- package/docs/types/enumerations/AgentType.md +2 -2
- package/docs/types/enumerations/CMType.md +7 -7
- package/docs/types/enumerations/ErrorIdentifierCode.md +4 -4
- package/docs/types/enumerations/HMType.md +2 -2
- package/docs/types/enumerations/PersonType.md +3 -3
- package/docs/types/enumerations/ProofStatus.md +4 -4
- package/docs/types/enumerations/ProofTypes.md +16 -16
- package/docs/types/enumerations/Status.md +5 -5
- package/docs/types/enumerations/VASPSearchControl.md +2 -2
- package/docs/types/enumerations/ValidationSections.md +4 -4
- package/docs/types/interfaces/Agent.md +6 -6
- package/docs/types/interfaces/CallbackOptions.md +2 -2
- package/docs/types/interfaces/ComponentRequest.md +2 -2
- package/docs/types/interfaces/ComponentResponse.md +4 -4
- package/docs/types/interfaces/ConnectionRecord.md +7 -7
- package/docs/types/interfaces/ConnectionRequest.md +3 -3
- package/docs/types/interfaces/Counterparty.md +10 -10
- package/docs/types/interfaces/DeclarationProof.md +6 -6
- package/docs/types/interfaces/Deposit.md +11 -11
- package/docs/types/interfaces/DepositRequest.md +7 -7
- package/docs/types/interfaces/DepositRequestOptions.md +1 -1
- package/docs/types/interfaces/DepositTransaction.md +9 -9
- package/docs/types/interfaces/LegalPerson.md +13 -13
- package/docs/types/interfaces/MicroTransferProof.md +9 -9
- package/docs/types/interfaces/NaturalPerson.md +13 -13
- package/docs/types/interfaces/OwnershipProof.md +4 -4
- package/docs/types/interfaces/RefreshSource.md +2 -2
- package/docs/types/interfaces/Refreshable.md +1 -1
- package/docs/types/interfaces/ScreenshotProof.md +5 -5
- package/docs/types/interfaces/SignatureProof.md +9 -9
- package/docs/types/interfaces/ThresholdOptions.md +3 -3
- package/docs/types/interfaces/Transaction.md +8 -8
- package/docs/types/interfaces/TransactionOptions.md +6 -6
- package/docs/types/interfaces/TransactionResponse.md +9 -9
- package/docs/types/interfaces/VASP.md +9 -9
- package/docs/types/interfaces/Wallet.md +8 -8
- package/docs/types/interfaces/Withdrawal.md +10 -10
- package/docs/types/type-aliases/BlockchainAddress.md +1 -1
- package/docs/types/type-aliases/CAIP10.md +1 -1
- package/docs/types/type-aliases/CAIP19.md +1 -1
- package/docs/types/type-aliases/CAIP2.md +1 -1
- package/docs/types/type-aliases/CAIP220.md +1 -1
- package/docs/types/type-aliases/Cancel.md +1 -1
- package/docs/types/type-aliases/Completed.md +1 -1
- package/docs/types/type-aliases/ComponentMessage.md +1 -1
- package/docs/types/type-aliases/ConnectionOptions.md +1 -1
- package/docs/types/type-aliases/CryptoCredential.md +1 -1
- package/docs/types/type-aliases/DID.md +1 -1
- package/docs/types/type-aliases/DTI.md +1 -1
- package/docs/types/type-aliases/Destination.md +1 -1
- package/docs/types/type-aliases/Error.md +1 -1
- package/docs/types/type-aliases/FieldOptions.md +1 -1
- package/docs/types/type-aliases/FieldTypes.md +1 -1
- package/docs/types/type-aliases/HostMessage.md +1 -1
- package/docs/types/type-aliases/ISOCurrency.md +1 -1
- package/docs/types/type-aliases/InvalidValue.md +1 -1
- package/docs/types/type-aliases/LEI.md +1 -1
- package/docs/types/type-aliases/LegalPersonFieldName.md +1 -1
- package/docs/types/type-aliases/LegalPersonFields.md +3 -3
- package/docs/types/type-aliases/NationalIdentifierTypeFieldOptions.md +21 -0
- package/docs/types/type-aliases/NaturalPersonFieldName.md +1 -1
- package/docs/types/type-aliases/NaturalPersonFields.md +3 -3
- package/docs/types/type-aliases/NotabeneAsset.md +1 -1
- package/docs/types/type-aliases/Ready.md +1 -1
- package/docs/types/type-aliases/ResizeRequest.md +1 -1
- package/docs/types/type-aliases/Source.md +1 -1
- package/docs/types/type-aliases/Theme.md +1 -1
- package/docs/types/type-aliases/TransactionAsset.md +1 -1
- package/docs/types/type-aliases/TravelAddress.md +1 -1
- package/docs/types/type-aliases/URI.md +1 -1
- package/docs/types/type-aliases/UUID.md +1 -1
- package/docs/types/type-aliases/UpdateValue.md +1 -1
- package/docs/types/type-aliases/V1Asset.md +1 -1
- package/docs/types/type-aliases/V1Transaction.md +1 -1
- package/docs/types/type-aliases/VASPOptions.md +1 -1
- package/docs/types/type-aliases/ValidationError.md +1 -1
- package/package.json +1 -1
- package/src/notabene.ts +7 -0
- package/src/types.ts +35 -7
- package/src/utils/__tests__/connections.test.ts +284 -0
- package/src/utils/__tests__/encryption.test.ts +79 -0
- package/src/utils/connections.ts +174 -0
- package/src/utils/encryption.ts +111 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result of a sealing operation, containing ciphertext and encryption key.
|
|
3
|
+
*/
|
|
4
|
+
export interface Sealed {
|
|
5
|
+
/** Base64-encoded ciphertext combined with initialization vector (IV) */
|
|
6
|
+
ciphertext: string;
|
|
7
|
+
/** Base64-encoded encryption key */
|
|
8
|
+
key: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Encrypts an object using AES-GCM encryption.
|
|
13
|
+
* @template T Type of data to encrypt
|
|
14
|
+
* @param data Data to encrypt
|
|
15
|
+
* @returns Promise resolving to a Sealed object containing ciphertext and key
|
|
16
|
+
*/
|
|
17
|
+
export async function seal<T>(data: T): Promise<Sealed> {
|
|
18
|
+
// Convert the object to a JSON string
|
|
19
|
+
const plaintext = JSON.stringify(data);
|
|
20
|
+
const encoder = new TextEncoder();
|
|
21
|
+
|
|
22
|
+
// Generate a random encryption key and IV
|
|
23
|
+
const rawKey = crypto.getRandomValues(new Uint8Array(32)); // 256-bit key
|
|
24
|
+
const key = await crypto.subtle.importKey(
|
|
25
|
+
'raw',
|
|
26
|
+
rawKey,
|
|
27
|
+
{ name: 'AES-GCM' },
|
|
28
|
+
false,
|
|
29
|
+
['encrypt'],
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const iv = crypto.getRandomValues(new Uint8Array(12)); // 96-bit IV
|
|
33
|
+
|
|
34
|
+
// Encrypt the plaintext
|
|
35
|
+
const ciphertextBuffer = await crypto.subtle.encrypt(
|
|
36
|
+
{ name: 'AES-GCM', iv: iv },
|
|
37
|
+
key,
|
|
38
|
+
encoder.encode(plaintext),
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
// Combine the IV and ciphertext, separated by `-`
|
|
42
|
+
const ciphertext = `${arrayBufferToBase64(iv)}-${arrayBufferToBase64(ciphertextBuffer)}`;
|
|
43
|
+
|
|
44
|
+
// Return the base64 encoded ciphertext and key
|
|
45
|
+
return {
|
|
46
|
+
ciphertext,
|
|
47
|
+
key: arrayBufferToBase64(rawKey),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Decrypts previously sealed object.
|
|
53
|
+
* @template T Type of data that was encrypted
|
|
54
|
+
* @param sealed Sealed object containing ciphertext and key
|
|
55
|
+
* @returns Promise resolving to the original decrypted data
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
export async function unseal<T>({ ciphertext, key }: Sealed): Promise<T> {
|
|
59
|
+
// Split the IV and the ciphertext
|
|
60
|
+
const [ivBase64, ciphertextBase64] = ciphertext.split('-');
|
|
61
|
+
|
|
62
|
+
// Decode the key, IV, and ciphertext
|
|
63
|
+
const rawKey = new Uint8Array(
|
|
64
|
+
atob(key)
|
|
65
|
+
.split('')
|
|
66
|
+
.map((c) => c.charCodeAt(0)),
|
|
67
|
+
);
|
|
68
|
+
const iv = base64ToUint8Array(ivBase64);
|
|
69
|
+
const ciphertextBuffer = base64ToUint8Array(ciphertextBase64);
|
|
70
|
+
|
|
71
|
+
// Import the key
|
|
72
|
+
const keyObj = await crypto.subtle.importKey(
|
|
73
|
+
'raw',
|
|
74
|
+
rawKey,
|
|
75
|
+
{ name: 'AES-GCM' },
|
|
76
|
+
false,
|
|
77
|
+
['decrypt'],
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
// Decrypt the ciphertext
|
|
81
|
+
const decoder = new TextDecoder();
|
|
82
|
+
const plaintextBuffer = await crypto.subtle.decrypt(
|
|
83
|
+
{ name: 'AES-GCM', iv: new Uint8Array(iv) },
|
|
84
|
+
keyObj,
|
|
85
|
+
ciphertextBuffer,
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
// Parse and return the original object
|
|
89
|
+
return JSON.parse(decoder.decode(plaintextBuffer));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Utility function to convert ArrayBuffer to Base64
|
|
93
|
+
function arrayBufferToBase64(buffer: ArrayBuffer): string {
|
|
94
|
+
const uint8Array = new Uint8Array(buffer);
|
|
95
|
+
let binary = '';
|
|
96
|
+
for (let i = 0; i < uint8Array.length; i++) {
|
|
97
|
+
binary += String.fromCharCode(uint8Array[i]);
|
|
98
|
+
}
|
|
99
|
+
return btoa(binary);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Utility function to convert Base64 to ArrayBuffer
|
|
103
|
+
|
|
104
|
+
function base64ToUint8Array(base64: string): Uint8Array {
|
|
105
|
+
const binary = atob(base64);
|
|
106
|
+
const buffer = new Uint8Array(binary.length);
|
|
107
|
+
for (let i = 0; i < binary.length; i++) {
|
|
108
|
+
buffer[i] = binary.charCodeAt(i);
|
|
109
|
+
}
|
|
110
|
+
return buffer;
|
|
111
|
+
}
|