@cubist-labs/cubesigner-sdk 0.4.241 → 0.4.246

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 (61) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/spec/env/gamma.json +5 -0
  3. package/dist/src/audit_log.d.ts +5 -5
  4. package/dist/src/audit_log.js +1 -1
  5. package/dist/src/client/api_client.d.ts +22 -7
  6. package/dist/src/client/api_client.d.ts.map +1 -1
  7. package/dist/src/client/api_client.js +43 -13
  8. package/dist/src/client/base_client.d.ts +5 -1
  9. package/dist/src/client/base_client.d.ts.map +1 -1
  10. package/dist/src/client/base_client.js +16 -10
  11. package/dist/src/client/session.d.ts +3 -1
  12. package/dist/src/client/session.d.ts.map +1 -1
  13. package/dist/src/client/session.js +7 -3
  14. package/dist/src/client.d.ts +12 -5
  15. package/dist/src/client.d.ts.map +1 -1
  16. package/dist/src/client.js +15 -4
  17. package/dist/src/diffie_hellman.js +2 -2
  18. package/dist/src/env.d.ts +7 -0
  19. package/dist/src/env.d.ts.map +1 -1
  20. package/dist/src/env.js +14 -1
  21. package/dist/src/fetch.d.ts.map +1 -1
  22. package/dist/src/fetch.js +2 -3
  23. package/dist/src/key.d.ts +17 -1
  24. package/dist/src/key.d.ts.map +1 -1
  25. package/dist/src/key.js +19 -3
  26. package/dist/src/policy.d.ts +24 -7
  27. package/dist/src/policy.d.ts.map +1 -1
  28. package/dist/src/policy.js +34 -16
  29. package/dist/src/response.d.ts +29 -5
  30. package/dist/src/response.d.ts.map +1 -1
  31. package/dist/src/response.js +62 -24
  32. package/dist/src/schema.d.ts +975 -84
  33. package/dist/src/schema.d.ts.map +1 -1
  34. package/dist/src/schema.js +1 -1
  35. package/dist/src/schema_types.d.ts +10 -1
  36. package/dist/src/schema_types.d.ts.map +1 -1
  37. package/dist/src/schema_types.js +2 -1
  38. package/dist/src/scopes.d.ts.map +1 -1
  39. package/dist/src/scopes.js +23 -3
  40. package/dist/src/user_export.d.ts +1 -1
  41. package/dist/src/user_export.js +3 -3
  42. package/dist/src/util.d.ts +7 -0
  43. package/dist/src/util.d.ts.map +1 -1
  44. package/dist/src/util.js +30 -7
  45. package/package.json +1 -1
  46. package/src/audit_log.ts +3 -5
  47. package/src/client/api_client.ts +54 -14
  48. package/src/client/base_client.ts +13 -3
  49. package/src/client/session.ts +10 -3
  50. package/src/client.ts +17 -4
  51. package/src/diffie_hellman.ts +1 -1
  52. package/src/env.ts +17 -0
  53. package/src/fetch.ts +1 -2
  54. package/src/key.ts +26 -2
  55. package/src/policy.ts +34 -16
  56. package/src/response.ts +72 -25
  57. package/src/schema.ts +1034 -92
  58. package/src/schema_types.ts +12 -1
  59. package/src/scopes.ts +22 -2
  60. package/src/user_export.ts +2 -2
  61. package/src/util.ts +34 -8
@@ -30,7 +30,7 @@ async function userExportKeygen() {
30
30
  return (await userExportCipherSuite()).kem.generateKeyPair();
31
31
  }
