@textrp/briij-js-sdk 43.0.0 → 43.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +7 -4
  2. package/lib/@types/auth.d.ts +7 -5
  3. package/lib/@types/auth.d.ts.map +1 -1
  4. package/lib/@types/auth.js.map +1 -1
  5. package/lib/@types/event.d.ts +3 -32
  6. package/lib/@types/event.d.ts.map +1 -1
  7. package/lib/@types/event.js.map +1 -1
  8. package/lib/@types/synapse.d.ts +64 -0
  9. package/lib/@types/synapse.d.ts.map +1 -1
  10. package/lib/@types/synapse.js.map +1 -1
  11. package/lib/briij.d.ts +1 -0
  12. package/lib/briij.d.ts.map +1 -1
  13. package/lib/briij.js +1 -0
  14. package/lib/briij.js.map +1 -1
  15. package/lib/client.d.ts +72 -1
  16. package/lib/client.d.ts.map +1 -1
  17. package/lib/client.js +369 -196
  18. package/lib/client.js.map +1 -1
  19. package/lib/wallet-recovery.d.ts +1 -1
  20. package/lib/wallet-recovery.d.ts.map +1 -1
  21. package/lib/wallet-recovery.js +32 -8
  22. package/lib/wallet-recovery.js.map +1 -1
  23. package/lib/xrpl/identity.d.ts +2 -1
  24. package/lib/xrpl/identity.d.ts.map +1 -1
  25. package/lib/xrpl/identity.js +70 -47
  26. package/lib/xrpl/identity.js.map +1 -1
  27. package/lib/xrpl/trust.d.ts +4 -2
  28. package/lib/xrpl/trust.d.ts.map +1 -1
  29. package/lib/xrpl/trust.js +31 -19
  30. package/lib/xrpl/trust.js.map +1 -1
  31. package/lib/xrpl/verification.js +17 -6
  32. package/lib/xrpl/verification.js.map +1 -1
  33. package/package.json +127 -129
  34. package/src/@types/auth.ts +6 -7
  35. package/src/@types/event.ts +3 -32
  36. package/src/@types/synapse.ts +77 -0
  37. package/src/briij.ts +1 -0
  38. package/src/client.ts +261 -36
  39. package/src/wallet-recovery.ts +101 -26
  40. package/src/xrpl/identity.ts +66 -39
  41. package/src/xrpl/trust.ts +35 -18
  42. package/src/xrpl/verification.ts +19 -6
package/lib/xrpl/trust.js CHANGED
@@ -1,7 +1,4 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
2
  /*
6
3
  Copyright 2026 The Matrix.org Foundation C.I.C.
7
4
 
@@ -19,34 +16,49 @@ limitations under the License.
19
16
  */
20
17
 
21
18
  var DEFAULT_TRUST_PATH = "/_matrix/client/v3/org.textrp.xrpl/trust";
