@lightsparkdev/core 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/chunk-23X5L5S3.js +604 -0
  3. package/dist/chunk-4OZ5E62P.js +608 -0
  4. package/dist/chunk-5FD46UVI.js +600 -0
  5. package/dist/chunk-BAQMCJ7C.js +630 -0
  6. package/dist/chunk-GFTKZSHK.js +627 -0
  7. package/dist/chunk-I3HKDOEE.js +627 -0
  8. package/dist/chunk-J6LSW6XO.js +601 -0
  9. package/dist/chunk-JUD4MOOQ.js +608 -0
  10. package/dist/chunk-KX6HH6CX.js +629 -0
  11. package/dist/chunk-MZCDWVLH.js +634 -0
  12. package/dist/chunk-NY3BK66J.js +624 -0
  13. package/dist/chunk-Q7UUXZNC.js +26 -0
  14. package/dist/chunk-WT2HYC6Q.js +601 -0
  15. package/dist/chunk-YYVOX4YM.js +600 -0
  16. package/dist/chunk-ZUIUADXH.js +616 -0
  17. package/dist/crypto-rn-2BYOHLMG.js +72 -0
  18. package/dist/crypto-rn-2YV53C3B.js +72 -0
  19. package/dist/crypto-rn-3HFXYG7I.js +75 -0
  20. package/dist/crypto-rn-3HLWLVZS.js +76 -0
  21. package/dist/crypto-rn-3N3JTBLE.js +83 -0
  22. package/dist/crypto-rn-3OEMMMOD.js +74 -0
  23. package/dist/crypto-rn-5EZSRY5Y.js +82 -0
  24. package/dist/crypto-rn-5KM2YVOI.js +82 -0
  25. package/dist/crypto-rn-6335R2CU.js +80 -0
  26. package/dist/crypto-rn-6ZHSL7CX.js +72 -0
  27. package/dist/crypto-rn-7DWXMO2Q.js +75 -0
  28. package/dist/crypto-rn-7GTI374I.js +81 -0
  29. package/dist/crypto-rn-AXDY3LDG.js +124 -0
  30. package/dist/crypto-rn-BZ2KZ2YR.js +68 -0
  31. package/dist/crypto-rn-CAPL7MYC.js +80 -0
  32. package/dist/crypto-rn-CBAKEB7C.js +68 -0
  33. package/dist/crypto-rn-CBWHV2F5.js +82 -0
  34. package/dist/crypto-rn-CS36MQ4X.js +77 -0
  35. package/dist/crypto-rn-E4RZNGIB.js +82 -0
  36. package/dist/crypto-rn-H4NIT5CT.js +70 -0
  37. package/dist/crypto-rn-IAC27WLZ.js +74 -0
  38. package/dist/crypto-rn-LLY6FCWE.js +82 -0
  39. package/dist/crypto-rn-MOWVVG3L.js +78 -0
  40. package/dist/crypto-rn-OAPLHNM5.js +73 -0
  41. package/dist/crypto-rn-PVAG5TVH.js +80 -0
  42. package/dist/crypto-rn-QLVBL5DI.js +75 -0
  43. package/dist/crypto-rn-TBKXR3SR.js +68 -0
  44. package/dist/crypto-rn-TSQJA6A3.js +81 -0
  45. package/dist/crypto-rn-U3XEJXIM.js +77 -0
  46. package/dist/crypto-rn-UHTZEVAR.js +74 -0
  47. package/dist/crypto-rn-V3ZNQSFI.js +79 -0
  48. package/dist/crypto-rn-VGNP6VZW.js +75 -0
  49. package/dist/crypto-rn-XMYCUEGV.js +72 -0
  50. package/dist/crypto-rn-YPOTC5RI.js +73 -0
  51. package/dist/index.cjs +93 -116
  52. package/dist/index.d.ts +31 -17
  53. package/dist/index.js +92 -106
  54. package/package.json +2 -1
  55. package/src/crypto/NodeKeyCache.ts +18 -15
  56. package/src/crypto/crypto.ts +72 -78
  57. package/src/requester/Requester.ts +11 -17
  58. package/src/utils/base64.ts +51 -2