32
32
  /**
33
- * Get the ArrayBuffer slice represented by a Buffer
33
+ * Get the ArrayBuffer slice represented by a Uint8Array
34
34
  *
35
35
  * @param b The buffer to convert
36
36
  * @returns The resulting ArrayBuffer
@@ -50,7 +50,7 @@ async function userExportDecrypt(recipientKey, response) {
50
50
  const suite = await userExportCipherSuite();
51
51
  // decrypt the export ciphertext using the HPKE one-shot API
52
52
  const tenc = new TextEncoder();
53
- const tdec = new TextDecoder();
53
+ const tdec = new TextDecoder("utf-8");
54
54
  const info = toArrayBuffer(tenc.encode(`cubist-signer::UserExportOwner::${response.user_id}`));
55
55
  const public_key = toArrayBuffer((0, util_1.decodeBase64)(response.ephemeral_public_key));
56
56
  const ctxt = toArrayBuffer((0, util_1.decodeBase64)(response.encrypted_key_material));
@@ -122,4 +122,4 @@ async function loadCrypto() {
122
122
  throw new Error("subtle crypto not supported");
123
123
  }
124
124
  }
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcl9leHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXNlcl9leHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxzREFRQztBQU9ELDRDQUVDO0FBUUQsc0NBRUM7QUFTRCw4Q0EyQkM7QUFvQ0QsNENBT0M7QUFPRCxnQ0FZQztBQXJJRCxpQ0FBc0M7QUFHdEM7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxxQkFBcUI7SUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUNuQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQzFCLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7S0FDM0IsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxLQUErQixDQUFDO0FBQ3pDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQjtJQUNwQyxPQUFPLENBQUMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxDQUFhO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxZQUF1QixFQUN2QixRQUFvQztJQUVwQyx3Q0FBd0M7SUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO0lBRTVDLDREQUE0RDtJQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDL0IsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUNBQW1DLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0YsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUEsbUJBQVksRUFBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFBLG1CQUFZLEVBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFNBQVMsR0FBMEIsSUFBSSxDQUFDLEtBQUssQ0FDakQsSUFBSSxDQUFDLE1BQU0sQ0FDVCxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQ2Q7UUFDRSxZQUFZO1FBQ1osR0FBRyxFQUFFLFVBQVU7UUFDZixJQUFJLEVBQUUsSUFBSTtLQUNYLEVBQ0QsSUFBSSxDQUNMLENBQ0YsQ0FDRixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFFSDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQjtJQUNwQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBQUMsT0FBTyxFQUFXLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLFVBQVU7SUFDOUIsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDaEUsMERBQTBEO1FBQzFELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBQ0QsaUJBQWlCO0lBQ2pCLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWM7UUFDNUQsT0FBTyxTQUE4QixDQUFDO0lBQ3hDLENBQUM7SUFBQyxPQUFPLEVBQVcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVXNlckV4cG9ydENvbXBsZXRlUmVzcG9uc2UsIFVzZXJFeHBvcnRLZXlNYXRlcmlhbCB9IGZyb20gXCIuL3NjaGVtYV90eXBlc1wiO1xuaW1wb3J0IHsgZGVjb2RlQmFzZTY0IH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHR5cGUgeyBDaXBoZXJTdWl0ZSB9IGZyb20gXCJAaHBrZS9jb3JlXCI7XG5cbi8qKlxuICogR2V0IHRoZSBIUEtFIGNpcGhlcnN1aXRlIGZvciB1c2VyLWV4cG9ydCBkZWNyeXB0aW9uLlxuICpcbiAqIEByZXR1cm5zIFRoZSBIUEtFIGNpcGhlcnN1aXRlIGZvciB1c2VyIGV4cG9ydC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVzZXJFeHBvcnRDaXBoZXJTdWl0ZSgpOiBQcm9taXNlPENpcGhlclN1aXRlPiB7XG4gIGNvbnN0IGhwa2UgPSBhd2FpdCBpbXBvcnQoXCJAaHBrZS9jb3JlXCIpO1xuICBjb25zdCBzdWl0ZSA9IG5ldyBocGtlLkNpcGhlclN1aXRlKHtcbiAgICBrZW06IG5ldyBocGtlLkRoa2VtUDI1NkhrZGZTaGEyNTYoKSxcbiAgICBrZGY6IG5ldyBocGtlLkhrZGZTaGEyNTYoKSxcbiAgICBhZWFkOiBuZXcgaHBrZS5BZXMyNTZHY20oKSxcbiAgfSk7XG4gIHJldHVybiBzdWl0ZSBhcyB1bmtub3duIGFzIENpcGhlclN1aXRlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHBhaXIgZm9yIHVzZXIgZXhwb3J0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXdseSBnZW5lcmF0ZWQga2V5IHBhaXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1c2VyRXhwb3J0S2V5Z2VuKCk6IFByb21pc2U8Q3J5cHRvS2V5UGFpcj4ge1xuICByZXR1cm4gKGF3YWl0IHVzZXJFeHBvcnRDaXBoZXJTdWl0ZSgpKS5rZW0uZ2VuZXJhdGVLZXlQYWlyKCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBBcnJheUJ1ZmZlciBzbGljZSByZXByZXNlbnRlZCBieSBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSBiIFRoZSBidWZmZXIgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIHJlc3VsdGluZyBBcnJheUJ1ZmZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheUJ1ZmZlcihiOiBVaW50OEFycmF5KTogQXJyYXlCdWZmZXIge1xuICByZXR1cm4gYi5idWZmZXIuc2xpY2UoYi5ieXRlT2Zmc2V0LCBiLmJ5dGVPZmZzZXQgKyBiLmJ5dGVMZW5ndGgpO1xufVxuXG4vKipcbiAqIERlY3J5cHQgYSB1c2VyIGV4cG9ydC5cbiAqXG4gKiBAcGFyYW0gcmVjaXBpZW50S2V5IFRoZSBOSVNUIFAtMjU2IHNlY3JldCBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgYHB1YmxpY0tleWAgYXJndW1lbnQgdG8gdGhlIGB1c2VyRXhwb3J0Q29tcGxldGVgIGludm9jYXRpb24gdGhhdCByZXR1cm5lZCBgcmVzcG9uc2VgLlxuICogQHBhcmFtIHJlc3BvbnNlIFRoZSByZXNwb25zZSBmcm9tIGEgc3VjY2Vzc2Z1bCBgdXNlckV4cG9ydENvbXBsZXRlYCByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIGRlY3J5cHRlZCBrZXkgbWF0ZXJpYWwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1c2VyRXhwb3J0RGVjcnlwdChcbiAgcmVjaXBpZW50S2V5OiBDcnlwdG9LZXksXG4gIHJlc3BvbnNlOiBVc2VyRXhwb3J0Q29tcGxldGVSZXNwb25zZSxcbik6IFByb21pc2U8VXNlckV4cG9ydEtleU1hdGVyaWFsPiB7XG4gIC8vIFRoZSBjaXBoZXJzdWl0ZSB3ZSB1c2UgZm9yIGRlY3J5cHRpb25cbiAgY29uc3Qgc3VpdGUgPSBhd2FpdCB1c2VyRXhwb3J0Q2lwaGVyU3VpdGUoKTtcblxuICAvLyBkZWNyeXB0IHRoZSBleHBvcnQgY2lwaGVydGV4dCB1c2luZyB0aGUgSFBLRSBvbmUtc2hvdCBBUElcbiAgY29uc3QgdGVuYyA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCB0ZGVjID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGNvbnN0IGluZm8gPSB0b0FycmF5QnVmZmVyKHRlbmMuZW5jb2RlKGBjdWJpc3Qtc2lnbmVyOjpVc2VyRXhwb3J0T3duZXI6OiR7cmVzcG9uc2UudXNlcl9pZH1gKSk7XG4gIGNvbnN0IHB1YmxpY19rZXkgPSB0b0FycmF5QnVmZmVyKGRlY29kZUJhc2U2NChyZXNwb25zZS5lcGhlbWVyYWxfcHVibGljX2tleSkpO1xuICBjb25zdCBjdHh0ID0gdG9BcnJheUJ1ZmZlcihkZWNvZGVCYXNlNjQocmVzcG9uc2UuZW5jcnlwdGVkX2tleV9tYXRlcmlhbCkpO1xuICBjb25zdCBkZWNyeXB0ZWQ6IFVzZXJFeHBvcnRLZXlNYXRlcmlhbCA9IEpTT04ucGFyc2UoXG4gICAgdGRlYy5kZWNvZGUoXG4gICAgICBhd2FpdCBzdWl0ZS5vcGVuKFxuICAgICAgICB7XG4gICAgICAgICAgcmVjaXBpZW50S2V5LFxuICAgICAgICAgIGVuYzogcHVibGljX2tleSxcbiAgICAgICAgICBpbmZvOiBpbmZvLFxuICAgICAgICB9LFxuICAgICAgICBjdHh0LFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIHJldHVybiBkZWNyeXB0ZWQ7XG59XG5cbi8qXG4gKiBUaGlzIG5leHQgdHdvIGZ1bmN0aW9ucyBhcmUgcG9ydGVkIGZyb20gdGhlIGhwa2UtanMgcGFja2FnZSxcbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL2RhamlhamkvaHBrZS1qcy9cbiAqIHdoaWNoIGlzIENvcHlyaWdodCAoQykgMjAyMiBBaml0b21pIERhaXN1a2UgYW5kIGxpY2Vuc2VkXG4gKiB1bmRlciB0aGUgTUlUIExpY2Vuc2UsIHdoaWNoIGZvbGxvd3M6XG4gKlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIgQWppdG9taSBEYWlzdWtlXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vKipcbiAqIEZpZ3VyZSBvdXQgaG93IHRvIGxvYWQgU3VidGxlQ3J5cHRvIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICpcbiAqIEByZXR1cm5zIEEgU3VidGxlQ3J5cHRvIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU3VidGxlQ3J5cHRvKCk6IFByb21pc2U8U3VidGxlQ3J5cHRvPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY3J5cHRvID0gYXdhaXQgbG9hZENyeXB0bygpO1xuICAgIHJldHVybiBjcnlwdG8uc3VidGxlO1xuICB9IGNhdGNoIChfZTogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBFcnJvcihcInN1YnRsZSBjcnlwdG8gbm90IHN1cHBvcnRlZFwiKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpZ3VyZSBvdXQgaG93IHRvIGxvYWQgQ3J5cHRvIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxuICpcbiAqIEByZXR1cm5zIEEgQ3J5cHRvIGluc3RhbmNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ3J5cHRvKCk6IFByb21pc2U8Q3J5cHRvPiB7XG4gIGlmIChnbG9iYWxUaGlzICE9PSB1bmRlZmluZWQgJiYgZ2xvYmFsVGhpcy5jcnlwdG8gIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIEJyb3dzZXJzLCBOb2RlLmpzID49IHYxOSwgQ2xvdWRmbGFyZSBXb3JrZXJzLCBCdW4sIGV0Yy5cbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5jcnlwdG87XG4gIH1cbiAgLy8gTm9kZS5qcyA8PSB2MThcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHdlYmNyeXB0byB9ID0gYXdhaXQgaW1wb3J0KFwiY3J5cHRvXCIpOyAvLyBub2RlOmNyeXB0b1xuICAgIHJldHVybiB3ZWJjcnlwdG8gYXMgdW5rbm93biBhcyBDcnlwdG87XG4gIH0gY2F0Y2ggKF9lOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3VidGxlIGNyeXB0byBub3Qgc3VwcG9ydGVkXCIpO1xuICB9XG59XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcl9leHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXNlcl9leHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxzREFRQztBQU9ELDRDQUVDO0FBUUQsc0NBRUM7QUFTRCw4Q0EyQkM7QUFvQ0QsNENBT0M7QUFPRCxnQ0FZQztBQXJJRCxpQ0FBc0M7QUFHdEM7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxxQkFBcUI7SUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUNuQyxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQzFCLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7S0FDM0IsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxLQUErQixDQUFDO0FBQ3pDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQjtJQUNwQyxPQUFPLENBQUMsTUFBTSxxQkFBcUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxDQUFhO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxZQUF1QixFQUN2QixRQUFvQztJQUVwQyx3Q0FBd0M7SUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO0lBRTVDLDREQUE0RDtJQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1DQUFtQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9GLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFBLG1CQUFZLEVBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBQSxtQkFBWSxFQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxTQUFTLEdBQTBCLElBQUksQ0FBQyxLQUFLLENBQ2pELElBQUksQ0FBQyxNQUFNLENBQ1QsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUNkO1FBQ0UsWUFBWTtRQUNaLEdBQUcsRUFBRSxVQUFVO1FBQ2YsSUFBSSxFQUFFLElBQUk7S0FDWCxFQUNELElBQUksQ0FDTCxDQUNGLENBQ0YsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUg7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxnQkFBZ0I7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLEVBQUUsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUFDLE9BQU8sRUFBVyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxVQUFVO0lBQzlCLElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hFLDBEQUEwRDtRQUMxRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUNELGlCQUFpQjtJQUNqQixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjO1FBQzVELE9BQU8sU0FBOEIsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxFQUFXLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDakQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVzZXJFeHBvcnRDb21wbGV0ZVJlc3BvbnNlLCBVc2VyRXhwb3J0S2V5TWF0ZXJpYWwgfSBmcm9tIFwiLi9zY2hlbWFfdHlwZXNcIjtcbmltcG9ydCB7IGRlY29kZUJhc2U2NCB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB0eXBlIHsgQ2lwaGVyU3VpdGUgfSBmcm9tIFwiQGhwa2UvY29yZVwiO1xuXG4vKipcbiAqIEdldCB0aGUgSFBLRSBjaXBoZXJzdWl0ZSBmb3IgdXNlci1leHBvcnQgZGVjcnlwdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgSFBLRSBjaXBoZXJzdWl0ZSBmb3IgdXNlciBleHBvcnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1c2VyRXhwb3J0Q2lwaGVyU3VpdGUoKTogUHJvbWlzZTxDaXBoZXJTdWl0ZT4ge1xuICBjb25zdCBocGtlID0gYXdhaXQgaW1wb3J0KFwiQGhwa2UvY29yZVwiKTtcbiAgY29uc3Qgc3VpdGUgPSBuZXcgaHBrZS5DaXBoZXJTdWl0ZSh7XG4gICAga2VtOiBuZXcgaHBrZS5EaGtlbVAyNTZIa2RmU2hhMjU2KCksXG4gICAga2RmOiBuZXcgaHBrZS5Ia2RmU2hhMjU2KCksXG4gICAgYWVhZDogbmV3IGhwa2UuQWVzMjU2R2NtKCksXG4gIH0pO1xuICByZXR1cm4gc3VpdGUgYXMgdW5rbm93biBhcyBDaXBoZXJTdWl0ZTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBwYWlyIGZvciB1c2VyIGV4cG9ydC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbmV3bHkgZ2VuZXJhdGVkIGtleSBwYWlyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXNlckV4cG9ydEtleWdlbigpOiBQcm9taXNlPENyeXB0b0tleVBhaXI+IHtcbiAgcmV0dXJuIChhd2FpdCB1c2VyRXhwb3J0Q2lwaGVyU3VpdGUoKSkua2VtLmdlbmVyYXRlS2V5UGFpcigpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgQXJyYXlCdWZmZXIgc2xpY2UgcmVwcmVzZW50ZWQgYnkgYSBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIGIgVGhlIGJ1ZmZlciB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIEFycmF5QnVmZmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5QnVmZmVyKGI6IFVpbnQ4QXJyYXkpOiBBcnJheUJ1ZmZlciB7XG4gIHJldHVybiBiLmJ1ZmZlci5zbGljZShiLmJ5dGVPZmZzZXQsIGIuYnl0ZU9mZnNldCArIGIuYnl0ZUxlbmd0aCk7XG59XG5cbi8qKlxuICogRGVjcnlwdCBhIHVzZXIgZXhwb3J0LlxuICpcbiAqIEBwYXJhbSByZWNpcGllbnRLZXkgVGhlIE5JU1QgUC0yNTYgc2VjcmV0IGtleSBjb3JyZXNwb25kaW5nIHRvIHRoZSBgcHVibGljS2V5YCBhcmd1bWVudCB0byB0aGUgYHVzZXJFeHBvcnRDb21wbGV0ZWAgaW52b2NhdGlvbiB0aGF0IHJldHVybmVkIGByZXNwb25zZWAuXG4gKiBAcGFyYW0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIGZyb20gYSBzdWNjZXNzZnVsIGB1c2VyRXhwb3J0Q29tcGxldGVgIHJlcXVlc3QuXG4gKiBAcmV0dXJucyBUaGUgZGVjcnlwdGVkIGtleSBtYXRlcmlhbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVzZXJFeHBvcnREZWNyeXB0KFxuICByZWNpcGllbnRLZXk6IENyeXB0b0tleSxcbiAgcmVzcG9uc2U6IFVzZXJFeHBvcnRDb21wbGV0ZVJlc3BvbnNlLFxuKTogUHJvbWlzZTxVc2VyRXhwb3J0S2V5TWF0ZXJpYWw+IHtcbiAgLy8gVGhlIGNpcGhlcnN1aXRlIHdlIHVzZSBmb3IgZGVjcnlwdGlvblxuICBjb25zdCBzdWl0ZSA9IGF3YWl0IHVzZXJFeHBvcnRDaXBoZXJTdWl0ZSgpO1xuXG4gIC8vIGRlY3J5cHQgdGhlIGV4cG9ydCBjaXBoZXJ0ZXh0IHVzaW5nIHRoZSBIUEtFIG9uZS1zaG90IEFQSVxuICBjb25zdCB0ZW5jID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IHRkZWMgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcbiAgY29uc3QgaW5mbyA9IHRvQXJyYXlCdWZmZXIodGVuYy5lbmNvZGUoYGN1YmlzdC1zaWduZXI6OlVzZXJFeHBvcnRPd25lcjo6JHtyZXNwb25zZS51c2VyX2lkfWApKTtcbiAgY29uc3QgcHVibGljX2tleSA9IHRvQXJyYXlCdWZmZXIoZGVjb2RlQmFzZTY0KHJlc3BvbnNlLmVwaGVtZXJhbF9wdWJsaWNfa2V5KSk7XG4gIGNvbnN0IGN0eHQgPSB0b0FycmF5QnVmZmVyKGRlY29kZUJhc2U2NChyZXNwb25zZS5lbmNyeXB0ZWRfa2V5X21hdGVyaWFsKSk7XG4gIGNvbnN0IGRlY3J5cHRlZDogVXNlckV4cG9ydEtleU1hdGVyaWFsID0gSlNPTi5wYXJzZShcbiAgICB0ZGVjLmRlY29kZShcbiAgICAgIGF3YWl0IHN1aXRlLm9wZW4oXG4gICAgICAgIHtcbiAgICAgICAgICByZWNpcGllbnRLZXksXG4gICAgICAgICAgZW5jOiBwdWJsaWNfa2V5LFxuICAgICAgICAgIGluZm86IGluZm8sXG4gICAgICAgIH0sXG4gICAgICAgIGN0eHQsXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgcmV0dXJuIGRlY3J5cHRlZDtcbn1cblxuLypcbiAqIFRoaXMgbmV4dCB0d28gZnVuY3Rpb25zIGFyZSBwb3J0ZWQgZnJvbSB0aGUgaHBrZS1qcyBwYWNrYWdlLFxuICogICBodHRwczovL2dpdGh1Yi5jb20vZGFqaWFqaS9ocGtlLWpzL1xuICogd2hpY2ggaXMgQ29weXJpZ2h0IChDKSAyMDIyIEFqaXRvbWkgRGFpc3VrZSBhbmQgbGljZW5zZWRcbiAqIHVuZGVyIHRoZSBNSVQgTGljZW5zZSwgd2hpY2ggZm9sbG93czpcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAyMiBBaml0b21pIERhaXN1a2VcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbi8qKlxuICogRmlndXJlIG91dCBob3cgdG8gbG9hZCBTdWJ0bGVDcnlwdG8gaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gKlxuICogQHJldHVybnMgQSBTdWJ0bGVDcnlwdG8gaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTdWJ0bGVDcnlwdG8oKTogUHJvbWlzZTxTdWJ0bGVDcnlwdG8+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjcnlwdG8gPSBhd2FpdCBsb2FkQ3J5cHRvKCk7XG4gICAgcmV0dXJuIGNyeXB0by5zdWJ0bGU7XG4gIH0gY2F0Y2ggKF9lOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwic3VidGxlIGNyeXB0byBub3Qgc3VwcG9ydGVkXCIpO1xuICB9XG59XG5cbi8qKlxuICogRmlndXJlIG91dCBob3cgdG8gbG9hZCBDcnlwdG8gaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuXG4gKlxuICogQHJldHVybnMgQSBDcnlwdG8gaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDcnlwdG8oKTogUHJvbWlzZTxDcnlwdG8+IHtcbiAgaWYgKGdsb2JhbFRoaXMgIT09IHVuZGVmaW5lZCAmJiBnbG9iYWxUaGlzLmNyeXB0byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gQnJvd3NlcnMsIE5vZGUuanMgPj0gdjE5LCBDbG91ZGZsYXJlIFdvcmtlcnMsIEJ1biwgZXRjLlxuICAgIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0bztcbiAgfVxuICAvLyBOb2RlLmpzIDw9IHYxOFxuICB0cnkge1xuICAgIGNvbnN0IHsgd2ViY3J5cHRvIH0gPSBhd2FpdCBpbXBvcnQoXCJjcnlwdG9cIik7IC8vIG5vZGU6Y3J5cHRvXG4gICAgcmV0dXJuIHdlYmNyeXB0byBhcyB1bmtub3duIGFzIENyeXB0bztcbiAgfSBjYXRjaCAoX2U6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdWJ0bGUgY3J5cHRvIG5vdCBzdXBwb3J0ZWRcIik7XG4gIH1cbn1cbiJdfQ==
@@ -63,4 +63,11 @@ export declare function delay(ms: number): Promise<void>;
63
63
  * @returns Hex string prefixed with "0x"
64
64
  */