22
- var xrplTrustConfig = {};
23
- export function configureXrplTrust(config) {
24
- xrplTrustConfig = _objectSpread(_objectSpread({}, xrplTrustConfig), config);
25
- }
26
- export function getTrustScore(_x, _x2) {
19
+ var DEFAULT_TRUST_TIMEOUT_MS = 10000;
20
+ export function getTrustScore(_x, _x2, _x3, _x4) {
27
21
  return _getTrustScore.apply(this, arguments);
28
22
  }
29
23
  function _getTrustScore() {
30
- _getTrustScore = _asyncToGenerator(function* (payer, payee) {
31
- var _xrplTrustConfig$trus;
32
- var homeserverBaseUrl = xrplTrustConfig.homeserverBaseUrl;
33
- var accessToken = xrplTrustConfig.accessToken;
24
+ _getTrustScore = _asyncToGenerator(function* (payer, payee, config, options) {
25
+ var _config$trustPath, _options$timeoutMs;
26
+ var {
27
+ homeserverBaseUrl,
28
+ accessToken
29
+ } = config;
34
30
  if (!homeserverBaseUrl || !accessToken) {
35
31
  throw new Error("XRPL trust config is incomplete");
36
32
  }
37
33
  var trimmedBaseUrl = homeserverBaseUrl.replace(/\/+$/, "");
38
- var trustPath = (_xrplTrustConfig$trus = xrplTrustConfig.trustPath) !== null && _xrplTrustConfig$trus !== void 0 ? _xrplTrustConfig$trus : DEFAULT_TRUST_PATH;
34
+ var trustPath = (_config$trustPath = config.trustPath) !== null && _config$trustPath !== void 0 ? _config$trustPath : DEFAULT_TRUST_PATH;
39
35
  var query = new URLSearchParams({
40
36
  payer,
41
37
  payee
42
38
  });
43
- var response = yield fetch("".concat(trimmedBaseUrl).concat(trustPath, "?").concat(query.toString()), {
44
- method: "GET",
45
- headers: {
46
- Authorization: "Bearer ".concat(accessToken),
47
- "Content-Type": "application/json"
39
+ var timeoutMs = (_options$timeoutMs = options === null || options === void 0 ? void 0 : options.timeoutMs) !== null && _options$timeoutMs !== void 0 ? _options$timeoutMs : DEFAULT_TRUST_TIMEOUT_MS;
40
+ var controller = new AbortController();
41
+ var timeoutId = setTimeout(() => {
42
+ controller.abort();
43
+ }, timeoutMs);
44
+ var response;
45
+ try {
46
+ response = yield fetch("".concat(trimmedBaseUrl).concat(trustPath, "?").concat(query.toString()), {
47
+ method: "GET",
48
+ headers: {
49
+ "Authorization": "Bearer ".concat(accessToken),
50
+ "Content-Type": "application/json"
51
+ },
52
+ signal: controller.signal
53
+ });
54
+ } catch (error) {
55
+ if (error instanceof Error && error.name === "AbortError") {
56
+ throw new Error("Timed out fetching trust score after ".concat(timeoutMs, "ms"));
48
57
  }
49
- });
58
+ throw error;
59
+ } finally {
60
+ clearTimeout(timeoutId);
61
+ }
50
62
  if (!response.ok) {
51
63
  throw new Error("Failed to fetch trust score: HTTP ".concat(response.status));
52
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"trust.js","names":["DEFAULT_TRUST_PATH","xrplTrustConfig","configureXrplTrust","config","_objectSpread","getTrustScore","_x","_x2","_getTrustScore","apply","arguments","_asyncToGenerator","payer","payee","_xrplTrustConfig$trus","homeserverBaseUrl","accessToken","Error","trimmedBaseUrl","replace","trustPath","query","URLSearchParams","response","fetch","concat","toString","method","headers","Authorization","ok","status","payload","json","score","trusted"],"sources":["../../src/xrpl/trust.ts"],"sourcesContent":["/*\nCopyright 2026 The Matrix.org Foundation C.I.C.\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\nconst DEFAULT_TRUST_PATH = \"/_matrix/client/v3/org.textrp.xrpl/trust\";\n\nexport interface XrplTrustConfig {\n homeserverBaseUrl: string;\n accessToken: string;\n trustPath?: string;\n}\n\nlet xrplTrustConfig: Partial<XrplTrustConfig> = {};\n\nexport function configureXrplTrust(config: Partial<XrplTrustConfig>): void {\n xrplTrustConfig = {\n ...xrplTrustConfig,\n ...config,\n };\n}\n\nexport async function getTrustScore(payer: string, payee: string): Promise<number> {\n const homeserverBaseUrl = xrplTrustConfig.homeserverBaseUrl;\n const accessToken = xrplTrustConfig.accessToken;\n if (!homeserverBaseUrl || !accessToken) {\n throw new Error(\"XRPL trust config is incomplete\");\n }\n\n const trimmedBaseUrl = homeserverBaseUrl.replace(/\\/+$/, \"\");\n const trustPath = xrplTrustConfig.trustPath ?? DEFAULT_TRUST_PATH;\n const query = new URLSearchParams({\n payer,\n payee,\n });\n const response = await fetch(`${trimmedBaseUrl}${trustPath}?${query.toString()}`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch trust score: HTTP ${response.status}`);\n }\n\n const payload = (await response.json()) as { score?: number; trusted?: boolean };\n if (typeof payload.score === \"number\") {\n return payload.score;\n }\n return payload.trusted ? 1 : 0;\n}\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMA,kBAAkB,GAAG,0CAA0C;AAQrE,IAAIC,eAAyC,GAAG,CAAC,CAAC;AAElD,OAAO,SAASC,kBAAkBA,CAACC,MAAgC,EAAQ;EACvEF,eAAe,GAAAG,aAAA,CAAAA,aAAA,KACRH,eAAe,GACfE,MAAM,CACZ;AACL;AAEA,gBAAsBE,aAAaA,CAAAC,EAAA,EAAAC,GAAA;EAAA,OAAAC,cAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AA8BlC,SAAAF,eAAA;EAAAA,cAAA,GAAAG,iBAAA,CA9BM,WAA6BC,KAAa,EAAEC,KAAa,EAAmB;IAAA,IAAAC,qBAAA;IAC/E,IAAMC,iBAAiB,GAAGd,eAAe,CAACc,iBAAiB;IAC3D,IAAMC,WAAW,GAAGf,eAAe,CAACe,WAAW;IAC/C,IAAI,CAACD,iBAAiB,IAAI,CAACC,WAAW,EAAE;MACpC,MAAM,IAAIC,KAAK,CAAC,iCAAiC,CAAC;IACtD;IAEA,IAAMC,cAAc,GAAGH,iBAAiB,CAACI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5D,IAAMC,SAAS,IAAAN,qBAAA,GAAGb,eAAe,CAACmB,SAAS,cAAAN,qBAAA,cAAAA,qBAAA,GAAId,kBAAkB;IACjE,IAAMqB,KAAK,GAAG,IAAIC,eAAe,CAAC;MAC9BV,KAAK;MACLC;IACJ,CAAC,CAAC;IACF,IAAMU,QAAQ,SAASC,KAAK,IAAAC,MAAA,CAAIP,cAAc,EAAAO,MAAA,CAAGL,SAAS,OAAAK,MAAA,CAAIJ,KAAK,CAACK,QAAQ,CAAC,CAAC,GAAI;MAC9EC,MAAM,EAAE,KAAK;MACbC,OAAO,EAAE;QACLC,aAAa,YAAAJ,MAAA,CAAYT,WAAW,CAAE;QACtC,cAAc,EAAE;MACpB;IACJ,CAAC,CAAC;IAEF,IAAI,CAACO,QAAQ,CAACO,EAAE,EAAE;MACd,MAAM,IAAIb,KAAK,sCAAAQ,MAAA,CAAsCF,QAAQ,CAACQ,MAAM,CAAE,CAAC;IAC3E;IAEA,IAAMC,OAAO,SAAUT,QAAQ,CAACU,IAAI,CAAC,CAA2C;IAChF,IAAI,OAAOD,OAAO,CAACE,KAAK,KAAK,QAAQ,EAAE;MACnC,OAAOF,OAAO,CAACE,KAAK;IACxB;IACA,OAAOF,OAAO,CAACG,OAAO,GAAG,CAAC,GAAG,CAAC;EAClC,CAAC;EAAA,OAAA3B,cAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"trust.js","names":["DEFAULT_TRUST_PATH","DEFAULT_TRUST_TIMEOUT_MS","getTrustScore","_x","_x2","_x3","_x4","_getTrustScore","apply","arguments","_asyncToGenerator","payer","payee","config","options","_config$trustPath","_options$timeoutMs","homeserverBaseUrl","accessToken","Error","trimmedBaseUrl","replace","trustPath","query","URLSearchParams","timeoutMs","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","concat","toString","method","headers","signal","error","name","clearTimeout","ok","status","payload","json","score","trusted"],"sources":["../../src/xrpl/trust.ts"],"sourcesContent":["/*\nCopyright 2026 The Matrix.org Foundation C.I.C.\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\nconst DEFAULT_TRUST_PATH = \"/_matrix/client/v3/org.textrp.xrpl/trust\";\nconst DEFAULT_TRUST_TIMEOUT_MS = 10_000;\n\nexport interface XrplTrustConfig {\n homeserverBaseUrl: string;\n accessToken: string;\n trustPath?: string;\n}\n\nexport interface XrplTrustRequestOptions {\n timeoutMs?: number;\n}\n\nexport async function getTrustScore(\n payer: string,\n payee: string,\n config: XrplTrustConfig,\n options?: XrplTrustRequestOptions,\n): Promise<number> {\n const { homeserverBaseUrl, accessToken } = config;\n if (!homeserverBaseUrl || !accessToken) {\n throw new Error(\"XRPL trust config is incomplete\");\n }\n\n const trimmedBaseUrl = homeserverBaseUrl.replace(/\\/+$/, \"\");\n const trustPath = config.trustPath ?? DEFAULT_TRUST_PATH;\n const query = new URLSearchParams({\n payer,\n payee,\n });\n const timeoutMs = options?.timeoutMs ?? DEFAULT_TRUST_TIMEOUT_MS;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => {\n controller.abort();\n }, timeoutMs);\n\n let response: Response;\n try {\n response = await fetch(`${trimmedBaseUrl}${trustPath}?${query.toString()}`, {\n method: \"GET\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n signal: controller.signal,\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(`Timed out fetching trust score after ${timeoutMs}ms`);\n }\n throw error;\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (!response.ok) {\n throw new Error(`Failed to fetch trust score: HTTP ${response.status}`);\n }\n\n const payload = (await response.json()) as { score?: number; trusted?: boolean };\n if (typeof payload.score === \"number\") {\n return payload.score;\n }\n return payload.trusted ? 1 : 0;\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMA,kBAAkB,GAAG,0CAA0C;AACrE,IAAMC,wBAAwB,GAAG,KAAM;AAYvC,gBAAsBC,aAAaA,CAAAC,EAAA,EAAAC,GAAA,EAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,cAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAmDlC,SAAAF,eAAA;EAAAA,cAAA,GAAAG,iBAAA,CAnDM,WACHC,KAAa,EACbC,KAAa,EACbC,MAAuB,EACvBC,OAAiC,EAClB;IAAA,IAAAC,iBAAA,EAAAC,kBAAA;IACf,IAAM;MAAEC,iBAAiB;MAAEC;IAAY,CAAC,GAAGL,MAAM;IACjD,IAAI,CAACI,iBAAiB,IAAI,CAACC,WAAW,EAAE;MACpC,MAAM,IAAIC,KAAK,CAAC,iCAAiC,CAAC;IACtD;IAEA,IAAMC,cAAc,GAAGH,iBAAiB,CAACI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC5D,IAAMC,SAAS,IAAAP,iBAAA,GAAGF,MAAM,CAACS,SAAS,cAAAP,iBAAA,cAAAA,iBAAA,GAAIf,kBAAkB;IACxD,IAAMuB,KAAK,GAAG,IAAIC,eAAe,CAAC;MAC9Bb,KAAK;MACLC;IACJ,CAAC,CAAC;IACF,IAAMa,SAAS,IAAAT,kBAAA,GAAGF,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEW,SAAS,cAAAT,kBAAA,cAAAA,kBAAA,GAAIf,wBAAwB;IAChE,IAAMyB,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;IACxC,IAAMC,SAAS,GAAGC,UAAU,CAAC,MAAM;MAC/BH,UAAU,CAACI,KAAK,CAAC,CAAC;IACtB,CAAC,EAAEL,SAAS,CAAC;IAEb,IAAIM,QAAkB;IACtB,IAAI;MACAA,QAAQ,SAASC,KAAK,IAAAC,MAAA,CAAIb,cAAc,EAAAa,MAAA,CAAGX,SAAS,OAAAW,MAAA,CAAIV,KAAK,CAACW,QAAQ,CAAC,CAAC,GAAI;QACxEC,MAAM,EAAE,KAAK;QACbC,OAAO,EAAE;UACL,eAAe,YAAAH,MAAA,CAAYf,WAAW,CAAE;UACxC,cAAc,EAAE;QACpB,CAAC;QACDmB,MAAM,EAAEX,UAAU,CAACW;MACvB,CAAC,CAAC;IACN,CAAC,CAAC,OAAOC,KAAK,EAAE;MACZ,IAAIA,KAAK,YAAYnB,KAAK,IAAImB,KAAK,CAACC,IAAI,KAAK,YAAY,EAAE;QACvD,MAAM,IAAIpB,KAAK,yCAAAc,MAAA,CAAyCR,SAAS,OAAI,CAAC;MAC1E;MACA,MAAMa,KAAK;IACf,CAAC,SAAS;MACNE,YAAY,CAACZ,SAAS,CAAC;IAC3B;IAEA,IAAI,CAACG,QAAQ,CAACU,EAAE,EAAE;MACd,MAAM,IAAItB,KAAK,sCAAAc,MAAA,CAAsCF,QAAQ,CAACW,MAAM,CAAE,CAAC;IAC3E;IAEA,IAAMC,OAAO,SAAUZ,QAAQ,CAACa,IAAI,CAAC,CAA2C;IAChF,IAAI,OAAOD,OAAO,CAACE,KAAK,KAAK,QAAQ,EAAE;MACnC,OAAOF,OAAO,CAACE,KAAK;IACxB;IACA,OAAOF,OAAO,CAACG,OAAO,GAAG,CAAC,GAAG,CAAC;EAClC,CAAC;EAAA,OAAAvC,cAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA","ignoreList":[]}
@@ -95,8 +95,8 @@ function _acceptVerification() {
95
95
  }());
96
96
  yield matrixClient.sendEvent(roomId, XRPL_VERIFY_ACCEPT_EVENT, {
97
97
  tx_hash: txHash,
98
- issuer_xrpl_address: signerAddress,
99
- accepter_xrpl_address: issuerXrplAddress,
98
+ issuer_xrpl_address: issuerXrplAddress,
99
+ accepter_xrpl_address: signerAddress,
100
100
  nft_token_id: identity.nftTokenId,
101
101
  ipfs_uri: updatedUri,
102
102
  trust_model: NFT_TRUST_TAG
@@ -144,10 +144,21 @@ function _waitForValidation() {
144
144
  _waitForValidation = _asyncToGenerator(function* (xrplClient, txHash) {
145
145
  for (var attempt = 0; attempt < 15; attempt += 1) {
146
146
  var _response$result;
147
- var response = yield xrplClient.request({
148
- command: "tx",
149
- transaction: txHash
150
- });
147
+ var response = void 0;
148
+ try {
149
+ response = yield xrplClient.request({
150
+ command: "tx",
151
+ transaction: txHash
152
+ });
153
+ } catch (error) {
154
+ var _data$error, _data;
155
+ var errorCode = error instanceof Error && "data" in error ? (_data$error = (_data = error.data) === null || _data === void 0 ? void 0 : _data.error) !== null && _data$error !== void 0 ? _data$error : error.error : undefined;
156
+ if (errorCode === "txnNotFound") {
157
+ yield sleep(1000);
158
+ continue;
159
+ }
160
+ throw error;
161
+ }
151
162
  if (((_response$result = response.result) === null || _response$result === void 0 ? void 0 : _response$result.validated) === true) return;
152
163
  yield sleep(1000);
153
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"verification.js","names":["Client","XrplClient","EventType","XRPL_VERIFY_REQUEST_EVENT","UserVerifyRequest","XRPL_VERIFY_ACCEPT_EVENT","UserVerifyAccept","XRPL_VERIFIED_EVENT","UserVerified","NFT_TRUST_TAG","XRPL_IDENTITY_ACCOUNT_DATA_TYPE","DEFAULT_XRPL_NETWORK","DEFAULT_XRPL_TESTNET_WS","DEFAULT_XRPL_MAINNET_WS","verificationConfig","configureXrplVerification","config","_objectSpread","requestVerification","_x","_requestVerification","apply","arguments","_asyncToGenerator","targetXrplAddress","matrixClient","xamanWallet","Error","issuerXrplAddress","getAddress","roomId","getVerificationRoomId","sendEvent","tx_hash","issuer_xrpl_address","target_xrpl_address","trust_model","txHash","credentialTypeHex","acceptVerification","_x2","_acceptVerification","signerAddress","identity","getIdentityAccountData","metadata","loadTrustMetadata","ipfsUri","currentVerifiers","Set","Array","isArray","verifiers","filter","value","Boolean","trim","map","add","updatedUri","pinTrustMetadata","from","signAndValidateOnXrpl","TransactionType","Account","NFTokenID","nftTokenId","URI","toHex","_ref","xrplClient","assertAccountOwnsToken","_x13","accepter_xrpl_address","nft_token_id","ipfs_uri","_x3","_x4","_signAndValidateOnXrpl","transaction","preflight","resolveXrplWebSocketUrl","connect","autofilled","autofill","hash","signAndSubmit","waitForValidation","disconnect","catch","undefined","_x5","_x6","_waitForValidation","attempt","_response$result","response","request","command","result","validated","sleep","concat","_x7","_getVerificationRoomId","counterpartyXrplAddress","verificationRoomId","resolveVerificationRoomId","_verificationConfig$n","websocketUrl","network","input","bytes","TextEncoder","encode","toString","padStart","join","toUpperCase","_x8","_getIdentityAccountData","userId","getUserId","accessToken","getAccessToken","accountDataUrl","baseUrl","replace","encodeURIComponent","fetch","method","headers","ok","status","json","_x9","_x0","_x1","_assertAccountOwnsToken","account","tokenId","_response$result2","found","account_nfts","some","entry","_x10","_loadTrustMetadata","uri","startsWith","JSON","parse","_uri$split$","payload","decodeURIComponent","split","cidPath","_x11","_pinTrustMetadata","pinJsonToIpfs","jwt","pinataJwt","body","stringify","pinataContent","IpfsHash","_x12","_sleep","ms","Promise","resolve","setTimeout"],"sources":["../../src/xrpl/verification.ts"],"sourcesContent":["/*\nCopyright 2026 The Matrix.org Foundation C.I.C.\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 { Client as XrplClient, type SubmittableTransaction } from \"xrpl\";\n\nimport { EventType } from \"../@types/event.ts\";\nimport type { BriijClient } from \"../client.ts\";\nimport { type XamanWalletAdapter, type XrplIdentityAccountData } from \"./identity.ts\";\n\nexport const XRPL_VERIFY_REQUEST_EVENT: EventType.UserVerifyRequest = EventType.UserVerifyRequest;\nexport const XRPL_VERIFY_ACCEPT_EVENT: EventType.UserVerifyAccept = EventType.UserVerifyAccept;\nexport const XRPL_VERIFIED_EVENT: EventType.UserVerified = EventType.UserVerified;\n\nconst NFT_TRUST_TAG = \"nft_metadata\";\nconst XRPL_IDENTITY_ACCOUNT_DATA_TYPE = \"io.textrp.xrpl.identity_nft\";\n\nconst DEFAULT_XRPL_NETWORK = \"testnet\";\nconst DEFAULT_XRPL_TESTNET_WS = \"wss://s.altnet.rippletest.net:51233\";\nconst DEFAULT_XRPL_MAINNET_WS = \"wss://s1.ripple.com\";\n\nexport interface XrplVerificationConfig {\n matrixClient: Pick<BriijClient, \"sendEvent\" | \"getUserId\" | \"getAccessToken\"> & { baseUrl: string };\n xamanWallet: XamanWalletAdapter;\n verificationRoomId?: string;\n resolveVerificationRoomId?: (counterpartyXrplAddress: string) => Promise<string> | string;\n pinJsonToIpfs?: (payload: Record<string, unknown>) => Promise<string>;\n pinataJwt?: string;\n websocketUrl?: string;\n network?: \"mainnet\" | \"testnet\";\n}\n\nexport interface XrplVerificationTxResult {\n txHash: string;\n credentialTypeHex: string;\n}\n\nlet verificationConfig: Partial<XrplVerificationConfig> = {};\n\nexport function configureXrplVerification(config: Partial<XrplVerificationConfig>): void {\n verificationConfig = {\n ...verificationConfig,\n ...config,\n };\n}\n\nexport async function requestVerification(targetXrplAddress: string): Promise<XrplVerificationTxResult> {\n const { matrixClient, xamanWallet } = verificationConfig;\n if (!matrixClient || !xamanWallet) {\n throw new Error(\"XRPL verification is not configured with matrixClient and xamanWallet\");\n }\n\n const issuerXrplAddress = await xamanWallet.getAddress();\n const roomId = await getVerificationRoomId(targetXrplAddress);\n await matrixClient.sendEvent(roomId, XRPL_VERIFY_REQUEST_EVENT, {\n tx_hash: \"\",\n issuer_xrpl_address: issuerXrplAddress,\n target_xrpl_address: targetXrplAddress,\n trust_model: NFT_TRUST_TAG,\n });\n\n return {\n txHash: \"\",\n credentialTypeHex: NFT_TRUST_TAG,\n };\n}\n\nexport async function acceptVerification(issuerXrplAddress: string): Promise<XrplVerificationTxResult> {\n const { matrixClient, xamanWallet } = verificationConfig;\n if (!matrixClient || !xamanWallet) {\n throw new Error(\"XRPL verification is not configured with matrixClient and xamanWallet\");\n }\n\n const signerAddress = await xamanWallet.getAddress();\n const identity = await getIdentityAccountData(matrixClient);\n const metadata = await loadTrustMetadata(identity.ipfsUri);\n const currentVerifiers = new Set(\n Array.isArray(metadata.verifiers)\n ? metadata.verifiers\n .filter((value): value is string => typeof value === \"string\" && Boolean(value.trim()))\n .map((value) => value.trim())\n : [],\n );\n currentVerifiers.add(issuerXrplAddress);\n const updatedUri = await pinTrustMetadata({\n ...metadata,\n verifiers: Array.from(currentVerifiers),\n });\n\n const roomId = await getVerificationRoomId(issuerXrplAddress);\n const txHash = await signAndValidateOnXrpl(\n {\n TransactionType: \"NFTokenModify\",\n Account: signerAddress,\n NFTokenID: identity.nftTokenId,\n URI: toHex(updatedUri),\n },\n async (xrplClient) => {\n await assertAccountOwnsToken(xrplClient, signerAddress, identity.nftTokenId);\n },\n );\n\n await matrixClient.sendEvent(roomId, XRPL_VERIFY_ACCEPT_EVENT, {\n tx_hash: txHash,\n issuer_xrpl_address: signerAddress,\n accepter_xrpl_address: issuerXrplAddress,\n nft_token_id: identity.nftTokenId,\n ipfs_uri: updatedUri,\n trust_model: NFT_TRUST_TAG,\n });\n\n return {\n txHash,\n credentialTypeHex: NFT_TRUST_TAG,\n };\n}\n\nasync function signAndValidateOnXrpl(\n transaction: Record<string, unknown>,\n preflight?: (xrplClient: XrplClient) => Promise<void>,\n): Promise<string> {\n const { xamanWallet } = verificationConfig;\n if (!xamanWallet) {\n throw new Error(\"Missing Xaman wallet adapter\");\n }\n\n const xrplClient = new XrplClient(resolveXrplWebSocketUrl());\n await xrplClient.connect();\n\n try {\n if (preflight) {\n await preflight(xrplClient);\n }\n const autofilled = await xrplClient.autofill(transaction as unknown as SubmittableTransaction);\n const { hash: txHash } = await xamanWallet.signAndSubmit(autofilled as Record<string, unknown>);\n await waitForValidation(xrplClient, txHash);\n return txHash;\n } finally {\n await xrplClient.disconnect().catch(() => undefined);\n }\n}\n\nasync function waitForValidation(xrplClient: XrplClient, txHash: string): Promise<void> {\n for (let attempt = 0; attempt < 15; attempt += 1) {\n const response = await xrplClient.request({\n command: \"tx\",\n transaction: txHash,\n });\n\n if (response.result?.validated === true) return;\n await sleep(1000);\n }\n\n throw new Error(`Timed out waiting for XRPL tx validation: ${txHash}`);\n}\n\nasync function getVerificationRoomId(counterpartyXrplAddress: string): Promise<string> {\n if (verificationConfig.verificationRoomId) {\n return verificationConfig.verificationRoomId;\n }\n if (verificationConfig.resolveVerificationRoomId) {\n return await verificationConfig.resolveVerificationRoomId(counterpartyXrplAddress);\n }\n throw new Error(\"No verification room configured\");\n}\n\nfunction resolveXrplWebSocketUrl(): string {\n if (verificationConfig.websocketUrl) return verificationConfig.websocketUrl;\n const network = verificationConfig.network ?? DEFAULT_XRPL_NETWORK;\n return network === \"mainnet\" ? DEFAULT_XRPL_MAINNET_WS : DEFAULT_XRPL_TESTNET_WS;\n}\n\nfunction toHex(input: string | Uint8Array): string {\n const bytes = typeof input === \"string\" ? new TextEncoder().encode(input) : input;\n return Array.from(bytes)\n .map((value) => value.toString(16).padStart(2, \"0\"))\n .join(\"\")\n .toUpperCase();\n}\n\nasync function getIdentityAccountData(\n matrixClient: Pick<BriijClient, \"getUserId\" | \"getAccessToken\"> & { baseUrl: string },\n): Promise<XrplIdentityAccountData> {\n const userId = matrixClient.getUserId();\n const accessToken = matrixClient.getAccessToken();\n if (!userId || !accessToken) {\n throw new Error(\"Missing Matrix session for XRPL verification\");\n }\n\n const accountDataUrl =\n `${matrixClient.baseUrl.replace(/\\/+$/, \"\")}` +\n `/_matrix/client/v3/user/${encodeURIComponent(userId)}/account_data/${encodeURIComponent(XRPL_IDENTITY_ACCOUNT_DATA_TYPE)}`;\n const response = await fetch(accountDataUrl, {\n method: \"GET\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n });\n if (!response.ok) {\n throw new Error(`Unable to fetch identity NFT account_data: HTTP ${response.status}`);\n }\n return (await response.json()) as XrplIdentityAccountData;\n}\n\nasync function assertAccountOwnsToken(xrplClient: XrplClient, account: string, tokenId: string): Promise<void> {\n const response = await xrplClient.request({\n command: \"account_nfts\",\n account,\n });\n const found = response.result?.account_nfts?.some((entry: { NFTokenID?: string }) => entry.NFTokenID === tokenId);\n if (!found) {\n throw new Error(`Identity NFT ${tokenId} not found on account ${account}`);\n }\n}\n\nasync function loadTrustMetadata(uri: string): Promise<Record<string, unknown>> {\n if (!uri) return {};\n if (uri.startsWith(\"{\")) {\n return JSON.parse(uri) as Record<string, unknown>;\n }\n\n if (uri.startsWith(\"data:application/json,\")) {\n const payload = decodeURIComponent(uri.split(\",\", 2)[1] ?? \"{}\");\n return JSON.parse(payload) as Record<string, unknown>;\n }\n\n if (uri.startsWith(\"ipfs://\")) {\n const cidPath = uri.replace(\"ipfs://\", \"\");\n const response = await fetch(`https://ipfs.io/ipfs/${cidPath}`);\n if (!response.ok) {\n throw new Error(`Failed to fetch IPFS metadata: HTTP ${response.status}`);\n }\n return (await response.json()) as Record<string, unknown>;\n }\n\n return {};\n}\n\nasync function pinTrustMetadata(payload: Record<string, unknown>): Promise<string> {\n if (verificationConfig.pinJsonToIpfs) {\n return await verificationConfig.pinJsonToIpfs(payload);\n }\n\n const jwt = verificationConfig.pinataJwt;\n if (!jwt) {\n throw new Error(\"Set pinJsonToIpfs or pinataJwt before acceptVerification()\");\n }\n\n const response = await fetch(\"https://api.pinata.cloud/pinning/pinJSONToIPFS\", {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${jwt}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ pinataContent: payload }),\n });\n if (!response.ok) {\n throw new Error(`Pinata pin failed: HTTP ${response.status}`);\n }\n const body = (await response.json()) as { IpfsHash?: string };\n if (!body.IpfsHash) {\n throw new Error(\"Pinata response missing IpfsHash\");\n }\n return `ipfs://${body.IpfsHash}`;\n}\n\nasync function sleep(ms: number): Promise<void> {\n await new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"verification.js","names":["Client","XrplClient","EventType","XRPL_VERIFY_REQUEST_EVENT","UserVerifyRequest","XRPL_VERIFY_ACCEPT_EVENT","UserVerifyAccept","XRPL_VERIFIED_EVENT","UserVerified","NFT_TRUST_TAG","XRPL_IDENTITY_ACCOUNT_DATA_TYPE","DEFAULT_XRPL_NETWORK","DEFAULT_XRPL_TESTNET_WS","DEFAULT_XRPL_MAINNET_WS","verificationConfig","configureXrplVerification","config","_objectSpread","requestVerification","_x","_requestVerification","apply","arguments","_asyncToGenerator","targetXrplAddress","matrixClient","xamanWallet","Error","issuerXrplAddress","getAddress","roomId","getVerificationRoomId","sendEvent","tx_hash","issuer_xrpl_address","target_xrpl_address","trust_model","txHash","credentialTypeHex","acceptVerification","_x2","_acceptVerification","signerAddress","identity","getIdentityAccountData","metadata","loadTrustMetadata","ipfsUri","currentVerifiers","Set","Array","isArray","verifiers","filter","value","Boolean","trim","map","add","updatedUri","pinTrustMetadata","from","signAndValidateOnXrpl","TransactionType","Account","NFTokenID","nftTokenId","URI","toHex","_ref","xrplClient","assertAccountOwnsToken","_x13","accepter_xrpl_address","nft_token_id","ipfs_uri","_x3","_x4","_signAndValidateOnXrpl","transaction","preflight","resolveXrplWebSocketUrl","connect","autofilled","autofill","hash","signAndSubmit","waitForValidation","disconnect","catch","undefined","_x5","_x6","_waitForValidation","attempt","_response$result","response","request","command","error","_data$error","_data","errorCode","data","sleep","result","validated","concat","_x7","_getVerificationRoomId","counterpartyXrplAddress","verificationRoomId","resolveVerificationRoomId","_verificationConfig$n","websocketUrl","network","input","bytes","TextEncoder","encode","toString","padStart","join","toUpperCase","_x8","_getIdentityAccountData","userId","getUserId","accessToken","getAccessToken","accountDataUrl","baseUrl","replace","encodeURIComponent","fetch","method","headers","ok","status","json","_x9","_x0","_x1","_assertAccountOwnsToken","account","tokenId","_response$result2","found","account_nfts","some","entry","_x10","_loadTrustMetadata","uri","startsWith","JSON","parse","_uri$split$","payload","decodeURIComponent","split","cidPath","_x11","_pinTrustMetadata","pinJsonToIpfs","jwt","pinataJwt","body","stringify","pinataContent","IpfsHash","_x12","_sleep","ms","Promise","resolve","setTimeout"],"sources":["../../src/xrpl/verification.ts"],"sourcesContent":["/*\nCopyright 2026 The Matrix.org Foundation C.I.C.\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 { Client as XrplClient, type SubmittableTransaction } from \"xrpl\";\n\nimport { EventType } from \"../@types/event.ts\";\nimport type { BriijClient } from \"../client.ts\";\nimport { type XamanWalletAdapter, type XrplIdentityAccountData } from \"./identity.ts\";\n\nexport const XRPL_VERIFY_REQUEST_EVENT: EventType.UserVerifyRequest = EventType.UserVerifyRequest;\nexport const XRPL_VERIFY_ACCEPT_EVENT: EventType.UserVerifyAccept = EventType.UserVerifyAccept;\nexport const XRPL_VERIFIED_EVENT: EventType.UserVerified = EventType.UserVerified;\n\nconst NFT_TRUST_TAG = \"nft_metadata\";\nconst XRPL_IDENTITY_ACCOUNT_DATA_TYPE = \"io.textrp.xrpl.identity_nft\";\n\nconst DEFAULT_XRPL_NETWORK = \"testnet\";\nconst DEFAULT_XRPL_TESTNET_WS = \"wss://s.altnet.rippletest.net:51233\";\nconst DEFAULT_XRPL_MAINNET_WS = \"wss://s1.ripple.com\";\n\nexport interface XrplVerificationConfig {\n matrixClient: Pick<BriijClient, \"sendEvent\" | \"getUserId\" | \"getAccessToken\"> & { baseUrl: string };\n xamanWallet: XamanWalletAdapter;\n verificationRoomId?: string;\n resolveVerificationRoomId?: (counterpartyXrplAddress: string) => Promise<string> | string;\n pinJsonToIpfs?: (payload: Record<string, unknown>) => Promise<string>;\n pinataJwt?: string;\n websocketUrl?: string;\n network?: \"mainnet\" | \"testnet\";\n}\n\nexport interface XrplVerificationTxResult {\n txHash: string;\n credentialTypeHex: string;\n}\n\nlet verificationConfig: Partial<XrplVerificationConfig> = {};\n\nexport function configureXrplVerification(config: Partial<XrplVerificationConfig>): void {\n verificationConfig = {\n ...verificationConfig,\n ...config,\n };\n}\n\nexport async function requestVerification(targetXrplAddress: string): Promise<XrplVerificationTxResult> {\n const { matrixClient, xamanWallet } = verificationConfig;\n if (!matrixClient || !xamanWallet) {\n throw new Error(\"XRPL verification is not configured with matrixClient and xamanWallet\");\n }\n\n const issuerXrplAddress = await xamanWallet.getAddress();\n const roomId = await getVerificationRoomId(targetXrplAddress);\n await matrixClient.sendEvent(roomId, XRPL_VERIFY_REQUEST_EVENT, {\n tx_hash: \"\",\n issuer_xrpl_address: issuerXrplAddress,\n target_xrpl_address: targetXrplAddress,\n trust_model: NFT_TRUST_TAG,\n });\n\n return {\n txHash: \"\",\n credentialTypeHex: NFT_TRUST_TAG,\n };\n}\n\nexport async function acceptVerification(issuerXrplAddress: string): Promise<XrplVerificationTxResult> {\n const { matrixClient, xamanWallet } = verificationConfig;\n if (!matrixClient || !xamanWallet) {\n throw new Error(\"XRPL verification is not configured with matrixClient and xamanWallet\");\n }\n\n const signerAddress = await xamanWallet.getAddress();\n const identity = await getIdentityAccountData(matrixClient);\n const metadata = await loadTrustMetadata(identity.ipfsUri);\n const currentVerifiers = new Set(\n Array.isArray(metadata.verifiers)\n ? metadata.verifiers\n .filter((value): value is string => typeof value === \"string\" && Boolean(value.trim()))\n .map((value) => value.trim())\n : [],\n );\n currentVerifiers.add(issuerXrplAddress);\n const updatedUri = await pinTrustMetadata({\n ...metadata,\n verifiers: Array.from(currentVerifiers),\n });\n\n const roomId = await getVerificationRoomId(issuerXrplAddress);\n const txHash = await signAndValidateOnXrpl(\n {\n TransactionType: \"NFTokenModify\",\n Account: signerAddress,\n NFTokenID: identity.nftTokenId,\n URI: toHex(updatedUri),\n },\n async (xrplClient) => {\n await assertAccountOwnsToken(xrplClient, signerAddress, identity.nftTokenId);\n },\n );\n\n await matrixClient.sendEvent(roomId, XRPL_VERIFY_ACCEPT_EVENT, {\n tx_hash: txHash,\n issuer_xrpl_address: issuerXrplAddress,\n accepter_xrpl_address: signerAddress,\n nft_token_id: identity.nftTokenId,\n ipfs_uri: updatedUri,\n trust_model: NFT_TRUST_TAG,\n });\n\n return {\n txHash,\n credentialTypeHex: NFT_TRUST_TAG,\n };\n}\n\nasync function signAndValidateOnXrpl(\n transaction: Record<string, unknown>,\n preflight?: (xrplClient: XrplClient) => Promise<void>,\n): Promise<string> {\n const { xamanWallet } = verificationConfig;\n if (!xamanWallet) {\n throw new Error(\"Missing Xaman wallet adapter\");\n }\n\n const xrplClient = new XrplClient(resolveXrplWebSocketUrl());\n await xrplClient.connect();\n\n try {\n if (preflight) {\n await preflight(xrplClient);\n }\n const autofilled = await xrplClient.autofill(transaction as unknown as SubmittableTransaction);\n const { hash: txHash } = await xamanWallet.signAndSubmit(autofilled as Record<string, unknown>);\n await waitForValidation(xrplClient, txHash);\n return txHash;\n } finally {\n await xrplClient.disconnect().catch(() => undefined);\n }\n}\n\nasync function waitForValidation(xrplClient: XrplClient, txHash: string): Promise<void> {\n for (let attempt = 0; attempt < 15; attempt += 1) {\n let response: { result?: { validated?: boolean } };\n try {\n response = (await xrplClient.request({\n command: \"tx\",\n transaction: txHash,\n })) as { result?: { validated?: boolean } };\n } catch (error) {\n const errorCode =\n error instanceof Error && \"data\" in error\n ? ((error as { data?: { error?: string } }).data?.error ?? (error as { error?: string }).error)\n : undefined;\n if (errorCode === \"txnNotFound\") {\n await sleep(1000);\n continue;\n }\n throw error;\n }\n\n if (response.result?.validated === true) return;\n await sleep(1000);\n }\n\n throw new Error(`Timed out waiting for XRPL tx validation: ${txHash}`);\n}\n\nasync function getVerificationRoomId(counterpartyXrplAddress: string): Promise<string> {\n if (verificationConfig.verificationRoomId) {\n return verificationConfig.verificationRoomId;\n }\n if (verificationConfig.resolveVerificationRoomId) {\n return await verificationConfig.resolveVerificationRoomId(counterpartyXrplAddress);\n }\n throw new Error(\"No verification room configured\");\n}\n\nfunction resolveXrplWebSocketUrl(): string {\n if (verificationConfig.websocketUrl) return verificationConfig.websocketUrl;\n const network = verificationConfig.network ?? DEFAULT_XRPL_NETWORK;\n return network === \"mainnet\" ? DEFAULT_XRPL_MAINNET_WS : DEFAULT_XRPL_TESTNET_WS;\n}\n\nfunction toHex(input: string | Uint8Array): string {\n const bytes = typeof input === \"string\" ? new TextEncoder().encode(input) : input;\n return Array.from(bytes)\n .map((value) => value.toString(16).padStart(2, \"0\"))\n .join(\"\")\n .toUpperCase();\n}\n\nasync function getIdentityAccountData(\n matrixClient: Pick<BriijClient, \"getUserId\" | \"getAccessToken\"> & { baseUrl: string },\n): Promise<XrplIdentityAccountData> {\n const userId = matrixClient.getUserId();\n const accessToken = matrixClient.getAccessToken();\n if (!userId || !accessToken) {\n throw new Error(\"Missing Matrix session for XRPL verification\");\n }\n\n const accountDataUrl =\n `${matrixClient.baseUrl.replace(/\\/+$/, \"\")}` +\n `/_matrix/client/v3/user/${encodeURIComponent(userId)}/account_data/${encodeURIComponent(XRPL_IDENTITY_ACCOUNT_DATA_TYPE)}`;\n const response = await fetch(accountDataUrl, {\n method: \"GET\",\n headers: {\n \"Authorization\": `Bearer ${accessToken}`,\n \"Content-Type\": \"application/json\",\n },\n });\n if (!response.ok) {\n throw new Error(`Unable to fetch identity NFT account_data: HTTP ${response.status}`);\n }\n return (await response.json()) as XrplIdentityAccountData;\n}\n\nasync function assertAccountOwnsToken(xrplClient: XrplClient, account: string, tokenId: string): Promise<void> {\n const response = await xrplClient.request({\n command: \"account_nfts\",\n account,\n });\n const found = response.result?.account_nfts?.some((entry: { NFTokenID?: string }) => entry.NFTokenID === tokenId);\n if (!found) {\n throw new Error(`Identity NFT ${tokenId} not found on account ${account}`);\n }\n}\n\nasync function loadTrustMetadata(uri: string): Promise<Record<string, unknown>> {\n if (!uri) return {};\n if (uri.startsWith(\"{\")) {\n return JSON.parse(uri) as Record<string, unknown>;\n }\n\n if (uri.startsWith(\"data:application/json,\")) {\n const payload = decodeURIComponent(uri.split(\",\", 2)[1] ?? \"{}\");\n return JSON.parse(payload) as Record<string, unknown>;\n }\n\n if (uri.startsWith(\"ipfs://\")) {\n const cidPath = uri.replace(\"ipfs://\", \"\");\n const response = await fetch(`https://ipfs.io/ipfs/${cidPath}`);\n if (!response.ok) {\n throw new Error(`Failed to fetch IPFS metadata: HTTP ${response.status}`);\n }\n return (await response.json()) as Record<string, unknown>;\n }\n\n return {};\n}\n\nasync function pinTrustMetadata(payload: Record<string, unknown>): Promise<string> {\n if (verificationConfig.pinJsonToIpfs) {\n return await verificationConfig.pinJsonToIpfs(payload);\n }\n\n const jwt = verificationConfig.pinataJwt;\n if (!jwt) {\n throw new Error(\"Set pinJsonToIpfs or pinataJwt before acceptVerification()\");\n }\n\n const response = await fetch(\"https://api.pinata.cloud/pinning/pinJSONToIPFS\", {\n method: \"POST\",\n headers: {\n \"Authorization\": `Bearer ${jwt}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ pinataContent: payload }),\n });\n if (!response.ok) {\n throw new Error(`Pinata pin failed: HTTP ${response.status}`);\n }\n const body = (await response.json()) as { IpfsHash?: string };\n if (!body.IpfsHash) {\n throw new Error(\"Pinata response missing IpfsHash\");\n }\n return `ipfs://${body.IpfsHash}`;\n}\n\nasync function sleep(ms: number): Promise<void> {\n await new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,130 +1,128 @@
1
1
  {
2
- "name": "@textrp/briij-js-sdk",
3
- "version": "43.0.0",
4
- "description": "Briij Client-Server SDK for JavaScript and TypeScript",
5
- "engines": {
6
- "node": ">=22.0.0"
7
- },
8
- "scripts": {
9
- "prepare": "pnpm build",
10
- "start": "echo THIS IS FOR LEGACY PURPOSES ONLY. && babel --delete-dir-on-start src -w -s -d lib --verbose --extensions \".ts,.js\"",
11
- "build": "pnpm build:compile && pnpm build:types",
12
- "build:types": "tsc -p tsconfig-build.json --emitDeclarationOnly",
13
- "build:compile": "babel --delete-dir-on-start -d lib --verbose --extensions \".ts,.js\" src",
14
- "gendoc": "typedoc",
15
- "lint": "pnpm lint:types && pnpm lint:js && pnpm lint:workflows",
16
- "lint:js": "eslint --max-warnings 0 src spec && prettier --check .",
17
- "lint:js-fix": "prettier --log-level=warn --write . && eslint --fix src spec",
18
- "lint:types": "tsc --noEmit",
19
- "lint:workflows": "find .github/workflows -type f \\( -iname '*.yaml' -o -iname '*.yml' \\) | xargs -I {} sh -c 'echo \"Linting {}\"; action-validator \"{}\"'",
20
- "lint:knip": "knip",
21
- "test": "vitest",
22
- "test:watch": "vitest --watch",
23
- "coverage": "pnpm test --coverage"
24
- },
25
- "repository": {
26
- "type": "git",
27
- "url": "git+https://github.com/xurgedigitallab/briij-js-sdk.git"
28
- },
29
- "keywords": [
30
- "briij"
31
- ],
32
- "type": "module",
33
- "main": "./lib/index.js",
34
- "browser": "./lib/browser-index.js",
35
- "typings": "./lib/index.d.ts",
36
- "author": "textrp",
37
- "license": "Apache-2.0",
38
- "publishConfig": {
39
- "registry": "https://registry.npmjs.org",
40
- "access": "public"
41
- },
42
- "files": [
43
- "lib",
44
- "src",
45
- "git-revision.txt",
46
- "CHANGELOG.md",
47
- "CONTRIBUTING.rst",
48
- "LICENSE",
49
- "README.md",
50
- "package.json",
51
- "release.sh"
52
- ],
53
- "dependencies": {
54
- "@babel/runtime": "^7.12.5",
55
- "@matrix-org/matrix-sdk-crypto-wasm": "^17.1.0",
56
- "another-json": "^0.2.0",
57
- "bs58": "^6.0.0",
58
- "content-type": "^1.0.4",
59
- "jwt-decode": "^4.0.0",
60
- "loglevel": "^1.9.2",
61
- "matrix-events-sdk": "0.0.1",
62
- "matrix-widget-api": "^1.16.1",
63
- "oidc-client-ts": "^3.0.1",
64
- "p-retry": "7",
65
- "sdp-transform": "^3.0.0",
66
- "unhomoglyph": "^1.0.6",
67
- "uuid": "13",
68
- "xrpl": "^4.6.0"
69
- },
70
- "devDependencies": {
71
- "@action-validator/cli": "^0.6.0",
72
- "@action-validator/core": "^0.6.0",
73
- "@babel/cli": "^7.12.10",
74
- "@babel/core": "^7.12.10",
75
- "@babel/eslint-parser": "^7.12.10",
76
- "@babel/eslint-plugin": "^7.12.10",
77
- "@babel/plugin-proposal-decorators": "^7.25.9",
78
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
79
- "@babel/plugin-transform-class-properties": "^7.12.1",
80
- "@babel/plugin-transform-numeric-separator": "^7.12.7",
81
- "@babel/plugin-transform-object-rest-spread": "^7.12.1",
82
- "@babel/plugin-transform-runtime": "^7.12.10",
83
- "@babel/preset-env": "^7.12.11",
84
- "@babel/preset-typescript": "^7.12.7",
85
- "@fetch-mock/vitest": "^0.2.18",
86
- "@matrix-org/olm": "3.2.15",
87
- "@peculiar/webcrypto": "^1.4.5",
88
- "@stylistic/eslint-plugin": "^5.0.0",
89
- "@types/content-type": "^1.1.5",
90
- "@types/debug": "^4.1.7",
91
- "@types/node": "22",
92
- "@types/sdp-transform": "^2.4.5",
93
- "@typescript-eslint/eslint-plugin": "^8.0.0",
94
- "@typescript-eslint/parser": "^8.0.0",
95
- "@vitest/coverage-v8": "^4.0.17",
96
- "@vitest/eslint-plugin": "^1.6.6",
97
- "@vitest/ui": "^4.0.17",
98
- "babel-plugin-search-and-replace": "^1.1.1",
99
- "debug": "^4.3.4",
100
- "eslint": "^9.0.0",
101
- "eslint-config-google": "^0.14.0",
102
- "eslint-config-prettier": "^10.0.0",
103
- "eslint-import-resolver-typescript": "^4.0.0",
104
- "eslint-plugin-import": "^2.26.0",
105
- "eslint-plugin-jsdoc": "^62.0.0",
106
- "eslint-plugin-matrix-org": "^3.0.0",
107
- "eslint-plugin-n": "^14.0.0",
108
- "eslint-plugin-tsdoc": "^0.5.0",
109
- "eslint-plugin-unicorn": "^56.0.0",
110
- "fake-indexeddb": "^5.0.2",
111
- "fetch-mock": "^12.6.0",
112
- "happy-dom": "^20.1.0",
113
- "husky": "^9.0.0",
114
- "knip": "^5.0.0",
115
- "lint-staged": "^16.0.0",
116
- "matrix-mock-request": "^2.5.0",
117
- "prettier": "3.8.1",
118
- "typedoc": "^0.28.1",
119
- "typedoc-plugin-coverage": "^4.0.0",
120
- "typedoc-plugin-mdn-links": "^5.0.0",
121
- "typedoc-plugin-missing-exports": "^4.0.0",
122
- "typescript": "^5.4.2",
123
- "vitest": "^4.0.17",
124
- "vitest-sonar-reporter": "^3.0.0"
125
- },
126
- "resolutions": {
127
- "expect": "30.2.0"
128
- },
129
- "packageManager": "pnpm@10.30.3+sha512.c961d1e0a2d8e354ecaa5166b822516668b7f44cb5bd95122d590dd81922f606f5473b6d23ec4a5be05e7fcd18e8488d47d978bbe981872f1145d06e9a740017"
130
- }
2
+ "name": "@textrp/briij-js-sdk",
3
+ "version": "43.1.1",
4
+ "description": "Briij Client-Server SDK for JavaScript and TypeScript",
5
+ "engines": {
6
+ "node": ">=22.0.0"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/xurgedigitallab/briij-js-sdk.git"
11
+ },
12
+ "keywords": [
13
+ "briij"
14
+ ],
15
+ "type": "module",
16
+ "main": "./lib/index.js",
17
+ "browser": "./lib/browser-index.js",
18
+ "typings": "./lib/index.d.ts",
19
+ "author": "textrp",
20
+ "license": "Apache-2.0",
21
+ "publishConfig": {
22
+ "registry": "https://registry.npmjs.org",
23
+ "access": "public"
24
+ },
25
+ "files": [
26
+ "lib",
27
+ "src",
28
+ "git-revision.txt",
29
+ "CHANGELOG.md",
30
+ "CONTRIBUTING.rst",
31
+ "LICENSE",
32
+ "README.md",
33
+ "package.json",
34
+ "release.sh"
35
+ ],
36
+ "dependencies": {
37
+ "@babel/runtime": "^7.12.5",
38
+ "@matrix-org/matrix-sdk-crypto-wasm": "^17.1.0",
39
+ "another-json": "^0.2.0",
40
+ "bs58": "^6.0.0",
41
+ "content-type": "^1.0.4",
42
+ "jwt-decode": "^4.0.0",
43
+ "loglevel": "^1.9.2",
44
+ "matrix-events-sdk": "0.0.1",
45
+ "matrix-widget-api": "^1.16.1",
46
+ "oidc-client-ts": "^3.0.1",
47
+ "p-retry": "7",
48
+ "sdp-transform": "^3.0.0",
49
+ "unhomoglyph": "^1.0.6",
50
+ "uuid": "13",
51
+ "xrpl": "^4.6.0"
52
+ },
53
+ "devDependencies": {
54
+ "@action-validator/cli": "^0.6.0",
55
+ "@action-validator/core": "^0.6.0",
56
+ "@babel/cli": "^7.12.10",
57
+ "@babel/core": "^7.12.10",
58
+ "@babel/eslint-parser": "^7.12.10",
59
+ "@babel/eslint-plugin": "^7.12.10",
60
+ "@babel/plugin-proposal-decorators": "^7.25.9",
61
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
62
+ "@babel/plugin-transform-class-properties": "^7.12.1",
63
+ "@babel/plugin-transform-numeric-separator": "^7.12.7",
64
+ "@babel/plugin-transform-object-rest-spread": "^7.12.1",
65
+ "@babel/plugin-transform-runtime": "^7.12.10",
66
+ "@babel/preset-env": "^7.12.11",
67
+ "@babel/preset-typescript": "^7.12.7",
68
+ "@fetch-mock/vitest": "^0.2.18",
69
+ "@matrix-org/olm": "3.2.15",
70
+ "@peculiar/webcrypto": "^1.4.5",
71
+ "@stylistic/eslint-plugin": "^5.0.0",
72
+ "@types/content-type": "^1.1.5",
73
+ "@types/debug": "^4.1.7",
74
+ "@types/node": "22",
75
+ "@types/sdp-transform": "^2.4.5",
76
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
77
+ "@typescript-eslint/parser": "^8.0.0",
78
+ "@vitest/coverage-v8": "^4.0.17",
79
+ "@vitest/eslint-plugin": "^1.6.6",
80
+ "@vitest/ui": "^4.0.17",
81
+ "babel-plugin-search-and-replace": "^1.1.1",
82
+ "debug": "^4.3.4",
83
+ "eslint": "^9.0.0",
84
+ "eslint-config-google": "^0.14.0",
85
+ "eslint-config-prettier": "^10.0.0",
86
+ "eslint-import-resolver-typescript": "^4.0.0",
87
+ "eslint-plugin-import": "^2.26.0",
88
+ "eslint-plugin-jsdoc": "^62.0.0",
89
+ "eslint-plugin-matrix-org": "^3.0.0",
90
+ "eslint-plugin-n": "^14.0.0",
91
+ "eslint-plugin-tsdoc": "^0.5.0",
92
+ "eslint-plugin-unicorn": "^56.0.0",
93
+ "fake-indexeddb": "^5.0.2",
94
+ "fetch-mock": "^12.6.0",
95
+ "happy-dom": "^20.1.0",
96
+ "husky": "^9.0.0",
97
+ "knip": "^5.0.0",
98
+ "lint-staged": "^16.0.0",
99
+ "matrix-mock-request": "^2.5.0",
100
+ "prettier": "3.8.1",
101
+ "typedoc": "^0.28.1",
102
+ "typedoc-plugin-coverage": "^4.0.0",
103
+ "typedoc-plugin-mdn-links": "^5.0.0",
104
+ "typedoc-plugin-missing-exports": "^4.0.0",
105
+ "typescript": "^5.4.2",
106
+ "vitest": "^4.0.17",
107
+ "vitest-sonar-reporter": "^3.0.0"
108
+ },
109
+ "resolutions": {
110
+ "expect": "30.2.0"
111
+ },
112
+ "scripts": {
113
+ "start": "echo THIS IS FOR LEGACY PURPOSES ONLY. && babel --delete-dir-on-start src -w -s -d lib --verbose --extensions \".ts,.js\"",
114
+ "build": "pnpm build:compile && pnpm build:types",
115
+ "build:types": "tsc -p tsconfig-build.json --emitDeclarationOnly",
116
+ "build:compile": "babel --delete-dir-on-start -d lib --verbose --extensions \".ts,.js\" src",
117
+ "gendoc": "typedoc",
118
+ "lint": "pnpm lint:types && pnpm lint:js && pnpm lint:workflows",
119
+ "lint:js": "eslint --max-warnings 0 src spec && prettier --check .",
120
+ "lint:js-fix": "prettier --log-level=warn --write . && eslint --fix src spec",
121
+ "lint:types": "tsc --noEmit",
122
+ "lint:workflows": "find .github/workflows -type f \\( -iname '*.yaml' -o -iname '*.yml' \\) | xargs -I {} sh -c 'echo \"Linting {}\"; action-validator \"{}\"'",
123
+ "lint:knip": "knip",
124
+ "test": "vitest",
125
+ "test:watch": "vitest --watch",
126
+ "coverage": "pnpm test --coverage"
127
+ }
128
+ }
@@ -41,6 +41,8 @@ export interface ILoginFlowsResponse {
41
41
  export const XRPL_WALLET_LOGIN_TYPE = "io.briij.login.xrpl";
42
42
  export const WALLET_E2EE_RECOVERY_ACCOUNT_DATA_TYPE = "org.textrp.wallet.e2ee_recovery.v1";
43
43
  export const WALLET_IDENTITY_ACCOUNT_DATA_TYPE = "org.textrp.wallet.identity";
44
+ export type KnownXrplAlgorithm = "secp256k1" | "ed25519";
45
+ export type XrplAlgorithm = KnownXrplAlgorithm | (string & { __brand?: "XrplAlgorithm" });
44
46
 
45
47
  export type LoginFlow = ISSOFlow | IPasswordFlow | IXrplWalletLoginFlow | ILoginFlow;
46
48
 
@@ -213,7 +215,7 @@ export interface XrplWalletChallengePayload {
213
215
  timestamp: number | string;
214
216
  message: string;
215
217
  public_key: string;
216
- algorithm?: "secp256k1" | "ed25519" | string;
218
+ algorithm?: XrplAlgorithm;
217
219
  }
218
220
 
219
221
  export interface XrplAuthChallengeRequest extends Omit<LoginRequest, "type"> {
@@ -250,10 +252,7 @@ export interface WalletRecoveryWrap {
250
252
  params?: Record<string, unknown>;
251
253
  }
252
254
 
253
- export interface WalletRecoveryPasswordWrap extends WalletRecoveryWrap {
254
- kdf: string;
255
- params?: Record<string, unknown>;
256
- }
255
+ export interface WalletRecoveryPasswordWrap extends WalletRecoveryWrap {}
257
256
 
258
257
  export interface WalletE2eeRecoveryEnvelope {
259
258
  envelope_version: number;
@@ -268,14 +267,14 @@ export interface WalletE2eeRecoveryEnvelope {
268
267
  export interface WalletIdentityAccountData {
269
268
  chain_id: string;
270
269
  account_id: string;
271
- public_key: string | null;
270
+ public_key?: string | null;
272
271
  network?: string | null;
273
272
  key_type?: string | null;
274
273
  }
275
274
 
276
275
  export interface XrplWalletLoginRequest extends Omit<LoginRequest, "type"> {
277
276
  type: typeof XRPL_WALLET_LOGIN_TYPE;
278
- wallet_address: string;
277
+ address: string;
279
278
  signature: string;
280
279
  challenge: string | XrplWalletChallengePayload;
281
280
  network?: string;