package/dist/index.cjs CHANGED
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
+ DefaultCrypto: () => DefaultCrypto,
33
34
  LightsparkAuthException: () => LightsparkAuthException_default,
34
35
  LightsparkException: () => LightsparkException_default,
35
36
  LightsparkSigningException: () => LightsparkSigningException_default,
@@ -41,19 +42,9 @@ __export(src_exports, {
41
42
  b64decode: () => b64decode,
42
43
  b64encode: () => b64encode,
43
44
  convertCurrencyAmount: () => convertCurrencyAmount,
44
- decode: () => decode,
45
- decrypt: () => decrypt,
46
- decryptSecretWithNodePassword: () => decryptSecretWithNodePassword,
47
- encrypt: () => encrypt,
48
- encryptWithNodeKey: () => encryptWithNodeKey,
49
- generateSigningKeyPair: () => generateSigningKeyPair,
50
- getCrypto: () => getCrypto,
51
- getNonce: () => getNonce,
52
45
  isBrowser: () => isBrowser,
53
46
  isNode: () => isNode,
54
47
  isType: () => isType,
55
- loadNodeEncryptionKey: () => loadNodeEncryptionKey,
56
- serializeSigningKey: () => serializeSigningKey,
57
48
  urlsafe_b64decode: () => urlsafe_b64decode
58
49
  });
59
50
  module.exports = __toCommonJS(src_exports);
@@ -94,14 +85,44 @@ var StubAuthProvider = class {
94
85
  };
95
86
 
96
87
  // src/utils/base64.ts
88
+ var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
89
+ var Base64 = {
90
+ btoa: (input = "") => {
91
+ let str = input;
92
+ let output = "";
93
+ for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = "=", i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {
94
+ charCode = str.charCodeAt(i += 3 / 4);
95
+ if (charCode > 255) {
96
+ throw new Error(
97
+ "'btoa' failed: The string to be encoded contains characters outside of the Latin1 range."
98
+ );
99
+ }
100
+ block = block << 8 | charCode;
101
+ }
102
+ return output;
103
+ },
104
+ atob: (input = "") => {
105
+ let str = input.replace(/=+$/, "");
106
+ let output = "";
107
+ if (str.length % 4 == 1) {
108
+ throw new Error(
109
+ "'atob' failed: The string to be decoded is not correctly encoded."
110
+ );
111
+ }
112
+ for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) {
113
+ buffer = chars.indexOf(buffer);
114
+ }
115
+ return output;
116
+ }
117
+ };
97
118
  var b64decode = (encoded) => {
98
- return Uint8Array.from(atob(encoded), (c) => c.charCodeAt(0));
119
+ return Uint8Array.from(Base64.atob(encoded), (c) => c.charCodeAt(0));
99
120
  };
100
121
  var urlsafe_b64decode = (encoded) => {
101
122
  return b64decode(encoded.replace(/_/g, "/").replace(/-/g, "+"));
102
123
  };