65
65
  export declare function encodeToHex(message: string | Uint8Array): string;
66
+ /**
67
+ * Decodes a hex string into a byte array.
68
+ *
69
+ * @param hex The hex string to decode, with or without a "0x" prefix
70
+ * @returns Decoded byte array
71
+ */
72
+ export declare function decodeFromHex(hex: string): Uint8Array;
66
73
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,MAAM,WAAW,OAAO;IACtB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;CAC1E;AAED,sBAAsB;AACtB,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC;AAEtF,qBAAqB;AACrB,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/E,iCAAiC;AACjC,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAIpD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAI1D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,MAAM,CAO7E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,MAAM,CAIhF;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAGhE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,MAAM,WAAW,OAAO;IACtB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;CAC1E;AAED,sBAAsB;AACtB,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC;AAEtF,qBAAqB;AACrB,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAE/E,iCAAiC;AACjC,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG1D;AAKD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAIpD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAI1D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,MAAM,CAM7E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,WAAW,GAAG,MAAM,CAIhF;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAgBrD"}
package/dist/src/util.js CHANGED
@@ -7,6 +7,7 @@ exports.encodeToBase64 = encodeToBase64;
7
7
  exports.encodeToBase64Url = encodeToBase64Url;
8
8
  exports.delay = delay;
