@textrp/briij-js-sdk 42.0.0 → 43.1.0
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/CHANGELOG.md +7 -4
- package/README.md +71 -0
- package/lib/@types/auth.d.ts +57 -2
- package/lib/@types/auth.d.ts.map +1 -1
- package/lib/@types/auth.js +2 -0
- package/lib/@types/auth.js.map +1 -1
- package/lib/@types/event.d.ts +3 -0
- package/lib/@types/event.d.ts.map +1 -1
- package/lib/@types/event.js.map +1 -1
- package/lib/@types/synapse.d.ts +64 -0
- package/lib/@types/synapse.d.ts.map +1 -1
- package/lib/@types/synapse.js.map +1 -1
- package/lib/briij.d.ts +2 -0
- package/lib/briij.d.ts.map +1 -1
- package/lib/briij.js +2 -0
- package/lib/briij.js.map +1 -1
- package/lib/client.d.ts +100 -7
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +469 -213
- package/lib/client.js.map +1 -1
- package/lib/wallet-recovery.d.ts +24 -0
- package/lib/wallet-recovery.d.ts.map +1 -0
- package/lib/wallet-recovery.js +256 -0
- package/lib/wallet-recovery.js.map +1 -0
- package/lib/xrpl/identity.d.ts +2 -1
- package/lib/xrpl/identity.d.ts.map +1 -1
- package/lib/xrpl/identity.js +70 -47
- package/lib/xrpl/identity.js.map +1 -1
- package/lib/xrpl/trust.d.ts +4 -2
- package/lib/xrpl/trust.d.ts.map +1 -1
- package/lib/xrpl/trust.js +31 -19
- package/lib/xrpl/trust.js.map +1 -1
- package/lib/xrpl/verification.js +17 -6
- package/lib/xrpl/verification.js.map +1 -1
- package/package.json +1 -1
- package/src/@types/auth.ts +61 -2
- package/src/@types/event.ts +3 -0
- package/src/@types/synapse.ts +77 -0
- package/src/briij.ts +2 -0
- package/src/client.ts +344 -46
- package/src/wallet-recovery.ts +327 -0
- package/src/xrpl/identity.ts +66 -39
- package/src/xrpl/trust.ts +35 -18
- package/src/xrpl/verification.ts +19 -6
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type WalletE2eeRecoveryEnvelope } from "./@types/auth.ts";
|
|
2
|
+
export interface CreateDualWrapEnvelopeParams {
|
|
3
|
+
chainId: string;
|
|
4
|
+
accountId: string;
|
|
5
|
+
backupPassword: string;
|
|
6
|
+
walletWrapKey: Uint8Array;
|
|
7
|
+
createdAtMs?: number;
|
|
8
|
+
keyId?: string;
|
|
9
|
+
recoveryKey?: Uint8Array;
|
|
10
|
+
}
|
|
11
|
+
export interface UnwrapWithWalletParams {
|
|
12
|
+
envelope: WalletE2eeRecoveryEnvelope;
|
|
13
|
+
walletWrapKey: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
export interface UnwrapWithPasswordParams {
|
|
16
|
+
envelope: WalletE2eeRecoveryEnvelope;
|
|
17
|
+
backupPassword: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function deriveWalletWrapKeyFromSecret(walletSecret: string, chainId: string, accountId: string, homeserver: string): Promise<Uint8Array>;
|
|
20
|
+
export declare function validateRecoveryEnvelopeShape(value: unknown): asserts value is WalletE2eeRecoveryEnvelope;
|
|
21
|
+
export declare function createDualWrapEnvelope(params: CreateDualWrapEnvelopeParams): Promise<WalletE2eeRecoveryEnvelope>;
|
|
22
|
+
export declare function unwrapWithWallet({ envelope, walletWrapKey }: UnwrapWithWalletParams): Promise<Uint8Array>;
|
|
23
|
+
export declare function unwrapWithPassword({ envelope, backupPassword }: UnwrapWithPasswordParams): Promise<Uint8Array>;
|
|
24
|
+
//# sourceMappingURL=wallet-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-recovery.d.ts","sourceRoot":"","sources":["../src/wallet-recovery.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,0BAA0B,EAA2B,MAAM,kBAAkB,CAAC;AAW5F,MAAM,WAAW,4BAA4B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,0BAA0B,CAAC;IACrC,aAAa,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACrC,QAAQ,EAAE,0BAA0B,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;CAC1B;AAgID,wBAAsB,6BAA6B,CAC/C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAuEzG;AAED,wBAAsB,sBAAsB,CACxC,MAAM,EAAE,4BAA4B,GACrC,OAAO,CAAC,0BAA0B,CAAC,CAwCrC;AAED,wBAAsB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAG/G;AAED,wBAAsB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,wBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC,CAKpH"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
/*
|
|
3
|
+
Copyright 2026 TextRP
|
|
4
|
+
|
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
you may not use this file except in compliance with the License.
|
|
7
|
+
You may obtain a copy of the License at
|
|
8
|
+
|
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
|
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
See the License for the specific language governing permissions and
|
|
15
|
+
limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
var ENVELOPE_VERSION = 1;
|
|
19
|
+
var KEY_BYTES = 32;
|
|
20
|
+
var NONCE_BYTES = 12;
|
|
21
|
+
var SALT_BYTES = 16;
|
|
22
|
+
var PASSWORD_KDF_ITERATIONS = 210000;
|
|
23
|
+
var SUPPORTED_WRAP_ALG = "aes-256-gcm";
|
|
24
|
+
var SUPPORTED_WALLET_WRAP_KDF = "sha256-context-v1";
|
|
25
|
+
var SUPPORTED_PASSWORD_WRAP_KDF = "pbkdf2-sha256-v1";
|
|
26
|
+
function assert(condition, message) {
|
|
27
|
+
if (!condition) throw new Error(message);
|
|
28
|
+
}
|
|
29
|
+
function toBase64(bytes) {
|
|
30
|
+
if (typeof Buffer !== "undefined") return Buffer.from(bytes).toString("base64");
|
|
31
|
+
var binary = "";
|
|
32
|
+
bytes.forEach(b => binary += String.fromCodePoint(b));
|
|
33
|
+
return btoa(binary);
|
|
34
|
+
}
|
|
35
|
+
function fromBase64(value) {
|
|
36
|
+
if (typeof Buffer !== "undefined") return new Uint8Array(Buffer.from(value, "base64"));
|
|
37
|
+
var binary = atob(value);
|
|
38
|
+
var out = new Uint8Array(binary.length);
|
|
39
|
+
for (var i = 0; i < binary.length; i++) out[i] = binary.codePointAt(i);
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
function toUtf8(value) {
|
|
43
|
+
return new TextEncoder().encode(value);
|
|
44
|
+
}
|
|
45
|
+
function toArrayBuffer(value) {
|
|
46
|
+
return value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength);
|
|
47
|
+
}
|
|
48
|
+
function randomBytes(len) {
|
|
49
|
+
var out = new Uint8Array(len);
|
|
50
|
+
globalThis.crypto.getRandomValues(out);
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
function importAesGcmKey(_x) {
|
|
54
|
+
return _importAesGcmKey.apply(this, arguments);
|
|
55
|
+
}
|
|
56
|
+
function _importAesGcmKey() {
|
|
57
|
+
_importAesGcmKey = _asyncToGenerator(function* (key) {
|
|
58
|
+
return yield globalThis.crypto.subtle.importKey("raw", toArrayBuffer(key), {
|
|
59
|
+
name: "AES-GCM"
|
|
60
|
+
}, false, ["encrypt", "decrypt"]);
|
|
61
|
+
});
|
|
62
|
+
return _importAesGcmKey.apply(this, arguments);
|
|
63
|
+
}
|
|
64
|
+
function encryptWrap(_x2, _x3) {
|
|
65
|
+
return _encryptWrap.apply(this, arguments);
|
|
66
|
+
}
|
|
67
|
+
function _encryptWrap() {
|
|
68
|
+
_encryptWrap = _asyncToGenerator(function* (plaintext, _ref) {
|
|
69
|
+
var {
|
|
70
|
+
key,
|
|
71
|
+
aad,
|
|
72
|
+
kdf,
|
|
73
|
+
params
|
|
74
|
+
} = _ref;
|
|
75
|
+
assert(key.length >= KEY_BYTES, "wallet recovery key must be at least 32 bytes");
|
|
76
|
+
var salt = randomBytes(SALT_BYTES);
|
|
77
|
+
var nonce = randomBytes(NONCE_BYTES);
|
|
78
|
+
var cryptoKey = yield importAesGcmKey(key.slice(0, KEY_BYTES));
|
|
79
|
+
var ciphertext = yield globalThis.crypto.subtle.encrypt({
|
|
80
|
+
name: "AES-GCM",
|
|
81
|
+
iv: toArrayBuffer(nonce),
|
|
82
|
+
additionalData: toArrayBuffer(aad),
|
|
83
|
+
tagLength: 128
|
|
84
|
+
}, cryptoKey, toArrayBuffer(plaintext));
|
|
85
|
+
return {
|
|
86
|
+
alg: "aes-256-gcm",
|
|
87
|
+
kdf,
|
|
88
|
+
salt: toBase64(salt),
|
|
89
|
+
nonce: toBase64(nonce),
|
|
90
|
+
ciphertext: toBase64(new Uint8Array(ciphertext)),
|
|
91
|
+
aad: toBase64(aad),
|
|
92
|
+
params
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
return _encryptWrap.apply(this, arguments);
|
|
96
|
+
}
|
|
97
|
+
function decryptWrap(_x4, _x5) {
|
|
98
|
+
return _decryptWrap.apply(this, arguments);
|
|
99
|
+
}
|
|
100
|
+
function _decryptWrap() {
|
|
101
|
+
_decryptWrap = _asyncToGenerator(function* (wrap, key) {
|
|
102
|
+
assert(wrap.alg === SUPPORTED_WRAP_ALG, "Unsupported recovery wrap alg '".concat(wrap.alg, "', expected '").concat(SUPPORTED_WRAP_ALG, "'"));
|
|
103
|
+
assert(wrap.kdf === SUPPORTED_WALLET_WRAP_KDF || wrap.kdf === SUPPORTED_PASSWORD_WRAP_KDF, "Unsupported recovery wrap kdf '".concat(wrap.kdf, "'"));
|
|
104
|
+
var nonce = fromBase64(wrap.nonce);
|
|
105
|
+
var aad = wrap.aad ? fromBase64(wrap.aad) : new Uint8Array();
|
|
106
|
+
var ciphertext = fromBase64(wrap.ciphertext);
|
|
107
|
+
var cryptoKey = yield importAesGcmKey(key.slice(0, KEY_BYTES));
|
|
108
|
+
var plaintext = yield globalThis.crypto.subtle.decrypt({
|
|
109
|
+
name: "AES-GCM",
|
|
110
|
+
iv: toArrayBuffer(nonce),
|
|
111
|
+
additionalData: toArrayBuffer(aad),
|
|
112
|
+
tagLength: 128
|
|
113
|
+
}, cryptoKey, toArrayBuffer(ciphertext));
|
|
114
|
+
return new Uint8Array(plaintext);
|
|
115
|
+
});
|
|
116
|
+
return _decryptWrap.apply(this, arguments);
|
|
117
|
+
}
|
|
118
|
+
function derivePasswordWrapKey(_x6, _x7) {
|
|
119
|
+
return _derivePasswordWrapKey.apply(this, arguments);
|
|
120
|
+
}
|
|
121
|
+
function _derivePasswordWrapKey() {
|
|
122
|
+
_derivePasswordWrapKey = _asyncToGenerator(function* (password, salt) {
|
|
123
|
+
var keyMaterial = yield globalThis.crypto.subtle.importKey("raw", toArrayBuffer(toUtf8(password)), "PBKDF2", false, ["deriveBits"]);
|
|
124
|
+
var bits = yield globalThis.crypto.subtle.deriveBits({
|
|
125
|
+
name: "PBKDF2",
|
|
126
|
+
hash: "SHA-256",
|
|
127
|
+
salt: toArrayBuffer(salt),
|
|
128
|
+
iterations: PASSWORD_KDF_ITERATIONS
|
|
129
|
+
}, keyMaterial, KEY_BYTES * 8);
|
|
130
|
+
return new Uint8Array(bits);
|
|
131
|
+
});
|
|
132
|
+
return _derivePasswordWrapKey.apply(this, arguments);
|
|
133
|
+
}
|
|
134
|
+
export function deriveWalletWrapKeyFromSecret(_x8, _x9, _x0, _x1) {
|
|
135
|
+
return _deriveWalletWrapKeyFromSecret.apply(this, arguments);
|
|
136
|
+
}
|
|
137
|
+
function _deriveWalletWrapKeyFromSecret() {
|
|
138
|
+
_deriveWalletWrapKeyFromSecret = _asyncToGenerator(function* (walletSecret, chainId, accountId, homeserver) {
|
|
139
|
+
var canonicalHomeserver = canonicalizeHomeserver(homeserver);
|
|
140
|
+
var context = "briij-wallet-auth-wrap-v1:".concat(canonicalHomeserver, ":").concat(chainId, ":").concat(accountId);
|
|
141
|
+
var digest = yield globalThis.crypto.subtle.digest("SHA-256", toArrayBuffer(toUtf8("".concat(context, ":").concat(walletSecret))));
|
|
142
|
+
return new Uint8Array(digest);
|
|
143
|
+
});
|
|
144
|
+
return _deriveWalletWrapKeyFromSecret.apply(this, arguments);
|
|
145
|
+
}
|
|
146
|
+
export function validateRecoveryEnvelopeShape(value) {
|
|
147
|
+
assert(!!value && typeof value === "object", "recovery envelope must be an object");
|
|
148
|
+
var envelope = value;
|
|
149
|
+
assert(typeof envelope.envelope_version === "number", "envelope_version must be a number");
|
|
150
|
+
assert(envelope.envelope_version === ENVELOPE_VERSION, "Unsupported envelope_version '".concat(envelope.envelope_version, "', expected '").concat(ENVELOPE_VERSION, "'"));
|
|
151
|
+
assert(typeof envelope.chain_id === "string" && envelope.chain_id.length > 0, "chain_id is required");
|
|
152
|
+
assert(typeof envelope.account_id === "string" && envelope.account_id.length > 0, "account_id is required");
|
|
153
|
+
assert(typeof envelope.created_at_ms === "number", "created_at_ms must be a number");
|
|
154
|
+
assert(typeof envelope.key_id === "string" && envelope.key_id.length > 0, "key_id is required");
|
|
155
|
+
assert(!!envelope.wallet_wrap && typeof envelope.wallet_wrap === "object", "wallet_wrap is required");
|
|
156
|
+
assert(!!envelope.password_wrap && typeof envelope.password_wrap === "object", "password_wrap is required");
|
|
157
|
+
assert(typeof envelope.wallet_wrap.alg === "string" && envelope.wallet_wrap.alg.length > 0, "wallet_wrap.alg is required");
|
|
158
|
+
assert(typeof envelope.wallet_wrap.kdf === "string" && envelope.wallet_wrap.kdf.length > 0, "wallet_wrap.kdf is required");
|
|
159
|
+
assert(envelope.wallet_wrap.alg === SUPPORTED_WRAP_ALG, "Unsupported wallet_wrap.alg '".concat(envelope.wallet_wrap.alg, "', expected '").concat(SUPPORTED_WRAP_ALG, "'"));
|
|
160
|
+
assert(envelope.wallet_wrap.kdf === SUPPORTED_WALLET_WRAP_KDF, "Unsupported wallet_wrap.kdf '".concat(envelope.wallet_wrap.kdf, "', expected '").concat(SUPPORTED_WALLET_WRAP_KDF, "'"));
|
|
161
|
+
assert(typeof envelope.wallet_wrap.salt === "string" && envelope.wallet_wrap.salt.length > 0, "wallet_wrap.salt is required");
|
|
162
|
+
assert(typeof envelope.wallet_wrap.nonce === "string" && envelope.wallet_wrap.nonce.length > 0, "wallet_wrap.nonce is required");
|
|
163
|
+
assert(typeof envelope.wallet_wrap.ciphertext === "string" && envelope.wallet_wrap.ciphertext.length > 0, "wallet_wrap.ciphertext is required");
|
|
164
|
+
assert(typeof envelope.password_wrap.alg === "string" && envelope.password_wrap.alg.length > 0, "password_wrap.alg is required");
|
|
165
|
+
assert(typeof envelope.password_wrap.kdf === "string" && envelope.password_wrap.kdf.length > 0, "password_wrap.kdf is required");
|
|
166
|
+
assert(envelope.password_wrap.alg === SUPPORTED_WRAP_ALG, "Unsupported password_wrap.alg '".concat(envelope.password_wrap.alg, "', expected '").concat(SUPPORTED_WRAP_ALG, "'"));
|
|
167
|
+
assert(envelope.password_wrap.kdf === SUPPORTED_PASSWORD_WRAP_KDF, "Unsupported password_wrap.kdf '".concat(envelope.password_wrap.kdf, "', expected '").concat(SUPPORTED_PASSWORD_WRAP_KDF, "'"));
|
|
168
|
+
assert(typeof envelope.password_wrap.salt === "string" && envelope.password_wrap.salt.length > 0, "password_wrap.salt is required");
|
|
169
|
+
assert(typeof envelope.password_wrap.nonce === "string" && envelope.password_wrap.nonce.length > 0, "password_wrap.nonce is required");
|
|
170
|
+
assert(typeof envelope.password_wrap.ciphertext === "string" && envelope.password_wrap.ciphertext.length > 0, "password_wrap.ciphertext is required");
|
|
171
|
+
}
|
|
172
|
+
export function createDualWrapEnvelope(_x10) {
|
|
173
|
+
return _createDualWrapEnvelope.apply(this, arguments);
|
|
174
|
+
}
|
|
175
|
+
function _createDualWrapEnvelope() {
|
|
176
|
+
_createDualWrapEnvelope = _asyncToGenerator(function* (params) {
|
|
177
|
+
var _params$createdAtMs, _params$keyId, _params$recoveryKey;
|
|
178
|
+
assert(params.chainId.length > 0, "chainId is required");
|
|
179
|
+
assert(params.accountId.length > 0, "accountId is required");
|
|
180
|
+
assert(params.backupPassword.length > 0, "backupPassword is required");
|
|
181
|
+
assert(params.walletWrapKey.length >= KEY_BYTES, "walletWrapKey must be at least 32 bytes");
|
|
182
|
+
var createdAtMs = (_params$createdAtMs = params.createdAtMs) !== null && _params$createdAtMs !== void 0 ? _params$createdAtMs : Date.now();
|
|
183
|
+
var keyId = (_params$keyId = params.keyId) !== null && _params$keyId !== void 0 ? _params$keyId : "k-".concat(toBase64(randomBytes(8)).replace(/=+$/g, ""));
|
|
184
|
+
var recoveryKey = (_params$recoveryKey = params.recoveryKey) !== null && _params$recoveryKey !== void 0 ? _params$recoveryKey : randomBytes(KEY_BYTES);
|
|
185
|
+
assert(recoveryKey.length === KEY_BYTES, "recoveryKey must be 32 bytes");
|
|
186
|
+
var aad = toUtf8("briij-recovery-envelope-v1:".concat(params.chainId, ":").concat(params.accountId, ":").concat(keyId, ":").concat(createdAtMs));
|
|
187
|
+
var walletWrap = yield encryptWrap(recoveryKey, {
|
|
188
|
+
key: params.walletWrapKey,
|
|
189
|
+
aad,
|
|
190
|
+
kdf: "sha256-context-v1"
|
|
191
|
+
});
|
|
192
|
+
var passwordSalt = randomBytes(SALT_BYTES);
|
|
193
|
+
var passwordWrapKey = yield derivePasswordWrapKey(params.backupPassword, passwordSalt);
|
|
194
|
+
var passwordWrap = yield encryptWrap(recoveryKey, {
|
|
195
|
+
key: passwordWrapKey,
|
|
196
|
+
aad,
|
|
197
|
+
kdf: "pbkdf2-sha256-v1",
|
|
198
|
+
params: {
|
|
199
|
+
iterations: PASSWORD_KDF_ITERATIONS,
|
|
200
|
+
hash: "SHA-256"
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
passwordWrap.salt = toBase64(passwordSalt);
|
|
204
|
+
return {
|
|
205
|
+
envelope_version: ENVELOPE_VERSION,
|
|
206
|
+
chain_id: params.chainId,
|
|
207
|
+
account_id: params.accountId,
|
|
208
|
+
created_at_ms: createdAtMs,
|
|
209
|
+
key_id: keyId,
|
|
210
|
+
wallet_wrap: walletWrap,
|
|
211
|
+
password_wrap: passwordWrap
|
|
212
|
+
};
|
|
213
|
+
});
|
|
214
|
+
return _createDualWrapEnvelope.apply(this, arguments);
|
|
215
|
+
}
|
|
216
|
+
export function unwrapWithWallet(_x11) {
|
|
217
|
+
return _unwrapWithWallet.apply(this, arguments);
|
|
218
|
+
}
|
|
219
|
+
function _unwrapWithWallet() {
|
|
220
|
+
_unwrapWithWallet = _asyncToGenerator(function* (_ref2) {
|
|
221
|
+
var {
|
|
222
|
+
envelope,
|
|
223
|
+
walletWrapKey
|
|
224
|
+
} = _ref2;
|
|
225
|
+
validateRecoveryEnvelopeShape(envelope);
|
|
226
|
+
return yield decryptWrap(envelope.wallet_wrap, walletWrapKey);
|
|
227
|
+
});
|
|
228
|
+
return _unwrapWithWallet.apply(this, arguments);
|
|
229
|
+
}
|
|
230
|
+
export function unwrapWithPassword(_x12) {
|
|
231
|
+
return _unwrapWithPassword.apply(this, arguments);
|
|
232
|
+
}
|
|
233
|
+
function _unwrapWithPassword() {
|
|
234
|
+
_unwrapWithPassword = _asyncToGenerator(function* (_ref3) {
|
|
235
|
+
var {
|
|
236
|
+
envelope,
|
|
237
|
+
backupPassword
|
|
238
|
+
} = _ref3;
|
|
239
|
+
validateRecoveryEnvelopeShape(envelope);
|
|
240
|
+
var passwordSalt = fromBase64(envelope.password_wrap.salt);
|
|
241
|
+
var passwordWrapKey = yield derivePasswordWrapKey(backupPassword, passwordSalt);
|
|
242
|
+
return yield decryptWrap(envelope.password_wrap, passwordWrapKey);
|
|
243
|
+
});
|
|
244
|
+
return _unwrapWithPassword.apply(this, arguments);
|
|
245
|
+
}
|
|
246
|
+
function canonicalizeHomeserver(homeserver) {
|
|
247
|
+
var trimmed = homeserver.trim().replace(/\/+$/, "");
|
|
248
|
+
try {
|
|
249
|
+
var parsed = new URL(trimmed);
|
|
250
|
+
parsed.hostname = parsed.hostname.toLowerCase();
|
|
251
|
+
return parsed.toString().replace(/\/+$/, "");
|
|
252
|
+
} catch (_unused) {
|
|
253
|
+
return trimmed.toLowerCase();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=wallet-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-recovery.js","names":["ENVELOPE_VERSION","KEY_BYTES","NONCE_BYTES","SALT_BYTES","PASSWORD_KDF_ITERATIONS","SUPPORTED_WRAP_ALG","SUPPORTED_WALLET_WRAP_KDF","SUPPORTED_PASSWORD_WRAP_KDF","assert","condition","message","Error","toBase64","bytes","Buffer","from","toString","binary","forEach","b","String","fromCodePoint","btoa","fromBase64","value","Uint8Array","atob","out","length","i","codePointAt","toUtf8","TextEncoder","encode","toArrayBuffer","buffer","slice","byteOffset","byteLength","randomBytes","len","globalThis","crypto","getRandomValues","importAesGcmKey","_x","_importAesGcmKey","apply","arguments","_asyncToGenerator","key","subtle","importKey","name","encryptWrap","_x2","_x3","_encryptWrap","plaintext","_ref","aad","kdf","params","salt","nonce","cryptoKey","ciphertext","encrypt","iv","additionalData","tagLength","alg","decryptWrap","_x4","_x5","_decryptWrap","wrap","concat","decrypt","derivePasswordWrapKey","_x6","_x7","_derivePasswordWrapKey","password","keyMaterial","bits","deriveBits","hash","iterations","deriveWalletWrapKeyFromSecret","_x8","_x9","_x0","_x1","_deriveWalletWrapKeyFromSecret","walletSecret","chainId","accountId","homeserver","canonicalHomeserver","canonicalizeHomeserver","context","digest","validateRecoveryEnvelopeShape","envelope","envelope_version","chain_id","account_id","created_at_ms","key_id","wallet_wrap","password_wrap","createDualWrapEnvelope","_x10","_createDualWrapEnvelope","_params$createdAtMs","_params$keyId","_params$recoveryKey","backupPassword","walletWrapKey","createdAtMs","Date","now","keyId","replace","recoveryKey","walletWrap","passwordSalt","passwordWrapKey","passwordWrap","unwrapWithWallet","_x11","_unwrapWithWallet","_ref2","unwrapWithPassword","_x12","_unwrapWithPassword","_ref3","trimmed","trim","parsed","URL","hostname","toLowerCase","_unused"],"sources":["../src/wallet-recovery.ts"],"sourcesContent":["/*\nCopyright 2026 TextRP\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n\nimport { type WalletE2eeRecoveryEnvelope, type WalletRecoveryWrap } from \"./@types/auth.ts\";\n\nconst ENVELOPE_VERSION = 1;\nconst KEY_BYTES = 32;\nconst NONCE_BYTES = 12;\nconst SALT_BYTES = 16;\nconst PASSWORD_KDF_ITERATIONS = 210_000;\nconst SUPPORTED_WRAP_ALG = \"aes-256-gcm\";\nconst SUPPORTED_WALLET_WRAP_KDF = \"sha256-context-v1\";\nconst SUPPORTED_PASSWORD_WRAP_KDF = \"pbkdf2-sha256-v1\";\n\nexport interface CreateDualWrapEnvelopeParams {\n chainId: string;\n accountId: string;\n backupPassword: string;\n walletWrapKey: Uint8Array;\n createdAtMs?: number;\n keyId?: string;\n recoveryKey?: Uint8Array;\n}\n\nexport interface UnwrapWithWalletParams {\n envelope: WalletE2eeRecoveryEnvelope;\n walletWrapKey: Uint8Array;\n}\n\nexport interface UnwrapWithPasswordParams {\n envelope: WalletE2eeRecoveryEnvelope;\n backupPassword: string;\n}\n\nfunction assert(condition: boolean, message: string): asserts condition {\n if (!condition) throw new Error(message);\n}\n\nfunction toBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== \"undefined\") return Buffer.from(bytes).toString(\"base64\");\n let binary = \"\";\n bytes.forEach((b) => (binary += String.fromCodePoint(b)));\n return btoa(binary);\n}\n\nfunction fromBase64(value: string): Uint8Array {\n if (typeof Buffer !== \"undefined\") return new Uint8Array(Buffer.from(value, \"base64\"));\n const binary = atob(value);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) out[i] = binary.codePointAt(i)!;\n return out;\n}\n\nfunction toUtf8(value: string): Uint8Array {\n return new TextEncoder().encode(value);\n}\n\nfunction toArrayBuffer(value: Uint8Array): ArrayBuffer {\n return value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength) as ArrayBuffer;\n}\n\nfunction randomBytes(len: number): Uint8Array {\n const out = new Uint8Array(len);\n globalThis.crypto.getRandomValues(out);\n return out;\n}\n\nasync function importAesGcmKey(key: Uint8Array): Promise<CryptoKey> {\n return await globalThis.crypto.subtle.importKey(\"raw\", toArrayBuffer(key), { name: \"AES-GCM\" }, false, [\n \"encrypt\",\n \"decrypt\",\n ]);\n}\n\nasync function encryptWrap(\n plaintext: Uint8Array,\n {\n key,\n aad,\n kdf,\n params,\n }: {\n key: Uint8Array;\n aad: Uint8Array;\n kdf: string;\n params?: Record<string, unknown>;\n },\n): Promise<WalletRecoveryWrap> {\n assert(key.length >= KEY_BYTES, \"wallet recovery key must be at least 32 bytes\");\n const salt = randomBytes(SALT_BYTES);\n const nonce = randomBytes(NONCE_BYTES);\n const cryptoKey = await importAesGcmKey(key.slice(0, KEY_BYTES));\n const ciphertext = await globalThis.crypto.subtle.encrypt(\n {\n name: \"AES-GCM\",\n iv: toArrayBuffer(nonce),\n additionalData: toArrayBuffer(aad),\n tagLength: 128,\n },\n cryptoKey,\n toArrayBuffer(plaintext),\n );\n return {\n alg: \"aes-256-gcm\",\n kdf,\n salt: toBase64(salt),\n nonce: toBase64(nonce),\n ciphertext: toBase64(new Uint8Array(ciphertext)),\n aad: toBase64(aad),\n params,\n };\n}\n\nasync function decryptWrap(wrap: WalletRecoveryWrap, key: Uint8Array): Promise<Uint8Array> {\n assert(\n wrap.alg === SUPPORTED_WRAP_ALG,\n `Unsupported recovery wrap alg '${wrap.alg}', expected '${SUPPORTED_WRAP_ALG}'`,\n );\n assert(\n wrap.kdf === SUPPORTED_WALLET_WRAP_KDF || wrap.kdf === SUPPORTED_PASSWORD_WRAP_KDF,\n `Unsupported recovery wrap kdf '${wrap.kdf}'`,\n );\n const nonce = fromBase64(wrap.nonce);\n const aad = wrap.aad ? fromBase64(wrap.aad) : new Uint8Array();\n const ciphertext = fromBase64(wrap.ciphertext);\n const cryptoKey = await importAesGcmKey(key.slice(0, KEY_BYTES));\n const plaintext = await globalThis.crypto.subtle.decrypt(\n {\n name: \"AES-GCM\",\n iv: toArrayBuffer(nonce),\n additionalData: toArrayBuffer(aad),\n tagLength: 128,\n },\n cryptoKey,\n toArrayBuffer(ciphertext),\n );\n return new Uint8Array(plaintext);\n}\n\nasync function derivePasswordWrapKey(password: string, salt: Uint8Array): Promise<Uint8Array> {\n const keyMaterial = await globalThis.crypto.subtle.importKey(\n \"raw\",\n toArrayBuffer(toUtf8(password)),\n \"PBKDF2\",\n false,\n [\"deriveBits\"],\n );\n const bits = await globalThis.crypto.subtle.deriveBits(\n {\n name: \"PBKDF2\",\n hash: \"SHA-256\",\n salt: toArrayBuffer(salt),\n iterations: PASSWORD_KDF_ITERATIONS,\n },\n keyMaterial,\n KEY_BYTES * 8,\n );\n return new Uint8Array(bits);\n}\n\nexport async function deriveWalletWrapKeyFromSecret(\n walletSecret: string,\n chainId: string,\n accountId: string,\n homeserver: string,\n): Promise<Uint8Array> {\n const canonicalHomeserver = canonicalizeHomeserver(homeserver);\n const context = `briij-wallet-auth-wrap-v1:${canonicalHomeserver}:${chainId}:${accountId}`;\n const digest = await globalThis.crypto.subtle.digest(\n \"SHA-256\",\n toArrayBuffer(toUtf8(`${context}:${walletSecret}`)),\n );\n return new Uint8Array(digest);\n}\n\nexport function validateRecoveryEnvelopeShape(value: unknown): asserts value is WalletE2eeRecoveryEnvelope {\n assert(!!value && typeof value === \"object\", \"recovery envelope must be an object\");\n const envelope = value as WalletE2eeRecoveryEnvelope;\n assert(typeof envelope.envelope_version === \"number\", \"envelope_version must be a number\");\n assert(\n envelope.envelope_version === ENVELOPE_VERSION,\n `Unsupported envelope_version '${envelope.envelope_version}', expected '${ENVELOPE_VERSION}'`,\n );\n assert(typeof envelope.chain_id === \"string\" && envelope.chain_id.length > 0, \"chain_id is required\");\n assert(typeof envelope.account_id === \"string\" && envelope.account_id.length > 0, \"account_id is required\");\n assert(typeof envelope.created_at_ms === \"number\", \"created_at_ms must be a number\");\n assert(typeof envelope.key_id === \"string\" && envelope.key_id.length > 0, \"key_id is required\");\n assert(!!envelope.wallet_wrap && typeof envelope.wallet_wrap === \"object\", \"wallet_wrap is required\");\n assert(!!envelope.password_wrap && typeof envelope.password_wrap === \"object\", \"password_wrap is required\");\n assert(\n typeof envelope.wallet_wrap.alg === \"string\" && envelope.wallet_wrap.alg.length > 0,\n \"wallet_wrap.alg is required\",\n );\n assert(\n typeof envelope.wallet_wrap.kdf === \"string\" && envelope.wallet_wrap.kdf.length > 0,\n \"wallet_wrap.kdf is required\",\n );\n assert(\n envelope.wallet_wrap.alg === SUPPORTED_WRAP_ALG,\n `Unsupported wallet_wrap.alg '${envelope.wallet_wrap.alg}', expected '${SUPPORTED_WRAP_ALG}'`,\n );\n assert(\n envelope.wallet_wrap.kdf === SUPPORTED_WALLET_WRAP_KDF,\n `Unsupported wallet_wrap.kdf '${envelope.wallet_wrap.kdf}', expected '${SUPPORTED_WALLET_WRAP_KDF}'`,\n );\n assert(\n typeof envelope.wallet_wrap.salt === \"string\" && envelope.wallet_wrap.salt.length > 0,\n \"wallet_wrap.salt is required\",\n );\n assert(\n typeof envelope.wallet_wrap.nonce === \"string\" && envelope.wallet_wrap.nonce.length > 0,\n \"wallet_wrap.nonce is required\",\n );\n assert(\n typeof envelope.wallet_wrap.ciphertext === \"string\" && envelope.wallet_wrap.ciphertext.length > 0,\n \"wallet_wrap.ciphertext is required\",\n );\n\n assert(\n typeof envelope.password_wrap.alg === \"string\" && envelope.password_wrap.alg.length > 0,\n \"password_wrap.alg is required\",\n );\n assert(\n typeof envelope.password_wrap.kdf === \"string\" && envelope.password_wrap.kdf.length > 0,\n \"password_wrap.kdf is required\",\n );\n assert(\n envelope.password_wrap.alg === SUPPORTED_WRAP_ALG,\n `Unsupported password_wrap.alg '${envelope.password_wrap.alg}', expected '${SUPPORTED_WRAP_ALG}'`,\n );\n assert(\n envelope.password_wrap.kdf === SUPPORTED_PASSWORD_WRAP_KDF,\n `Unsupported password_wrap.kdf '${envelope.password_wrap.kdf}', expected '${SUPPORTED_PASSWORD_WRAP_KDF}'`,\n );\n assert(\n typeof envelope.password_wrap.salt === \"string\" && envelope.password_wrap.salt.length > 0,\n \"password_wrap.salt is required\",\n );\n assert(\n typeof envelope.password_wrap.nonce === \"string\" && envelope.password_wrap.nonce.length > 0,\n \"password_wrap.nonce is required\",\n );\n assert(\n typeof envelope.password_wrap.ciphertext === \"string\" && envelope.password_wrap.ciphertext.length > 0,\n \"password_wrap.ciphertext is required\",\n );\n}\n\nexport async function createDualWrapEnvelope(\n params: CreateDualWrapEnvelopeParams,\n): Promise<WalletE2eeRecoveryEnvelope> {\n assert(params.chainId.length > 0, \"chainId is required\");\n assert(params.accountId.length > 0, \"accountId is required\");\n assert(params.backupPassword.length > 0, \"backupPassword is required\");\n assert(params.walletWrapKey.length >= KEY_BYTES, \"walletWrapKey must be at least 32 bytes\");\n\n const createdAtMs = params.createdAtMs ?? Date.now();\n const keyId = params.keyId ?? `k-${toBase64(randomBytes(8)).replace(/=+$/g, \"\")}`;\n const recoveryKey = params.recoveryKey ?? randomBytes(KEY_BYTES);\n assert(recoveryKey.length === KEY_BYTES, \"recoveryKey must be 32 bytes\");\n\n const aad = toUtf8(`briij-recovery-envelope-v1:${params.chainId}:${params.accountId}:${keyId}:${createdAtMs}`);\n const walletWrap = await encryptWrap(recoveryKey, {\n key: params.walletWrapKey,\n aad,\n kdf: \"sha256-context-v1\",\n });\n\n const passwordSalt = randomBytes(SALT_BYTES);\n const passwordWrapKey = await derivePasswordWrapKey(params.backupPassword, passwordSalt);\n const passwordWrap = await encryptWrap(recoveryKey, {\n key: passwordWrapKey,\n aad,\n kdf: \"pbkdf2-sha256-v1\",\n params: {\n iterations: PASSWORD_KDF_ITERATIONS,\n hash: \"SHA-256\",\n },\n });\n passwordWrap.salt = toBase64(passwordSalt);\n\n return {\n envelope_version: ENVELOPE_VERSION,\n chain_id: params.chainId,\n account_id: params.accountId,\n created_at_ms: createdAtMs,\n key_id: keyId,\n wallet_wrap: walletWrap,\n password_wrap: passwordWrap,\n };\n}\n\nexport async function unwrapWithWallet({ envelope, walletWrapKey }: UnwrapWithWalletParams): Promise<Uint8Array> {\n validateRecoveryEnvelopeShape(envelope);\n return await decryptWrap(envelope.wallet_wrap, walletWrapKey);\n}\n\nexport async function unwrapWithPassword({ envelope, backupPassword }: UnwrapWithPasswordParams): Promise<Uint8Array> {\n validateRecoveryEnvelopeShape(envelope);\n const passwordSalt = fromBase64(envelope.password_wrap.salt);\n const passwordWrapKey = await derivePasswordWrapKey(backupPassword, passwordSalt);\n return await decryptWrap(envelope.password_wrap, passwordWrapKey);\n}\n\nfunction canonicalizeHomeserver(homeserver: string): string {\n const trimmed = homeserver.trim().replace(/\\/+$/, \"\");\n try {\n const parsed = new URL(trimmed);\n parsed.hostname = parsed.hostname.toLowerCase();\n return parsed.toString().replace(/\\/+$/, \"\");\n } catch {\n return trimmed.toLowerCase();\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/xrpl/identity.d.ts
CHANGED
|
@@ -24,5 +24,6 @@ export interface XrplIdentityMintResult extends XrplIdentityAccountData {
|
|
|
24
24
|
}
|
|
25
25
|
export declare function configureXrplIdentityMinting(config: Partial<XrplIdentityMintingConfig>): void;
|
|
26
26
|
export declare function setXamanWalletForXrplIdentity(xamanWallet: XamanWalletAdapter): void;
|
|
27
|
-
export declare function
|
|
27
|
+
export declare function getConfiguredXrplIdentityMintingConfig(): Partial<XrplIdentityMintingConfig>;
|
|
28
|
+
export declare function mintSoulboundIdentityNFT(matrixUserId: string, config?: Partial<XrplIdentityMintingConfig>): Promise<XrplIdentityMintResult | null>;
|
|
28
29
|
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/xrpl/identity.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,yBAAyB;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC5F;AAED,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACnE,MAAM,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAK7F;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAKnF;AAED,wBAAsB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/xrpl/identity.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,yBAAyB;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC5F;AAED,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACnE,MAAM,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAK7F;AAED,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAKnF;AAED,wBAAgB,sCAAsC,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAE3F;AAED,wBAAsB,wBAAwB,CAC1C,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC5C,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAiExC"}
|
package/lib/xrpl/identity.js
CHANGED
|
@@ -34,16 +34,20 @@ export function setXamanWalletForXrplIdentity(xamanWallet) {
|
|
|
34
34
|
xamanWallet
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
|
-
export function
|
|
37
|
+
export function getConfiguredXrplIdentityMintingConfig() {
|
|
38
|
+
return _objectSpread({}, mintingConfig);
|
|
39
|
+
}
|
|
40
|
+
export function mintSoulboundIdentityNFT(_x, _x2) {
|
|
38
41
|
return _mintSoulboundIdentityNFT.apply(this, arguments);
|
|
39
42
|
}
|
|
40
43
|
function _mintSoulboundIdentityNFT() {
|
|
41
|
-
_mintSoulboundIdentityNFT = _asyncToGenerator(function* (matrixUserId) {
|
|
44
|
+
_mintSoulboundIdentityNFT = _asyncToGenerator(function* (matrixUserId, config) {
|
|
45
|
+
var effectiveConfig = _objectSpread(_objectSpread({}, mintingConfig), config);
|
|
42
46
|
var {
|
|
43
47
|
homeserverBaseUrl,
|
|
44
48
|
accessToken,
|
|
45
49
|
xamanWallet
|
|
46
|
-
} =
|
|
50
|
+
} = effectiveConfig;
|
|
47
51
|
if (!homeserverBaseUrl || !accessToken || !xamanWallet) {
|
|
48
52
|
logger.warn("Skipping XRPL identity mint for %s: missing homeserver auth and/or Xaman wallet adapter", matrixUserId);
|
|
49
53
|
return null;
|
|
@@ -55,12 +59,12 @@ function _mintSoulboundIdentityNFT() {
|
|
|
55
59
|
});
|
|
56
60
|
}
|
|
57
61
|
var xrplAddress = yield xamanWallet.getAddress();
|
|
58
|
-
var ipfsUri = yield buildIpfsUri(matrixUserId, xrplAddress);
|
|
62
|
+
var ipfsUri = yield buildIpfsUri(matrixUserId, xrplAddress, effectiveConfig);
|
|
59
63
|
var encodedUri = toHex(ipfsUri);
|
|
60
|
-
var xrplClient = new XrplClient(resolveXrplWebSocketUrl());
|
|
64
|
+
var xrplClient = new XrplClient(resolveXrplWebSocketUrl(effectiveConfig));
|
|
61
65
|
yield xrplClient.connect();
|
|
62
66
|
try {
|
|
63
|
-
var
|
|
67
|
+
var _extractTxScopedNftTo;
|
|
64
68
|
var mintTransaction = {
|
|
65
69
|
TransactionType: "NFTokenMint",
|
|
66
70
|
Account: xrplAddress,
|
|
@@ -72,11 +76,8 @@ function _mintSoulboundIdentityNFT() {
|
|
|
72
76
|
var {
|
|
73
77
|
hash: txHash
|
|
74
78
|
} = yield xamanWallet.signAndSubmit(autofilled);
|
|
75
|
-
var txResult = yield xrplClient
|
|
76
|
-
|
|
77
|
-
transaction: txHash
|
|
78
|
-
});
|
|
79
|
-
var nftTokenId = (_extractNftTokenId = extractNftTokenId((_txResult$result = txResult.result) === null || _txResult$result === void 0 ? void 0 : _txResult$result.meta)) !== null && _extractNftTokenId !== void 0 ? _extractNftTokenId : yield findAccountNftByUri(xrplClient, xrplAddress, encodedUri);
|
|
79
|
+
var txResult = yield waitForValidation(xrplClient, txHash);
|
|
80
|
+
var nftTokenId = (_extractTxScopedNftTo = extractTxScopedNftTokenId(txResult.result)) !== null && _extractTxScopedNftTo !== void 0 ? _extractTxScopedNftTo : yield findAccountNftByUri(xrplClient, xrplAddress, encodedUri);
|
|
80
81
|
if (!nftTokenId) {
|
|
81
82
|
throw new Error("Unable to resolve NFTokenID for transaction ".concat(txHash));
|
|
82
83
|
}
|
|
@@ -97,13 +98,13 @@ function _mintSoulboundIdentityNFT() {
|
|
|
97
98
|
});
|
|
98
99
|
return _mintSoulboundIdentityNFT.apply(this, arguments);
|
|
99
100
|
}
|
|
100
|
-
function buildIpfsUri(
|
|
101
|
+
function buildIpfsUri(_x3, _x4, _x5) {
|
|
101
102
|
return _buildIpfsUri.apply(this, arguments);
|
|
102
103
|
}
|
|
103
104
|
function _buildIpfsUri() {
|
|
104
|
-
_buildIpfsUri = _asyncToGenerator(function* (matrixUserId, xrplAddress) {
|
|
105
|
-
if (
|
|
106
|
-
return yield
|
|
105
|
+
_buildIpfsUri = _asyncToGenerator(function* (matrixUserId, xrplAddress, config) {
|
|
106
|
+
if (config.ipfsUriFactory) {
|
|
107
|
+
return yield config.ipfsUriFactory(matrixUserId, xrplAddress);
|
|
107
108
|
}
|
|
108
109
|
var payload = JSON.stringify({
|
|
109
110
|
matrixUserId,
|
|
@@ -114,17 +115,37 @@ function _buildIpfsUri() {
|
|
|
114
115
|
});
|
|
115
116
|
return _buildIpfsUri.apply(this, arguments);
|
|
116
117
|
}
|
|
117
|
-
function resolveXrplWebSocketUrl() {
|
|
118
|
-
var
|
|
119
|
-
if (
|
|
120
|
-
var network = (
|
|
118
|
+
function resolveXrplWebSocketUrl(config) {
|
|
119
|
+
var _config$network;
|
|
120
|
+
if (config.websocketUrl) return config.websocketUrl;
|
|
121
|
+
var network = (_config$network = config.network) !== null && _config$network !== void 0 ? _config$network : DEFAULT_XRPL_NETWORK;
|
|
121
122
|
return network === "mainnet" ? DEFAULT_XRPL_MAINNET_WS : DEFAULT_XRPL_TESTNET_WS;
|
|
122
123
|
}
|
|
124
|
+
function waitForValidation(_x6, _x7) {
|
|
125
|
+
return _waitForValidation.apply(this, arguments);
|
|
126
|
+
}
|
|
127
|
+
function _waitForValidation() {
|
|
128
|
+
_waitForValidation = _asyncToGenerator(function* (xrplClient, txHash) {
|
|
129
|
+
for (var attempt = 0; attempt < 15; attempt += 1) {
|
|
130
|
+
var _response$result;
|
|
131
|
+
var response = yield xrplClient.request({
|
|
132
|
+
command: "tx",
|
|
133
|
+
transaction: txHash
|
|
134
|
+
});
|
|
135
|
+
if (((_response$result = response.result) === null || _response$result === void 0 ? void 0 : _response$result.validated) === true) {
|
|
136
|
+
return response;
|
|
137
|
+
}
|
|
138
|
+
yield sleep(1000);
|
|
139
|
+
}
|
|
140
|
+
throw new Error("Timed out waiting for XRPL tx validation: ".concat(txHash));
|
|
141
|
+
});
|
|
142
|
+
return _waitForValidation.apply(this, arguments);
|
|
143
|
+
}
|
|
123
144
|
function accountDataUrl(baseUrl, matrixUserId) {
|
|
124
145
|
var trimmedBaseUrl = baseUrl.replace(/\/+$/, "");
|
|
125
146
|
return "".concat(trimmedBaseUrl, "/_matrix/client/v3/user/").concat(encodeURIComponent(matrixUserId), "/account_data/").concat(encodeURIComponent(XRPL_IDENTITY_ACCOUNT_DATA_TYPE));
|
|
126
147
|
}
|
|
127
|
-
function getIdentityAccountData(
|
|
148
|
+
function getIdentityAccountData(_x8, _x9, _x0) {
|
|
128
149
|
return _getIdentityAccountData.apply(this, arguments);
|
|
129
150
|
}
|
|
130
151
|
function _getIdentityAccountData() {
|
|
@@ -132,7 +153,7 @@ function _getIdentityAccountData() {
|
|
|
132
153
|
var response = yield fetch(accountDataUrl(homeserverBaseUrl, matrixUserId), {
|
|
133
154
|
method: "GET",
|
|
134
155
|
headers: {
|
|
135
|
-
Authorization: "Bearer ".concat(accessToken),
|
|
156
|
+
"Authorization": "Bearer ".concat(accessToken),
|
|
136
157
|
"Content-Type": "application/json"
|
|
137
158
|
}
|
|
138
159
|
});
|
|
@@ -144,7 +165,7 @@ function _getIdentityAccountData() {
|
|
|
144
165
|
});
|
|
145
166
|
return _getIdentityAccountData.apply(this, arguments);
|
|
146
167
|
}
|
|
147
|
-
function setIdentityAccountData(
|
|
168
|
+
function setIdentityAccountData(_x1, _x10, _x11, _x12) {
|
|
148
169
|
return _setIdentityAccountData.apply(this, arguments);
|
|
149
170
|
}
|
|
150
171
|
function _setIdentityAccountData() {
|
|
@@ -152,7 +173,7 @@ function _setIdentityAccountData() {
|
|
|
152
173
|
var response = yield fetch(accountDataUrl(homeserverBaseUrl, matrixUserId), {
|
|
153
174
|
method: "PUT",
|
|
154
175
|
headers: {
|
|
155
|
-
Authorization: "Bearer ".concat(accessToken),
|
|
176
|
+
"Authorization": "Bearer ".concat(accessToken),
|
|
156
177
|
"Content-Type": "application/json"
|
|
157
178
|
},
|
|
158
179
|
body: JSON.stringify(payload)
|
|
@@ -163,18 +184,18 @@ function _setIdentityAccountData() {
|
|
|
163
184
|
});
|
|
164
185
|
return _setIdentityAccountData.apply(this, arguments);
|
|
165
186
|
}
|
|
166
|
-
function findAccountNftByUri(
|
|
187
|
+
function findAccountNftByUri(_x13, _x14, _x15) {
|
|
167
188
|
return _findAccountNftByUri.apply(this, arguments);
|
|
168
189
|
}
|
|
169
190
|
function _findAccountNftByUri() {
|
|
170
191
|
_findAccountNftByUri = _asyncToGenerator(function* (xrplClient, xrplAddress, encodedUri) {
|
|
171
|
-
var _response$
|
|
192
|
+
var _response$result2, _nft$NFTokenID;
|
|
172
193
|
var response = yield xrplClient.request({
|
|
173
194
|
command: "account_nfts",
|
|
174
195
|
account: xrplAddress
|
|
175
196
|
});
|
|
176
197
|
var targetUri = encodedUri.toUpperCase();
|
|
177
|
-
var nft = (_response$
|
|
198
|
+
var nft = (_response$result2 = response.result) === null || _response$result2 === void 0 || (_response$result2 = _response$result2.account_nfts) === null || _response$result2 === void 0 ? void 0 : _response$result2.find(candidate => {
|
|
178
199
|
var _candidate$URI;
|
|
179
200
|
return ((_candidate$URI = candidate.URI) === null || _candidate$URI === void 0 ? void 0 : _candidate$URI.toUpperCase()) === targetUri;
|
|
180
201
|
});
|
|
@@ -182,27 +203,18 @@ function _findAccountNftByUri() {
|
|
|
182
203
|
});
|
|
183
204
|
return _findAccountNftByUri.apply(this, arguments);
|
|
184
205
|
}
|
|
185
|
-
function
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if (!container || typeof container !== "object") return false;
|
|
198
|
-
return Array.isArray(container.NFTokens);
|
|
199
|
-
});
|
|
200
|
-
var nftokens = (_tokensContainer$NFTo = tokensContainer === null || tokensContainer === void 0 ? void 0 : tokensContainer.NFTokens) !== null && _tokensContainer$NFTo !== void 0 ? _tokensContainer$NFTo : [];
|
|
201
|
-
for (var tokenEntry of nftokens) {
|
|
202
|
-
if (!tokenEntry || typeof tokenEntry !== "object") continue;
|
|
203
|
-
var token = tokenEntry.NFToken;
|
|
204
|
-
if (token !== null && token !== void 0 && token.NFTokenID) return token.NFTokenID;
|
|
205
|
-
}
|
|
206
|
+
function extractTxScopedNftTokenId(result) {
|
|
207
|
+
if (!result || typeof result !== "object") {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
var payload = result;
|
|
211
|
+
var directTokenId = payload["nftoken_id"];
|
|
212
|
+
if (typeof directTokenId === "string" && directTokenId.length > 0) {
|
|
213
|
+
return directTokenId;
|
|
214
|
+
}
|
|
215
|
+
var directAlternate = payload["NFTokenID"];
|
|
216
|
+
if (typeof directAlternate === "string" && directAlternate.length > 0) {
|
|
217
|
+
return directAlternate;
|
|
206
218
|
}
|
|
207
219
|
return null;
|
|
208
220
|
}
|
|
@@ -210,4 +222,15 @@ function toHex(input) {
|
|
|
210
222
|
var bytes = typeof input === "string" ? new TextEncoder().encode(input) : input;
|
|
211
223
|
return Array.from(bytes).map(value => value.toString(16).padStart(2, "0")).join("").toUpperCase();
|
|
212
224
|
}
|
|
225
|
+
function sleep(_x16) {
|
|
226
|
+
return _sleep.apply(this, arguments);
|
|
227
|
+
}
|
|
228
|
+
function _sleep() {
|
|
229
|
+
_sleep = _asyncToGenerator(function* (ms) {
|
|
230
|
+
yield new Promise(resolve => {
|
|
231
|
+
setTimeout(resolve, ms);
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
return _sleep.apply(this, arguments);
|
|
235
|
+
}
|
|
213
236
|
//# sourceMappingURL=identity.js.map
|