103
124
  var b64encode = (data) => {
104
- return btoa(
125
+ return Base64.btoa(
105
126
  String.fromCharCode.apply(null, Array.from(new Uint8Array(data)))
106
127
  );
107
128
  };
@@ -115,8 +136,7 @@ var LightsparkSigningException = class extends LightsparkException_default {
115
136
  var LightsparkSigningException_default = LightsparkSigningException;
116
137
 
117
138
  // src/crypto/crypto.ts
118
- var ITERATIONS = 5e5;
119
- function getCrypto() {
139
+ var getCrypto = () => {
120
140
  let cryptoImplPromise;
121
141
  if (typeof crypto !== "undefined") {
122
142
  cryptoImplPromise = Promise.resolve(crypto);
@@ -126,34 +146,26 @@ function getCrypto() {
126
146
  });
127
147
  }
128
148
  return cryptoImplPromise;
129
- }
130
- var getRandomValues = async (arr) => {
131
- if (typeof crypto !== "undefined") {
132
- return crypto.getRandomValues(arr);
133
- } else {
134
- const cryptoImpl2 = await getCrypto();
135
- return cryptoImpl2.getRandomValues(arr);
136
- }
137
149
  };
138
150
  var getRandomValues32 = async (arr) => {
139
151
  if (typeof crypto !== "undefined") {
140
152
  return crypto.getRandomValues(arr);
141
153
  } else {
142
- const cryptoImpl2 = await getCrypto();
143
- return cryptoImpl2.getRandomValues(arr);
154
+ const cryptoImpl = await getCrypto();
155
+ return cryptoImpl.getRandomValues(arr);
144
156
  }
145
157
  };
146
158
  var deriveKey = async (password, salt, iterations, algorithm, bit_len) => {
147
159
  const enc = new TextEncoder();
148
- const cryptoImpl2 = await getCrypto();
149
- const password_key = await cryptoImpl2.subtle.importKey(
160
+ const cryptoImpl = await getCrypto();
161
+ const password_key = await cryptoImpl.subtle.importKey(
150
162
  "raw",
151
163
  enc.encode(password),
152
164
  "PBKDF2",
153
165
  false,
154
166
  ["deriveBits", "deriveKey"]
155
167
  );
156
- const derived = await cryptoImpl2.subtle.deriveBits(
168
+ const derived = await cryptoImpl.subtle.deriveBits(
157
169
  {
158
170
  name: "PBKDF2",
159
171
  salt,
@@ -163,7 +175,7 @@ var deriveKey = async (password, salt, iterations, algorithm, bit_len) => {
163
175
  password_key,
164
176
  bit_len
165
177
  );
166
- const key = await cryptoImpl2.subtle.importKey(
178
+ const key = await cryptoImpl.subtle.importKey(
167
179
  "raw",
168
180
  derived.slice(0, 32),
169
181
  { name: algorithm, length: 256 },
@@ -173,25 +185,6 @@ var deriveKey = async (password, salt, iterations, algorithm, bit_len) => {
173
185
  const iv = derived.slice(32);
174
186
  return [key, iv];
175
187
  };
176
- var encrypt = async (plaintext, password, salt) => {
177
- if (!salt) {
178
- salt = new Uint8Array(16);
179
- getRandomValues(salt);
180
- }
181
- const [key, iv] = await deriveKey(password, salt, ITERATIONS, "AES-GCM", 352);
182
- const cryptoImpl2 = await getCrypto();
183
- const encrypted = new Uint8Array(
184
- await cryptoImpl2.subtle.encrypt({ name: "AES-GCM", iv }, key, plaintext)
185
- );
186
- const output = new Uint8Array(salt.byteLength + encrypted.byteLength);
187
- output.set(salt);
188
- output.set(encrypted, salt.byteLength);
189
- const header = {
190
- v: 4,
191
- i: ITERATIONS
192
- };
193
- return [JSON.stringify(header), b64encode(output)];
194
- };
195
188
  var decrypt = async (header_json, ciphertext, password) => {
196
189
  var decoded = b64decode(ciphertext);
197
190
  var header;
@@ -210,7 +203,7 @@ var decrypt = async (header_json, ciphertext, password) => {
210
203
  "Unknown version ".concat(header.v)
211
204
  );
212
205
  }
213
- const cryptoImpl2 = await getCrypto();
206
+ const cryptoImpl = await getCrypto();
214
207
  const algorithm = header.v < 2 ? "AES-CBC" : "AES-GCM";
215
208
  const bit_len = header.v < 4 ? 384 : 352;
216
209
  const salt_len = header.v < 4 ? 8 : 16;
@@ -225,7 +218,7 @@ var decrypt = async (header_json, ciphertext, password) => {
225
218
  algorithm,
226
219
  256
227
220
  );
228
- return await cryptoImpl2.subtle.decrypt(
221
+ return await cryptoImpl.subtle.decrypt(
229
222
  { name: algorithm, iv: nonce.buffer },
230
223
  key,
231
224
  cipherText
@@ -240,7 +233,7 @@ var decrypt = async (header_json, ciphertext, password) => {
240
233
  algorithm,
241
234
  bit_len
242
235
  );
243
- return await cryptoImpl2.subtle.decrypt(
236
+ return await cryptoImpl.subtle.decrypt(
244
237
  { name: algorithm, iv },
245
238
  key,
246
239
  encrypted
@@ -256,13 +249,9 @@ async function decryptSecretWithNodePassword(cipher, encryptedSecret, nodePasswo
256
249
  }
257
250
  return decryptedValue;
258
251
  }
259
- function decode(arrBuff) {
260
- const dec = new TextDecoder();
261
- return dec.decode(arrBuff);
262
- }
263
252
  var generateSigningKeyPair = async () => {
264
- const cryptoImpl2 = await getCrypto();
265
- return await cryptoImpl2.subtle.generateKey(
253
+ const cryptoImpl = await getCrypto();
254
+ return await cryptoImpl.subtle.generateKey(
266
255
  /*algorithm:*/
267
256
  {
268
257
  name: "RSA-PSS",
@@ -277,74 +266,72 @@ var generateSigningKeyPair = async () => {
277
266
  );
278
267
  };
279
268
  var serializeSigningKey = async (key, format) => {
280
- const cryptoImpl2 = await getCrypto();
281
- return await cryptoImpl2.subtle.exportKey(
269
+ const cryptoImpl = await getCrypto();
270
+ return await cryptoImpl.subtle.exportKey(
282
271
  /*format*/
283
272
  format,
284
273
  /*key*/
285
274
  key
286
275
  );
287
276
  };
288
- var encryptWithNodeKey = async (key, data) => {
289
- const enc = new TextEncoder();
290
- const encoded = enc.encode(data);
291
- const encrypted = await cryptoImpl.subtle.encrypt(
292
- /*algorithm:*/
277
+ var getNonce = async () => {
278
+ const cryptoImpl = await getCrypto();
279
+ const nonceSt = await getRandomValues32(new Uint32Array(1));
280
+ return Number(nonceSt);
281
+ };
282
+ var sign = async (key, data) => {
283
+ const cryptoImpl = await getCrypto();
284
+ return await cryptoImpl.subtle.sign(
293
285
  {
294
- name: "RSA-OAEP"
286
+ name: "RSA-PSS",
287
+ saltLength: 32
295
288
  },
296
- /*key*/
297
289
  key,
298
- /*data*/
299
- encoded
290
+ data
300
291
  );
301
- return b64encode(encrypted);
302
292
  };
303
- var loadNodeEncryptionKey = async (rawPublicKey) => {
304
- const encoded = b64decode(rawPublicKey);
305
- const cryptoImpl2 = await getCrypto();
306
- return await cryptoImpl2.subtle.importKey(
293
+ var importPrivateSigningKey = async (keyData, format) => {
294
+ const cryptoImpl = await getCrypto();
295
+ return await cryptoImpl.subtle.importKey(
307
296
  /*format*/
308
- "spki",
297
+ format,
309
298
  /*keyData*/
310
- encoded,
311
- /*algorithm:*/
299
+ keyData,
300
+ /*algorithm*/
312
301
  {
313
- name: "RSA-OAEP",
302
+ name: "RSA-PSS",
314
303
  hash: "SHA-256"
315
304
  },
316
305
  /*extractable*/
317
306
  true,
318
307
  /*keyUsages*/
319
- ["encrypt"]
308
+ ["sign"]
320
309
  );
321
310
  };
322
- var getNonce = async () => {
323
- const nonceSt = await getRandomValues32(new Uint32Array(1));
324
- return Number(nonceSt);
311
+ var DefaultCrypto = {
312
+ decryptSecretWithNodePassword,
313
+ generateSigningKeyPair,
314
+ serializeSigningKey,
315
+ getNonce,
316
+ sign,
317
+ importPrivateSigningKey
325
318
  };
326
319
 
327
320
  // src/crypto/NodeKeyCache.ts
328
321
  var import_auto_bind = __toESM(require("auto-bind"), 1);
329
322
  var NodeKeyCache = class {
330
- idToKey;
331
- constructor() {
323
+ constructor(cryptoImpl = DefaultCrypto) {
324
+ this.cryptoImpl = cryptoImpl;
332
325
  this.idToKey = /* @__PURE__ */ new Map();
333
326
  (0, import_auto_bind.default)(this);
334
327
  }
335
- async loadKey(id, rawKey) {
336
- const decoded = b64decode(rawKey);
328
+ idToKey;
329
+ async loadKey(id, rawKey, format = "pkcs8") {
330
+ const decoded = b64decode(this.stripPemTags(rawKey));
337
331
  try {
338
- const cryptoImpl2 = await getCrypto();
339
- const key = await cryptoImpl2.subtle.importKey(
340
- "pkcs8",
332
+ const key = await this.cryptoImpl.importPrivateSigningKey(
341
333
  decoded,
342
- {
343
- name: "RSA-PSS",
344
- hash: "SHA-256"
345
- },
346
- true,
347
- ["sign"]
334
+ format
348
335
  );
349
336
  this.idToKey.set(id, key);
350
337
  return key;
@@ -359,6 +346,9 @@ var NodeKeyCache = class {
359
346
  hasKey(id) {
360
347
  return this.idToKey.has(id);
361
348
  }
349
+ stripPemTags(pem) {
350
+ return pem.replace(/-----BEGIN (.*)-----/, "").replace(/-----END (.*)----/, "");
351
+ }
362
352
  };
363
353
  var NodeKeyCache_default = NodeKeyCache;
364
354
 
@@ -380,11 +370,13 @@ var LIGHTSPARK_BETA_HEADER_KEY = "X-Lightspark-Beta";
380
370
  var LIGHTSPARK_BETA_HEADER_VALUE = "z2h0BBYxTA83cjW7fi8QwWtBPCzkQKiemcuhKY08LOo";
381
371
  import_dayjs.default.extend(import_utc.default);
382
372
  var Requester = class {
383
- constructor(nodeKeyCache, schemaEndpoint, authProvider = new StubAuthProvider(), baseUrl = DEFAULT_BASE_URL) {
373
+ constructor(nodeKeyCache, schemaEndpoint, sdkUserAgent, authProvider = new StubAuthProvider(), baseUrl = DEFAULT_BASE_URL, cryptoImpl = DefaultCrypto) {
384
374
  this.nodeKeyCache = nodeKeyCache;
385
375
  this.schemaEndpoint = schemaEndpoint;
376
+ this.sdkUserAgent = sdkUserAgent;
386
377
  this.authProvider = authProvider;
387
378
  this.baseUrl = baseUrl;
379
+ this.cryptoImpl = cryptoImpl;
388
380
  let websocketImpl;
389
381
  if (typeof WebSocket === "undefined" && typeof window === "undefined") {
390
382
  websocketImpl = import_ws.default;
@@ -501,8 +493,7 @@ var Requester = class {
501
493
  getSdkUserAgent() {
502
494
  const platform = isNode ? "NodeJS" : "Browser";
503
495
  const platformVersion = isNode ? process.version : "";
504
- const sdkVersion = "1.0.4";
505
- return `lightspark-js-sdk/${sdkVersion} ${platform}/${platformVersion}`;
496
+ return `${this.sdkUserAgent} ${platform}/${platformVersion}`;
506
497
  }
507
498
  async addSigningDataIfNeeded(queryPayload, headers, signingNodeId) {
508
499
  if (!signingNodeId) {
@@ -511,7 +502,7 @@ var Requester = class {
511
502
  const query = queryPayload.query;
512
503
  const variables = queryPayload.variables;
513
504
  const operationName = queryPayload.operationName;
514
- const nonce = await getNonce();
505
+ const nonce = await this.cryptoImpl.getNonce();
515
506
  const expiration = import_dayjs.default.utc().add(1, "hour").format();
516
507
  const payload = {
517
508
  query,
@@ -526,16 +517,11 @@ var Requester = class {
526
517
  "Missing node of encrypted_signing_private_key"
527
518
  );
528
519
  }
520
+ if (typeof TextEncoder === "undefined") {
521
+ const TextEncoder2 = (await import("text-encoding")).TextEncoder;
522
+ }
529
523
  const encodedPayload = new TextEncoder().encode(JSON.stringify(payload));
530
- const cryptoImpl2 = await getCrypto();
531
- const signedPayload = await cryptoImpl2.subtle.sign(
532
- {
533
- name: "RSA-PSS",
534
- saltLength: 32
535
- },
536
- key,
537
- encodedPayload
538
- );
524
+ const signedPayload = await this.cryptoImpl.sign(key, encodedPayload);
539
525
  const encodedSignedPayload = b64encode(signedPayload);
540
526
  headers["X-Lightspark-Signing"] = JSON.stringify({
541
527
  v: "1",
@@ -635,6 +621,7 @@ var isType = (typename) => (node) => {
635
621
  };
636
622
  // Annotate the CommonJS export names for ESM import in node:
637
623
  0 && (module.exports = {
624
+ DefaultCrypto,
638
625
  LightsparkAuthException,
639
626
  LightsparkException,
640
627
  LightsparkSigningException,
@@ -646,18 +633,8 @@ var isType = (typename) => (node) => {
646
633
  b64decode,
647
634
  b64encode,
648
635
  convertCurrencyAmount,
649
- decode,
650
- decrypt,
651
- decryptSecretWithNodePassword,
652
- encrypt,
653
- encryptWithNodeKey,
654
- generateSigningKeyPair,
655
- getCrypto,
656
- getNonce,
657
636
  isBrowser,
658
637
  isNode,
659
638
  isType,
660
- loadNodeEncryptionKey,
661
- serializeSigningKey,
662
639
  urlsafe_b64decode
663
640
  });
package/dist/index.d.ts CHANGED
@@ -27,26 +27,38 @@ declare class LightsparkSigningException extends LightsparkException {
27
27
  constructor(message: string, extraInfo?: any);
28
28
  }
29
29
 
30
- declare function getCrypto(): Promise<Crypto>;
31
- declare const encrypt: (plaintext: ArrayBuffer, password: string, salt?: Uint8Array) => Promise<[
32
- string,
33
- string
34
- ]>;
35
- declare const decrypt: (header_json: string, ciphertext: string, password: string) => Promise<ArrayBuffer>;
30
+ type CryptoInterface = {
31
+ decryptSecretWithNodePassword: (cipher: string, encryptedSecret: string, nodePassword: string) => Promise<ArrayBuffer | null>;
32
+ generateSigningKeyPair: () => Promise<{
33
+ publicKey: CryptoKey | string;
34
+ privateKey: CryptoKey | string;
35
+ }>;
36
+ serializeSigningKey: (key: CryptoKey | string, format: "pkcs8" | "spki") => Promise<ArrayBuffer>;
37
+ getNonce: () => Promise<number>;
38
+ sign: (key: CryptoKey | Uint8Array, data: Uint8Array) => Promise<ArrayBuffer>;
39
+ importPrivateSigningKey: (keyData: Uint8Array, format: "pkcs8" | "spki") => Promise<CryptoKey | Uint8Array>;
40
+ };
36
41
  declare function decryptSecretWithNodePassword(cipher: string, encryptedSecret: string, nodePassword: string): Promise<ArrayBuffer | null>;
37
- declare function decode(arrBuff: ArrayBuffer): string;
38
- declare const generateSigningKeyPair: () => Promise<CryptoKeyPair>;
39
- declare const serializeSigningKey: (key: CryptoKey, format: "pkcs8" | "spki") => Promise<ArrayBuffer>;
40
- declare const encryptWithNodeKey: (key: CryptoKey, data: string) => Promise<string>;
41
- declare const loadNodeEncryptionKey: (rawPublicKey: string) => Promise<CryptoKey>;
42
- declare const getNonce: () => Promise<number>;
42
+ declare const DefaultCrypto: {
43
+ decryptSecretWithNodePassword: typeof decryptSecretWithNodePassword;
44
+ generateSigningKeyPair: () => Promise<CryptoKeyPair | {
45
+ publicKey: string;
46
+ privateKey: string;
47
+ }>;
48
+ serializeSigningKey: (key: CryptoKey | string, format: "pkcs8" | "spki") => Promise<ArrayBuffer>;
49
+ getNonce: () => Promise<number>;
50
+ sign: (key: CryptoKey | Uint8Array, data: Uint8Array) => Promise<ArrayBuffer>;
51
+ importPrivateSigningKey: (keyData: Uint8Array, format: "pkcs8" | "spki") => Promise<CryptoKey | Uint8Array>;
52
+ };
43
53
 
44
54
  declare class NodeKeyCache {
55
+ private readonly cryptoImpl;
45
56
  private idToKey;
46
- constructor();
47
- loadKey(id: string, rawKey: string): Promise<CryptoKey | null>;
48
- getKey(id: string): CryptoKey | undefined;
57
+ constructor(cryptoImpl?: CryptoInterface);
58
+ loadKey(id: string, rawKey: string, format?: "pkcs8" | "spki"): Promise<CryptoKey | Uint8Array | null>;
59
+ getKey(id: string): CryptoKey | Uint8Array | undefined;
49
60
  hasKey(id: string): boolean;
61
+ private stripPemTags;
50
62
  }
51
63
 
52
64
  type Query<T> = {
@@ -65,10 +77,12 @@ type Query<T> = {
65
77
  declare class Requester {
66
78
  private readonly nodeKeyCache;
67
79
  private readonly schemaEndpoint;
80
+ private readonly sdkUserAgent;
68
81
  private readonly authProvider;
69
82
  private readonly baseUrl;
83
+ private readonly cryptoImpl;
70
84
  private readonly wsClient;
71
- constructor(nodeKeyCache: NodeKeyCache, schemaEndpoint: string, authProvider?: AuthProvider, baseUrl?: string);
85
+ constructor(nodeKeyCache: NodeKeyCache, schemaEndpoint: string, sdkUserAgent: string, authProvider?: AuthProvider, baseUrl?: string, cryptoImpl?: CryptoInterface);
72
86
  executeQuery<T>(query: Query<T>): Promise<T | null>;
73
87
  subscribe(queryPayload: string, variables?: {
74
88
  [key: string]: any;
@@ -149,4 +163,4 @@ declare const isType: <T extends string>(typename: T) => <N extends {
149
163
  __typename: T;
150
164
  }>;
151
165
 
152
- export { AuthProvider, ById, ExpandRecursively, LightsparkAuthException, LightsparkException, LightsparkSigningException, Maybe, NodeKeyCache, OmitTypename, Query, Requester, ServerEnvironment, StubAuthProvider, apiDomainForEnvironment, b64decode, b64encode, convertCurrencyAmount, decode, decrypt, decryptSecretWithNodePassword, encrypt, encryptWithNodeKey, generateSigningKeyPair, getCrypto, getNonce, isBrowser, isNode, isType, loadNodeEncryptionKey, serializeSigningKey, urlsafe_b64decode };
166
+ export { AuthProvider, ById, CryptoInterface, DefaultCrypto, ExpandRecursively, LightsparkAuthException, LightsparkException, LightsparkSigningException, Maybe, NodeKeyCache, OmitTypename, Query, Requester, ServerEnvironment, StubAuthProvider, apiDomainForEnvironment, b64decode, b64encode, convertCurrencyAmount, isBrowser, isNode, isType, urlsafe_b64decode };