9
9
  exports.encodeToHex = encodeToHex;
10
+ exports.decodeFromHex = decodeFromHex;
10
11
  /**
11
12
  * Path join
12
13
  *
@@ -18,6 +19,8 @@ function pathJoin(dir, file) {
18
19
  const sep = globalThis?.process?.platform === "win32" ? "\\" : "/";
19
20
  return `${dir}${sep}${file}`;
20
21
  }
22
+ // eslint-disable-next-line no-restricted-globals -- intentionally checking for Buffer before using it
23
+ const nodeBuffer = typeof Buffer === "function" ? Buffer : undefined;
21
24
  /**
22
25
  * Browser-friendly helper for decoding a 'base64'-encoded string into a byte array.
23
26
  *
@@ -25,8 +28,8 @@ function pathJoin(dir, file) {
25
28
  * @returns Decoded byte array
26
29
  */
27
30
  function decodeBase64(b64) {
28
- return typeof Buffer === "function"
29
- ? Buffer.from(b64, "base64")
31
+ return nodeBuffer
32
+ ? nodeBuffer.from(b64, "base64")
30
33
  : Uint8Array.from(atob(b64), (c) => c.charCodeAt(0));
31
34
  }
32
35
  /**
@@ -49,8 +52,8 @@ function decodeBase64Url(b64url) {
49
52
  */
50
53
  function encodeToBase64(buffer) {
51
54
  const bytes = buffer instanceof ArrayBuffer ? new Uint8Array(buffer) : new Uint8Array(buffer);
52
- const b64 = typeof Buffer === "function"
53
- ? Buffer.from(bytes).toString("base64")
55
+ const b64 = nodeBuffer
56
+ ? nodeBuffer.from(bytes).toString("base64")
54
57
  : btoa(bytes.reduce((s, b) => s + String.fromCharCode(b), ""));
55
58
  return b64;
56
59
  }
@@ -82,7 +85,27 @@ function delay(ms) {
82
85
  * @returns Hex string prefixed with "0x"
83
86
  */
84
87
  function encodeToHex(message) {
85
- const buff = typeof message === "string" ? Buffer.from(message, "utf8") : Buffer.from(message);
86
- return "0x" + buff.toString("hex");
88
+ const bytes = typeof message === "string" ? new TextEncoder().encode(message) : message;
89
+ return "0x" + Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
87
90
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0JBLDRCQUdDO0FBUUQsb0NBSUM7QUFRRCwwQ0FJQztBQVNELHdDQU9DO0FBUUQsOENBSUM7QUFRRCxzQkFFQztBQVNELGtDQUdDO0FBcEZEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUNoRCxNQUFNLEdBQUcsR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ25FLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLE9BQU8sT0FBTyxNQUFNLEtBQUssVUFBVTtRQUNqQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxNQUFjO0lBQzVDLG9HQUFvRztJQUNwRyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0UsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxNQUFzQztJQUNuRSxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUYsTUFBTSxHQUFHLEdBQ1AsT0FBTyxNQUFNLEtBQUssVUFBVTtRQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxNQUFzQztJQUN0RSxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsb0dBQW9HO0lBQ3BHLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLEtBQUssQ0FBQyxFQUFVO0lBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLE9BQTRCO0lBQ3RELE1BQU0sSUFBSSxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0YsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEpTT04gbWFwIHR5cGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbk1hcCB7XG4gIFttZW1iZXI6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgSnNvbkFycmF5IHwgSnNvbk1hcDtcbn1cblxuLyoqIEpTT04gYXJyYXkgdHlwZSAqL1xuZXhwb3J0IHR5cGUgSnNvbkFycmF5ID0gQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCBKc29uQXJyYXkgfCBKc29uTWFwPjtcblxuLyoqIEFueSBKU09OIHZhbHVlICovXG5leHBvcnQgdHlwZSBKc29uVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IEpzb25BcnJheSB8IEpzb25NYXA7XG5cbi8qKiBUaGUgYWRkcmVzcyBvZiBhIGNvbnRyYWN0LiAqL1xuZXhwb3J0IHR5cGUgQ29udHJhY3RBZGRyZXNzID0ge1xuICBjaGFpbl9pZDogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFBhdGggam9pblxuICpcbiAqIEBwYXJhbSBkaXIgUGFyZW50IGRpcmVjdG9yeVxuICogQHBhcmFtIGZpbGUgUGF0aG5hbWVcbiAqIEByZXR1cm5zIE5ldyBwYXRobmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEpvaW4oZGlyOiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcCA9IGdsb2JhbFRoaXM/LnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBcIlxcXFxcIiA6IFwiL1wiO1xuICByZXR1cm4gYCR7ZGlyfSR7c2VwfSR7ZmlsZX1gO1xufVxuXG4vKipcbiAqIEJyb3dzZXItZnJpZW5kbHkgaGVscGVyIGZvciBkZWNvZGluZyBhICdiYXNlNjQnLWVuY29kZWQgc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICpcbiAqIEBwYXJhbSBiNjQgVGhlICdiYXNlNjQnLWVuY29kZWQgc3RyaW5nIHRvIGRlY29kZVxuICogQHJldHVybnMgRGVjb2RlZCBieXRlIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjQoYjY0OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgcmV0dXJuIHR5cGVvZiBCdWZmZXIgPT09IFwiZnVuY3Rpb25cIlxuICAgID8gQnVmZmVyLmZyb20oYjY0LCBcImJhc2U2NFwiKVxuICAgIDogVWludDhBcnJheS5mcm9tKGF0b2IoYjY0KSwgKGMpID0+IGMuY2hhckNvZGVBdCgwKSk7XG59XG5cbi8qKlxuICogQnJvd3Nlci1mcmllbmRseSBoZWxwZXIgZm9yIGRlY29kaW5nIGEgJ2Jhc2U2NHVybCctZW5jb2RlZCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIGI2NHVybCBUaGUgJ2Jhc2U2NHVybCctZW5jb2RlZCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAcmV0dXJucyBEZWNvZGVkIGJ5dGUgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUJhc2U2NFVybChiNjR1cmw6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAvLyBOT1RFOiB0aGVyZSBpcyBubyBcImJhc2U2NHVybFwiIGVuY29kaW5nIGluIHRoZSBcImJ1ZmZlclwiIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgKHVubGlrZSBpbiBub2RlLmpzKVxuICBjb25zdCBiNjQgPSBiNjR1cmwucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIikucmVwbGFjZSgvPSokL2csIFwiXCIpO1xuICByZXR1cm4gZGVjb2RlQmFzZTY0KGI2NCk7XG59XG5cbi8qKlxuICpcbiAqIEJyb3dzZXItZnJpZW5kbHkgaGVscGVyIGZvciBlbmNvZGluZyBhIGJ5dGUgYXJyYXkgaW50byBhIHBhZGRlZCBgYmFzZTY0YC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyIFRoZSBieXRlIGFycmF5IHRvIGVuY29kZVxuICogQHJldHVybnMgVGhlICdiYXNlNjQnIGVuY29kaW5nIG9mIHRoZSBieXRlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9CYXNlNjQoYnVmZmVyOiBJdGVyYWJsZTxudW1iZXI+IHwgQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCBieXRlcyA9IGJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSA6IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gIGNvbnN0IGI2NCA9XG4gICAgdHlwZW9mIEJ1ZmZlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgOiBidG9hKGJ5dGVzLnJlZHVjZSgocywgYikgPT4gcyArIFN0cmluZy5mcm9tQ2hhckNvZGUoYiksIFwiXCIpKTtcbiAgcmV0dXJuIGI2NDtcbn1cblxuLyoqXG4gKiBCcm93c2VyLWZyaWVuZGx5IGhlbHBlciBmb3IgZW5jb2RpbmcgYSBieXRlIGFycmF5IGludG8gYSAnYmFzZTY0dXJsYC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyIFRoZSBieXRlIGFycmF5IHRvIGVuY29kZVxuICogQHJldHVybnMgVGhlICdiYXNlNjR1cmwnIGVuY29kaW5nIG9mIHRoZSBieXRlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9CYXNlNjRVcmwoYnVmZmVyOiBJdGVyYWJsZTxudW1iZXI+IHwgQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCBiNjQgPSBlbmNvZGVUb0Jhc2U2NChidWZmZXIpO1xuICAvLyBOT1RFOiB0aGVyZSBpcyBubyBcImJhc2U2NHVybFwiIGVuY29kaW5nIGluIHRoZSBcImJ1ZmZlclwiIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgKHVubGlrZSBpbiBub2RlLmpzKVxuICByZXR1cm4gYjY0LnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKS5yZXBsYWNlKC89KiQvZywgXCJcIik7XG59XG5cbi8qKlxuICogU2xlZXBzIGZvciBgbXNgIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbXMgTWlsbGlzZWNvbmRzIHRvIHNsZWVwXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBhZnRlciBgbXNgIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb3IgYSB1aW50OCBhcnJheSBpbnRvIGEgaGV4IHN0cmluZy4gU3RyaW5ncyBhcmUgZW5jb2RlZCBpbiBVVEYtOCBiZWZvcmVcbiAqIGJlaW5nIGNvbnZlcnRlZCB0byBoZXguXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgVGhlIGlucHV0XG4gKiBAcmV0dXJucyBIZXggc3RyaW5nIHByZWZpeGVkIHdpdGggXCIweFwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVUb0hleChtZXNzYWdlOiBzdHJpbmcgfCBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgY29uc3QgYnVmZiA9IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gQnVmZmVyLmZyb20obWVzc2FnZSwgXCJ1dGY4XCIpIDogQnVmZmVyLmZyb20obWVzc2FnZSk7XG4gIHJldHVybiBcIjB4XCIgKyBidWZmLnRvU3RyaW5nKFwiaGV4XCIpO1xufVxuIl19
91
+ /**
92
+ * Decodes a hex string into a byte array.
93
+ *
94
+ * @param hex The hex string to decode, with or without a "0x" prefix
95
+ * @returns Decoded byte array
96
+ */
97
+ function decodeFromHex(hex) {
98
+ const clean = hex.startsWith("0x") ? hex.slice(2) : hex;
99
+ if (clean.length % 2 !== 0) {
100
+ throw new Error(`Invalid hexadecimal string length, must be even: ${clean.length}`);
101
+ }
102
+ if (!/^[0-9a-fA-F]*$/.test(clean)) {
103
+ throw new Error(`Invalid hexadecimal character in: '${clean}'`);
104
+ }
105
+ const bytes = new Uint8Array(clean.length / 2);
106
+ for (let i = 0; i < bytes.length; i++) {
107
+ bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
108
+ }
109
+ return bytes;
110
+ }
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0JBLDRCQUdDO0FBV0Qsb0NBSUM7QUFRRCwwQ0FJQztBQVNELHdDQU1DO0FBUUQsOENBSUM7QUFRRCxzQkFFQztBQVNELGtDQUdDO0FBUUQsc0NBZ0JDO0FBOUdEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUNoRCxNQUFNLEdBQUcsR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ25FLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRCxzR0FBc0c7QUFDdEcsTUFBTSxVQUFVLEdBQUcsT0FBTyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUVyRTs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLE9BQU8sVUFBVTtRQUNmLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7UUFDaEMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE1BQWM7SUFDNUMsb0dBQW9HO0lBQ3BHLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RSxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLE1BQXNDO0lBQ25FLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RixNQUFNLEdBQUcsR0FBRyxVQUFVO1FBQ3BCLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE1BQXNDO0lBQ3RFLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxvR0FBb0c7SUFDcEcsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLEVBQVU7SUFDOUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQUMsT0FBNEI7SUFDdEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3hGLE9BQU8sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEdBQVc7SUFDdkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRXhELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEpTT04gbWFwIHR5cGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbk1hcCB7XG4gIFttZW1iZXI6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsIHwgSnNvbkFycmF5IHwgSnNvbk1hcDtcbn1cblxuLyoqIEpTT04gYXJyYXkgdHlwZSAqL1xuZXhwb3J0IHR5cGUgSnNvbkFycmF5ID0gQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCBKc29uQXJyYXkgfCBKc29uTWFwPjtcblxuLyoqIEFueSBKU09OIHZhbHVlICovXG5leHBvcnQgdHlwZSBKc29uVmFsdWUgPSBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB8IEpzb25BcnJheSB8IEpzb25NYXA7XG5cbi8qKiBUaGUgYWRkcmVzcyBvZiBhIGNvbnRyYWN0LiAqL1xuZXhwb3J0IHR5cGUgQ29udHJhY3RBZGRyZXNzID0ge1xuICBjaGFpbl9pZDogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFBhdGggam9pblxuICpcbiAqIEBwYXJhbSBkaXIgUGFyZW50IGRpcmVjdG9yeVxuICogQHBhcmFtIGZpbGUgUGF0aG5hbWVcbiAqIEByZXR1cm5zIE5ldyBwYXRobmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEpvaW4oZGlyOiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlcCA9IGdsb2JhbFRoaXM/LnByb2Nlc3M/LnBsYXRmb3JtID09PSBcIndpbjMyXCIgPyBcIlxcXFxcIiA6IFwiL1wiO1xuICByZXR1cm4gYCR7ZGlyfSR7c2VwfSR7ZmlsZX1gO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIGludGVudGlvbmFsbHkgY2hlY2tpbmcgZm9yIEJ1ZmZlciBiZWZvcmUgdXNpbmcgaXRcbmNvbnN0IG5vZGVCdWZmZXIgPSB0eXBlb2YgQnVmZmVyID09PSBcImZ1bmN0aW9uXCIgPyBCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQnJvd3Nlci1mcmllbmRseSBoZWxwZXIgZm9yIGRlY29kaW5nIGEgJ2Jhc2U2NCctZW5jb2RlZCBzdHJpbmcgaW50byBhIGJ5dGUgYXJyYXkuXG4gKlxuICogQHBhcmFtIGI2NCBUaGUgJ2Jhc2U2NCctZW5jb2RlZCBzdHJpbmcgdG8gZGVjb2RlXG4gKiBAcmV0dXJucyBEZWNvZGVkIGJ5dGUgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUJhc2U2NChiNjQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICByZXR1cm4gbm9kZUJ1ZmZlclxuICAgID8gbm9kZUJ1ZmZlci5mcm9tKGI2NCwgXCJiYXNlNjRcIilcbiAgICA6IFVpbnQ4QXJyYXkuZnJvbShhdG9iKGI2NCksIChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpO1xufVxuXG4vKipcbiAqIEJyb3dzZXItZnJpZW5kbHkgaGVscGVyIGZvciBkZWNvZGluZyBhICdiYXNlNjR1cmwnLWVuY29kZWQgc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICpcbiAqIEBwYXJhbSBiNjR1cmwgVGhlICdiYXNlNjR1cmwnLWVuY29kZWQgc3RyaW5nIHRvIGRlY29kZVxuICogQHJldHVybnMgRGVjb2RlZCBieXRlIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVCYXNlNjRVcmwoYjY0dXJsOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgLy8gTk9URTogdGhlcmUgaXMgbm8gXCJiYXNlNjR1cmxcIiBlbmNvZGluZyBpbiB0aGUgXCJidWZmZXJcIiBtb2R1bGUgZm9yIHRoZSBicm93c2VyICh1bmxpa2UgaW4gbm9kZS5qcylcbiAgY29uc3QgYjY0ID0gYjY0dXJsLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpLnJlcGxhY2UoLz0qJC9nLCBcIlwiKTtcbiAgcmV0dXJuIGRlY29kZUJhc2U2NChiNjQpO1xufVxuXG4vKipcbiAqXG4gKiBCcm93c2VyLWZyaWVuZGx5IGhlbHBlciBmb3IgZW5jb2RpbmcgYSBieXRlIGFycmF5IGludG8gYSBwYWRkZWQgYGJhc2U2NGAtZW5jb2RlZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGJ1ZmZlciBUaGUgYnl0ZSBhcnJheSB0byBlbmNvZGVcbiAqIEByZXR1cm5zIFRoZSAnYmFzZTY0JyBlbmNvZGluZyBvZiB0aGUgYnl0ZSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVRvQmFzZTY0KGJ1ZmZlcjogSXRlcmFibGU8bnVtYmVyPiB8IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcbiAgY29uc3QgYnl0ZXMgPSBidWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGJ1ZmZlcikgOiBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICBjb25zdCBiNjQgPSBub2RlQnVmZmVyXG4gICAgPyBub2RlQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgOiBidG9hKGJ5dGVzLnJlZHVjZSgocywgYikgPT4gcyArIFN0cmluZy5mcm9tQ2hhckNvZGUoYiksIFwiXCIpKTtcbiAgcmV0dXJuIGI2NDtcbn1cblxuLyoqXG4gKiBCcm93c2VyLWZyaWVuZGx5IGhlbHBlciBmb3IgZW5jb2RpbmcgYSBieXRlIGFycmF5IGludG8gYSAnYmFzZTY0dXJsYC1lbmNvZGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gYnVmZmVyIFRoZSBieXRlIGFycmF5IHRvIGVuY29kZVxuICogQHJldHVybnMgVGhlICdiYXNlNjR1cmwnIGVuY29kaW5nIG9mIHRoZSBieXRlIGFycmF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVG9CYXNlNjRVcmwoYnVmZmVyOiBJdGVyYWJsZTxudW1iZXI+IHwgQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xuICBjb25zdCBiNjQgPSBlbmNvZGVUb0Jhc2U2NChidWZmZXIpO1xuICAvLyBOT1RFOiB0aGVyZSBpcyBubyBcImJhc2U2NHVybFwiIGVuY29kaW5nIGluIHRoZSBcImJ1ZmZlclwiIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgKHVubGlrZSBpbiBub2RlLmpzKVxuICByZXR1cm4gYjY0LnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKS5yZXBsYWNlKC89KiQvZywgXCJcIik7XG59XG5cbi8qKlxuICogU2xlZXBzIGZvciBgbXNgIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gbXMgTWlsbGlzZWNvbmRzIHRvIHNsZWVwXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBhZnRlciBgbXNgIG1pbGxpc2Vjb25kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb3IgYSB1aW50OCBhcnJheSBpbnRvIGEgaGV4IHN0cmluZy4gU3RyaW5ncyBhcmUgZW5jb2RlZCBpbiBVVEYtOCBiZWZvcmVcbiAqIGJlaW5nIGNvbnZlcnRlZCB0byBoZXguXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgVGhlIGlucHV0XG4gKiBAcmV0dXJucyBIZXggc3RyaW5nIHByZWZpeGVkIHdpdGggXCIweFwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVUb0hleChtZXNzYWdlOiBzdHJpbmcgfCBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgY29uc3QgYnl0ZXMgPSB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShtZXNzYWdlKSA6IG1lc3NhZ2U7XG4gIHJldHVybiBcIjB4XCIgKyBBcnJheS5mcm9tKGJ5dGVzLCAoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKS5qb2luKFwiXCIpO1xufVxuXG4vKipcbiAqIERlY29kZXMgYSBoZXggc3RyaW5nIGludG8gYSBieXRlIGFycmF5LlxuICpcbiAqIEBwYXJhbSBoZXggVGhlIGhleCBzdHJpbmcgdG8gZGVjb2RlLCB3aXRoIG9yIHdpdGhvdXQgYSBcIjB4XCIgcHJlZml4XG4gKiBAcmV0dXJucyBEZWNvZGVkIGJ5dGUgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUZyb21IZXgoaGV4OiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgY29uc3QgY2xlYW4gPSBoZXguc3RhcnRzV2l0aChcIjB4XCIpID8gaGV4LnNsaWNlKDIpIDogaGV4O1xuXG4gIGlmIChjbGVhbi5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGhleGFkZWNpbWFsIHN0cmluZyBsZW5ndGgsIG11c3QgYmUgZXZlbjogJHtjbGVhbi5sZW5ndGh9YCk7XG4gIH1cblxuICBpZiAoIS9eWzAtOWEtZkEtRl0qJC8udGVzdChjbGVhbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIGluOiAnJHtjbGVhbn0nYCk7XG4gIH1cblxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGNsZWFuLmxlbmd0aCAvIDIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYnl0ZXNbaV0gPSBwYXJzZUludChjbGVhbi5zbGljZShpICogMiwgaSAqIDIgKyAyKSwgMTYpO1xuICB9XG4gIHJldHVybiBieXRlcztcbn1cbiJdfQ==
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "git+https://github.com/cubist-labs/CubeSigner-TypeScript-SDK.git",
6
6
  "directory": "packages/sdk"
7
7
  },
8
- "version": "0.4.241",
8
+ "version": "0.4.246",
9
9
  "description": "CubeSigner TypeScript SDK",
10
10
  "license": "MIT OR Apache-2.0",
11
11
  "author": "Cubist, Inc.",
package/src/audit_log.ts CHANGED
@@ -186,10 +186,8 @@ export const auditLogEntrySchema = z.discriminatedUnion("event", [
186
186
  export type AuditLogEntry = z.infer<typeof auditLogEntrySchema>;
187
187
 
188
188
  // Compile-time check: errors if a variant is added to OrgEventDiscriminants but not handled here.
189
- type _AllVariantsCovered = [OrgEventDiscriminants] extends [AuditLogEntry["event"]]
190
- ? [AuditLogEntry["event"]] extends [OrgEventDiscriminants]
191
- ? true
192
- : never
193
- : never;
189
+ type _LHS = [OrgEventDiscriminants];
190
+ type _RHS = [AuditLogEntry["event"]];
191
+ type _AllVariantsCovered = _LHS extends _RHS ? (_RHS extends _LHS ? true : never) : never;
194
192
  const _allVariantsCovered: _AllVariantsCovered = true;
195
193
  void _allVariantsCovered;
@@ -69,6 +69,7 @@ import type {
69
69
  ListBucketsResponse,
70
70
  UpdateBucketRequest,
71
71
  PolicyInfo,
72
+ JsonRpcRequest,
72
73
  } from "../schema_types";
73
74
  import { encodeToBase64 } from "../util";
74
75
  import { auditLogEntrySchema } from "../audit_log";
@@ -158,6 +159,7 @@ import {
158
159
  coerceBucketInfo,
159
160
  coercePolicyInfo,
160
161
  type BucketInfo,
162
+ MultiRegionEnv,
161
163
  } from "../index";
162
164
  import { assertOk, op, type Op, type Operation, apiFetch } from "../fetch";
163
165
  import {
@@ -203,7 +205,7 @@ export type SessionSelector =
203
205
  */
204
206
  export class ApiClient extends BaseClient {
205
207
  /**
206
- * Creates a new client using the same session manager but targeting a
208
+ * Creates a **new** client using the same session manager but targeting a
207
209
  * different (child) organization.
208
210
  *
209
211
  * @param targetOrgId The ID of an organization that the new client should target
@@ -214,7 +216,7 @@ export class ApiClient extends BaseClient {
214
216
  }
215
217
 
216
218
  /**
217
- * Creates a new client using with an updated {@link ClientConfig}.
219
+ * Creates a **new** client using with an updated {@link ClientConfig}.
218
220
  *
219
221
  * @param cfg Partial configuration to apply on top of the existing client
220
222
  * @returns A new client with the updated configuration
@@ -228,7 +230,20 @@ export class ApiClient extends BaseClient {
228
230
  }
229
231
 
230
232
  /**
231
- * Creates a new client in which the current session will assume a given role.
233
+ * Creates a **new** client with a preferred regional environment {@link env} to use.
234
+ *
235
+ * @param env Preferred environment to use.
236
+ * @returns A new client with updated preferred environment.
237
+ */
238
+ withPreferredEnv(env: EnvInterface | undefined) {
239
+ return new ApiClient(this.sessionMeta, this.sessionManager, this.orgId, {
240
+ ...this.config,
241
+ preferredEnv: env,
242
+ });
243
+ }
244
+
245
+ /**
246
+ * Creates a **new** client in which the current session will assume a given role.
232
247
  * No validation is done on the client side; the back end will reject subsequent
233
248
  * requests if the current session is not allowed to assume that role.
234
249
  *
@@ -2743,7 +2758,7 @@ export class ApiClient extends BaseClient {
2743
2758
  ): Promise<CubeSignerResponse<UserExportCompleteResponse>> {
2744
2759
  // base64-encode the public key
2745
2760
  const subtle = await loadSubtleCrypto();
2746
- const publicKeyB64 = encodeToBase64(Buffer.from(await subtle.exportKey("raw", publicKey)));
2761
+ const publicKeyB64 = encodeToBase64(await subtle.exportKey("raw", publicKey));
2747
2762
 
2748
2763
  const o = op("/v0/org/{org_id}/user/me/export", "patch");
2749
2764
  // make the request
@@ -2907,6 +2922,33 @@ export class ApiClient extends BaseClient {
2907
2922
 
2908
2923
  // #endregion
2909
2924
 
2925
+ // #region RPC
2926
+
2927
+ /**
2928
+ * Send a JSON RPC request to the high-level API endpoint.
2929
+ *
2930
+ * @param body JSON RPC request body
2931
+ * @param mfaReceipt Optional MFA receipts
2932
+ * @returns Corresponding response
2933
+ */
2934
+ async rpc(
2935
+ body: JsonRpcRequest,
2936
+ mfaReceipt?: MfaReceipts,
2937
+ ): Promise<CubeSignerResponse<schemas["JsonRpcResponse"]>> {
2938
+ const o = op("/v0/org/{org_id}/rpc", "post");
2939
+ const reqFn = (headers?: HeadersInit) =>
2940
+ this.exec(o, {
2941
+ headers,
2942
+ body: {
2943
+ jsonrpc: "2.0",
2944
+ ...body,
2945
+ },
2946
+ });
2947
+ return await CubeSignerResponse.create(this.env, reqFn, mfaReceipt);
2948
+ }
2949
+
2950
+ // #endregion
2951
+
2910
2952
  /**
2911
2953
  * Returns public org information.
2912
2954
  *
@@ -2968,7 +3010,7 @@ export class ApiClient extends BaseClient {
2968
3010
  * @returns The session data.
2969
3011
  */
2970
3012
  static async oidcSessionCreate(
2971
- env: EnvInterface,
3013
+ env: EnvInterface | MultiRegionEnv,
2972
3014
  orgId: string,
2973
3015
  token: string,
2974
3016
  scopes: Array<Scope>,
@@ -2979,10 +3021,11 @@ export class ApiClient extends BaseClient {
2979
3021
  ): Promise<CubeSignerResponse<SessionData>> {
2980
3022
  const o = op("/v0/org/{org_id}/oidc", "post");
2981
3023
 
3024
+ env = MultiRegionEnv.create(env);
2982
3025
  const loginFn = async (mfaHeaders?: HeadersInit) => {
2983
3026
  const data = await retryOn5XX(() =>
2984
3027
  o({
2985
- baseUrl: env.SignerApiRoot,
3028
+ baseUrl: env.primary.SignerApiRoot,
2986
3029
  params: { path: { org_id: orgId } },
2987
3030
  headers: mergeHeaders(headers, mfaHeaders, authHeader(token)),
2988
3031
  body: {
@@ -2995,9 +3038,7 @@ export class ApiClient extends BaseClient {
2995
3038
 
2996
3039
  return mapResponse(data, (sessionInfo): SessionData => {
2997
3040
  return {
2998
- env: {
2999
- ["Dev-CubeSignerStack"]: env,
3000
- },
3041
+ env: env.spec,
3001
3042
  org_id: orgId,
3002
3043
  token: sessionInfo.token,
3003
3044
  refresh_token: sessionInfo.refresh_token,
@@ -3104,23 +3145,22 @@ export class ApiClient extends BaseClient {
3104
3145
  * @returns The session data
3105
3146
  */
3106
3147
  static async passkeyLoginComplete(
3107
- env: EnvInterface,
3148
+ env: EnvInterface | MultiRegionEnv,
3108
3149
  body: PasskeyAssertAnswer,
3109
3150
  purpose?: string | null,
3110
3151
  headers?: HeadersInit,
3111
3152
  ): Promise<SessionData> {
3112
3153
  const o = op("/v0/passkey", "patch");
3154
+ env = MultiRegionEnv.create(env);
3113
3155
  const resp = await retryOn5XX(() =>
3114
3156
  o({
3115
- baseUrl: env.SignerApiRoot,
3157
+ baseUrl: env.primary.SignerApiRoot,
3116
3158
  body,
3117
3159
  headers,
3118
3160
  }),
3119
3161
  ).then(assertOk);
3120
3162
  return {
3121
- env: {
3122
- ["Dev-CubeSignerStack"]: env,
3123
- },
3163
+ env: env.spec,
3124
3164
  org_id: resp.org_id!, // 'org_id' is always set from this endpoint
3125
3165
  token: resp.token,
3126
3166
  refresh_token: resp.refresh_token,
@@ -78,9 +78,16 @@ export class BaseClient extends EventEmitter<ClientEvents> {
78
78
  /** MUTABLE configuration. */
79
79
  readonly config: ClientConfig;
80
80
 
81
+ readonly #preferredEnv: EnvInterface | undefined;
82
+
81
83
  /** @returns The env */
82
84
  get env(): EnvInterface {
83
- return this.sessionMeta.env["Dev-CubeSignerStack"];
85
+ return this.#preferredEnv ?? this.sessionMeta.env["Dev-CubeSignerStack"];
86
+ }
87
+
88
+ /** @returns All available regional environments */
89
+ get envs(): EnvInterface[] {
90
+ return Object.values(this.sessionMeta.env);
84
91
  }
85
92
 
86
93
  /**
@@ -126,10 +133,13 @@ export class BaseClient extends EventEmitter<ClientEvents> {
126
133
  sessionMeta: SessionMetadata,
127
134
  manager: SessionManager,
128
135
  targetOrgId?: string,
129
- config?: ClientConfig,
136
+ config?: ClientConfig & {
137
+ preferredEnv?: EnvInterface;
138
+ },
130
139
  ) {
131
140
  super();
132
141
  this.#targetOrgId = targetOrgId;
142
+ this.#preferredEnv = config?.preferredEnv;
133
143
  this.sessionManager = manager;
134
144
  this.sessionMeta = sessionMeta;
135
145
  this.config = {
@@ -252,7 +262,7 @@ export class BaseClient extends EventEmitter<ClientEvents> {
252
262
  return status >= 500 && status < 600;
253
263
  },
254
264
  });
255
- // Once we have a non-5XX response, we will assertOk (either throwing or yielding the reponse)
265
+ // Once we have a non-5XX response, we will assertOk (either throwing or yielding the response)
256
266
  return assertOk(resp);
257
267
  } catch (e) {
258
268
  if (e instanceof ErrResponse) {
@@ -1,4 +1,4 @@
1
- import type { EnvInterface, StackName } from "../env";
1
+ import type { EnvInterface, Region, StackName } from "../env";
2
2
  import { apiFetch, assertOk } from "../fetch";
3
3
  import { retryOn5XX } from "../retry";
4
4
  import type { ClientSessionInfo } from "../schema_types";
@@ -35,6 +35,9 @@ export interface SessionData {
35
35
  session_exp: number | null | undefined; // may be missing in legacy session files
36
36
  /** Available regional environment parameters */
37
37
  env: Record<StackName, EnvInterface>;
38
+ /** Other regional environments (not included in 'env'), mapped by region. */
39
+ // NOTE: this is the format the CLI produces
40
+ other_envs?: Record<Region, EnvInterface>;
38
41
  }
39
42
 
40
43
  // Rather than just doing a simple Pick, we go the extra mile to ensure that
@@ -284,9 +287,13 @@ export function refresh(session: SessionData): Promise<SessionData> {
284
287
  * @returns The session metadata
285
288
  */
286
289
  export function metadata(session: SessionData): SessionMetadata {
287
- const { env, org_id, role_id, purpose, session_exp } = session;
290
+ const { env, other_envs, org_id, role_id, purpose, session_exp } = session;
291
+ const merged = { ...env };
292
+ Object.entries(other_envs ?? {}).forEach(([region, env]) => {
293
+ merged[`Dev-CubeSignerStack-${region}`] = env;
294
+ });
288
295
  return {
289
- env,
296
+ env: merged,
290
297
  org_id,
291
298
  role_id,
292
299
  purpose,
package/src/client.ts CHANGED
@@ -5,7 +5,7 @@ import type { EmailOtpResponse, IdentityProof, RatchetConfig } from "./schema_ty
5
5
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
6
  import { AddFidoChallenge, TotpChallenge } from "./mfa";
7
7
  import { Org } from "./org";
8
- import type { MfaReceipts, SessionData, SessionInfo, SessionManager } from ".";
8
+ import type { EnvInterface, MfaReceipts, SessionData, SessionInfo, SessionManager } from ".";
9
9
  import { Key } from ".";
10
10
 
11
11
  /** Options for logging in with OIDC token */
@@ -30,13 +30,16 @@ export class CubeSignerClient {
30
30
  return this.#apiClient;
31
31
  }
32
32
 
33
- /**
34
- * @returns The environment.
35
- */
33
+ /** @returns The environment. */
36
34
  get env() {
37
35
  return this.#apiClient.env;
38
36
  }
39
37
 
38
+ /** @returns All available regional environments */
39
+ get envs() {
40
+ return this.#apiClient.envs;
41
+ }
42
+
40
43
  /**
41
44
  * @returns The org ID of the client.
42
45
  */
@@ -53,6 +56,16 @@ export class CubeSignerClient {
53
56
  this.#apiClient = apiClient;
54
57
  }
55
58
 
59
+ /**
60
+ * Creates a NEW client with a preferred regional environment {@link env} to use.
61
+ *
62
+ * @param env Preferred environment to use.
63
+ * @returns A new client with updated preferred environment.
64
+ */
65
+ withPreferredEnv(env: EnvInterface | undefined) {
66
+ return new CubeSignerClient(this.#apiClient.withPreferredEnv(env));
67
+ }
68
+
56
69
  /**
57
70
  * Construct a client with a session or session manager
58
71
  *
@@ -20,7 +20,7 @@ export async function diffieHellmanDecrypt(
20
20
  const suite = await userExportCipherSuite();
21
21
 
22
22
  // Decrypt the ciphertext using the HPKE one-shot API
23
- const tdec = new TextDecoder();
23
+ const tdec = new TextDecoder("utf-8");
24
24
  // this is the info string used by the back-end when encrypting
25
25
  const tenc = new TextEncoder();
26
26
  const info = toArrayBuffer(tenc.encode("cubist-signer::DiffieHellmanResult"));
package/src/env.ts CHANGED
@@ -56,6 +56,23 @@ export class MultiRegionEnv {
56
56
  }
57
57
  }
58
58
 
59
+ /**
60
+ * Convert either a single or multi-region environment to {@link MultiRegionEnv}.
61
+ *
62
+ * @param env Either a single or multi-region environment.
63
+ * @returns The resulting {@link MultiRegionEnv}
64
+ */
65
+ static create(env: EnvInterface | MultiRegionEnv): MultiRegionEnv {
66
+ return env instanceof MultiRegionEnv
67
+ ? env
68
+ : new MultiRegionEnv(
69
+ {
70
+ ["Dev-CubeSignerStack"]: env,
71
+ },
72
+ env.Region,
73
+ );
74
+ }
75
+
59
76
  /**
60
77
  * @returns The mapping from stack name to corresponding regional environment parameters.
61
78
  * @internal
package/src/fetch.ts CHANGED
@@ -181,7 +181,7 @@ export type FetchResponseSuccessData<T> = Required<FetchResponse<T>>["data"];
181
181
  export function assertOk<T>(resp: FetchResponse<T>): FetchResponseSuccessData<T> {
182
182
  if (!resp.response.ok) {
183
183
  const errResp = resp.error as unknown as ErrorResponse | undefined;
184
- const error = new ErrResponse({
184
+ throw new ErrResponse({
185
185
  requestId: errResp?.request_id,
186
186
  message: errResp?.message,
187
187
  statusText: resp.response?.statusText,
@@ -189,7 +189,6 @@ export function assertOk<T>(resp: FetchResponse<T>): FetchResponseSuccessData<T>
189
189
  url: resp.response?.url,
190
190
  errorCode: errResp?.error_code,
191
191
  });
192
- throw error;
193
192
  }
194
193
  return resp.data!;
195
194
  }
package/src/key.ts CHANGED
@@ -29,6 +29,7 @@ import type {
29
29
  DiffieHellmanResponse,
30
30
  KeyInfoJwt,
31
31
  KeyAttestationQuery,
32
+ BinanceApiProperties,
32
33
  } from "./schema_types";
33
34
  import type {
34
35
  ApiClient,
@@ -99,6 +100,7 @@ export enum Ed25519 {
99
100
  Stellar = "Ed25519StellarAddr",
100
101
  Substrate = "Ed25519SubstrateAddr",
101
102
  Tendermint = "Ed25519TendermintAddr",
103
+ BinanceApi = "Ed25519BinanceApi",
102
104
  Ton = "Ed25519TonAddr",
103
105
  Xrp = "Ed25519XrpAddr",
104
106
  }
@@ -125,6 +127,9 @@ export type BabyJubjub = typeof BabyJubjub;
125
127
  /** Key type */
126
128
  export type KeyType = Secp256k1 | Bls | Ed25519 | Mnemonic | Stark | P256 | BabyJubjub;
127
129
 
130
+ /** The type representing all different kinds of key properties. */
131
+ export type KeyPropertiesPatch = { kind: "BinanceApi" } & BinanceApiProperties;
132
+
128
133
  /**
129
134
  * A representation of a signing key.
130
135
  */
@@ -265,6 +270,23 @@ export class Key {
265
270
  return await this.update({ metadata }, mfaReceipt);
266
271
  }
267
272
 
273
+ /**
274
+ * Set key properties. Each field in the provided patch is independent: missing
275
+ * means leave alone, `null` clears, a value sets. Sending `null` for the whole
276
+ * field clears all properties on the key.
277
+ *
278
+ * @param patch Type-specific properties
279
+ * @param mfaReceipt Optional MFA receipt(s)
280
+ * @throws if MFA is required and no receipts are provided
281
+ * @returns The updated key info
282
+ */
283
+ async setProperties(
284
+ patch: KeyPropertiesPatch | null,
285
+ mfaReceipt?: MfaReceipts,
286
+ ): Promise<KeyInfo> {
287
+ return await this.update({ properties: patch }, mfaReceipt);
288
+ }
289
+
268
290
  /**
269
291
  * Retrieves the existing metadata, asserts that it is an object (throws if it is not),
270
292
  * then sets the value of the {@link name} property in that object to {@link value},
@@ -636,8 +658,8 @@ export class Key {
636
658
  // construct the request
637
659
  const subtle = await loadSubtleCrypto();
638
660
  const req: DiffieHellmanRequest = {
639
- points: points.map((pt) => encodeToBase64(Buffer.from(pt))),
640
- public_key: encodeToBase64(Buffer.from(await subtle.exportKey("raw", publicKey))),
661
+ points: points.map((pt) => encodeToBase64(pt)),
662
+ public_key: encodeToBase64(await subtle.exportKey("raw", publicKey)),
641
663
  };
642
664
 
643
665
  // send
@@ -820,6 +842,8 @@ export function fromSchemaKeyType(ty: SchemaKeyType): KeyType {
820
842
  return Ed25519.Tendermint;
821
843
  case "Ed25519TonAddr":
822
844
  return Ed25519.Ton;
845
+ case "Ed25519BinanceApi":
846
+ return Ed25519.BinanceApi;
823
847
  case "Stark":
824
848
  return Stark;
825
849
  case "Mnemonic":