@quicknode/sdk 3.0.0-alpha.5 → 3.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/errors.js ADDED
@@ -0,0 +1,121 @@
1
+ // Typed error classes. The Rust binding throws a plain napi Error whose
2
+ // message is tagged "[<kind>|<status>|<body_len>]<msg>\x1f<body>"; parseAndRethrow
3
+ // decodes that and throws an instance of the matching subclass below.
4
+
5
+ class QuickNodeError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "QuickNodeError";
9
+ }
10
+ }
11
+
12
+ class ConfigError extends QuickNodeError {
13
+ constructor(message) {
14
+ super(message);
15
+ this.name = "ConfigError";
16
+ }
17
+ }
18
+
19
+ class HttpError extends QuickNodeError {
20
+ constructor(message) {
21
+ super(message);
22
+ this.name = "HttpError";
23
+ }
24
+ }
25
+
26
+ class TimeoutError extends HttpError {
27
+ constructor(message) {
28
+ super(message);
29
+ this.name = "TimeoutError";
30
+ }
31
+ }
32
+
33
+ class ConnectionError extends HttpError {
34
+ constructor(message) {
35
+ super(message);
36
+ this.name = "ConnectionError";
37
+ }
38
+ }
39
+
40
+ class ApiError extends QuickNodeError {
41
+ constructor(message, status, body) {
42
+ super(message);
43
+ this.name = "ApiError";
44
+ this.status = status;
45
+ this.body = body;
46
+ }
47
+ }
48
+
49
+ class DecodeError extends QuickNodeError {
50
+ constructor(message, body) {
51
+ super(message);
52
+ this.name = "DecodeError";
53
+ this.body = body;
54
+ }
55
+ }
56
+
57
+ const TAG_RE = /^\[(Config|Http|Timeout|Connect|Api|Decode)\|([^|]+)\|([^\]]+)\](.*)$/s;
58
+
59
+ function fromNapiError(err) {
60
+ if (!(err instanceof Error)) return err;
61
+ const m = err.message.match(TAG_RE);
62
+ if (!m) return err;
63
+ const [, kind, statusStr, bodyLenStr, rest] = m;
64
+ // rest = "<msg>\x1f<body>". Use body_len (byte length from Rust) to split
65
+ // deterministically — the body may itself contain \x1f, and Api messages
66
+ // embed the body in msg, so scanning for the first separator is unsafe.
67
+ let msg = rest;
68
+ let body = "";
69
+ if (bodyLenStr !== "-") {
70
+ const bodyLen = Number(bodyLenStr);
71
+ const bodyBytes = Buffer.from(rest, "utf8");
72
+ const bodyStart = bodyBytes.length - bodyLen;
73
+ if (bodyStart >= 1 && bodyBytes[bodyStart - 1] === 0x1f) {
74
+ msg = bodyBytes.slice(0, bodyStart - 1).toString("utf8");
75
+ body = bodyBytes.slice(bodyStart).toString("utf8");
76
+ }
77
+ }
78
+ switch (kind) {
79
+ case "Config": return new ConfigError(msg);
80
+ case "Timeout": return new TimeoutError(msg);
81
+ case "Connect": return new ConnectionError(msg);
82
+ case "Http": return new HttpError(msg);
83
+ case "Api": return new ApiError(msg, Number(statusStr), body);
84
+ case "Decode": return new DecodeError(msg, body);
85
+ default: return err;
86
+ }
87
+ }
88
+
89
+ // Wraps an object's methods so thrown napi errors get retagged as typed
90
+ // subclasses. Handles both sync throws and rejected promises.
91
+ function wrapClient(client) {
92
+ return new Proxy(client, {
93
+ get(target, prop) {
94
+ const val = target[prop];
95
+ if (typeof val !== "function") return val;
96
+ return function (...args) {
97
+ try {
98
+ const result = val.apply(target, args);
99
+ if (result && typeof result.then === "function") {
100
+ return result.catch((e) => { throw fromNapiError(e); });
101
+ }
102
+ return result;
103
+ } catch (e) {
104
+ throw fromNapiError(e);
105
+ }
106
+ };
107
+ },
108
+ });
109
+ }
110
+
111
+ module.exports = {
112
+ QuickNodeError,
113
+ ConfigError,
114
+ HttpError,
115
+ TimeoutError,
116
+ ConnectionError,
117
+ ApiError,
118
+ DecodeError,
119
+ fromNapiError,
120
+ wrapClient,
121
+ };
Binary file
package/index.js ADDED
@@ -0,0 +1,328 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /* prettier-ignore */
4
+
5
+ /* auto-generated by NAPI-RS */
6
+
7
+ const { existsSync, readFileSync } = require('fs')
8
+ const { join } = require('path')
9
+
10
+ const { platform, arch } = process
11
+
12
+ let nativeBinding = null
13
+ let localFileExisted = false
14
+ let loadError = null
15
+
16
+ function isMusl() {
17
+ // For Node 10
18
+ if (!process.report || typeof process.report.getReport !== 'function') {
19
+ try {
20
+ const lddPath = require('child_process').execSync('which ldd').toString().trim()
21
+ return readFileSync(lddPath, 'utf8').includes('musl')
22
+ } catch (e) {
23
+ return true
24
+ }
25
+ } else {
26
+ const { glibcVersionRuntime } = process.report.getReport().header
27
+ return !glibcVersionRuntime
28
+ }
29
+ }
30
+
31
+ switch (platform) {
32
+ case 'android':
33
+ switch (arch) {
34
+ case 'arm64':
35
+ localFileExisted = existsSync(join(__dirname, 'index.android-arm64.node'))
36
+ try {
37
+ if (localFileExisted) {
38
+ nativeBinding = require('./index.android-arm64.node')
39
+ } else {
40
+ nativeBinding = require('@quicknode/sdk-android-arm64')
41
+ }
42
+ } catch (e) {
43
+ loadError = e
44
+ }
45
+ break
46
+ case 'arm':
47
+ localFileExisted = existsSync(join(__dirname, 'index.android-arm-eabi.node'))
48
+ try {
49
+ if (localFileExisted) {
50
+ nativeBinding = require('./index.android-arm-eabi.node')
51
+ } else {
52
+ nativeBinding = require('@quicknode/sdk-android-arm-eabi')
53
+ }
54
+ } catch (e) {
55
+ loadError = e
56
+ }
57
+ break
58
+ default:
59
+ throw new Error(`Unsupported architecture on Android ${arch}`)
60
+ }
61
+ break
62
+ case 'win32':
63
+ switch (arch) {
64
+ case 'x64':
65
+ localFileExisted = existsSync(
66
+ join(__dirname, 'index.win32-x64-msvc.node')
67
+ )
68
+ try {
69
+ if (localFileExisted) {
70
+ nativeBinding = require('./index.win32-x64-msvc.node')
71
+ } else {
72
+ nativeBinding = require('@quicknode/sdk-win32-x64-msvc')
73
+ }
74
+ } catch (e) {
75
+ loadError = e
76
+ }
77
+ break
78
+ case 'ia32':
79
+ localFileExisted = existsSync(
80
+ join(__dirname, 'index.win32-ia32-msvc.node')
81
+ )
82
+ try {
83
+ if (localFileExisted) {
84
+ nativeBinding = require('./index.win32-ia32-msvc.node')
85
+ } else {
86
+ nativeBinding = require('@quicknode/sdk-win32-ia32-msvc')
87
+ }
88
+ } catch (e) {
89
+ loadError = e
90
+ }
91
+ break
92
+ case 'arm64':
93
+ localFileExisted = existsSync(
94
+ join(__dirname, 'index.win32-arm64-msvc.node')
95
+ )
96
+ try {
97
+ if (localFileExisted) {
98
+ nativeBinding = require('./index.win32-arm64-msvc.node')
99
+ } else {
100
+ nativeBinding = require('@quicknode/sdk-win32-arm64-msvc')
101
+ }
102
+ } catch (e) {
103
+ loadError = e
104
+ }
105
+ break
106
+ default:
107
+ throw new Error(`Unsupported architecture on Windows: ${arch}`)
108
+ }
109
+ break
110
+ case 'darwin':
111
+ localFileExisted = existsSync(join(__dirname, 'index.darwin-universal.node'))
112
+ try {
113
+ if (localFileExisted) {
114
+ nativeBinding = require('./index.darwin-universal.node')
115
+ } else {
116
+ nativeBinding = require('@quicknode/sdk-darwin-universal')
117
+ }
118
+ break
119
+ } catch {}
120
+ switch (arch) {
121
+ case 'x64':
122
+ localFileExisted = existsSync(join(__dirname, 'index.darwin-x64.node'))
123
+ try {
124
+ if (localFileExisted) {
125
+ nativeBinding = require('./index.darwin-x64.node')
126
+ } else {
127
+ nativeBinding = require('@quicknode/sdk-darwin-x64')
128
+ }
129
+ } catch (e) {
130
+ loadError = e
131
+ }
132
+ break
133
+ case 'arm64':
134
+ localFileExisted = existsSync(
135
+ join(__dirname, 'index.darwin-arm64.node')
136
+ )
137
+ try {
138
+ if (localFileExisted) {
139
+ nativeBinding = require('./index.darwin-arm64.node')
140
+ } else {
141
+ nativeBinding = require('@quicknode/sdk-darwin-arm64')
142
+ }
143
+ } catch (e) {
144
+ loadError = e
145
+ }
146
+ break
147
+ default:
148
+ throw new Error(`Unsupported architecture on macOS: ${arch}`)
149
+ }
150
+ break
151
+ case 'freebsd':
152
+ if (arch !== 'x64') {
153
+ throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
154
+ }
155
+ localFileExisted = existsSync(join(__dirname, 'index.freebsd-x64.node'))
156
+ try {
157
+ if (localFileExisted) {
158
+ nativeBinding = require('./index.freebsd-x64.node')
159
+ } else {
160
+ nativeBinding = require('@quicknode/sdk-freebsd-x64')
161
+ }
162
+ } catch (e) {
163
+ loadError = e
164
+ }
165
+ break
166
+ case 'linux':
167
+ switch (arch) {
168
+ case 'x64':
169
+ if (isMusl()) {
170
+ localFileExisted = existsSync(
171
+ join(__dirname, 'index.linux-x64-musl.node')
172
+ )
173
+ try {
174
+ if (localFileExisted) {
175
+ nativeBinding = require('./index.linux-x64-musl.node')
176
+ } else {
177
+ nativeBinding = require('@quicknode/sdk-linux-x64-musl')
178
+ }
179
+ } catch (e) {
180
+ loadError = e
181
+ }
182
+ } else {
183
+ localFileExisted = existsSync(
184
+ join(__dirname, 'index.linux-x64-gnu.node')
185
+ )
186
+ try {
187
+ if (localFileExisted) {
188
+ nativeBinding = require('./index.linux-x64-gnu.node')
189
+ } else {
190
+ nativeBinding = require('@quicknode/sdk-linux-x64-gnu')
191
+ }
192
+ } catch (e) {
193
+ loadError = e
194
+ }
195
+ }
196
+ break
197
+ case 'arm64':
198
+ if (isMusl()) {
199
+ localFileExisted = existsSync(
200
+ join(__dirname, 'index.linux-arm64-musl.node')
201
+ )
202
+ try {
203
+ if (localFileExisted) {
204
+ nativeBinding = require('./index.linux-arm64-musl.node')
205
+ } else {
206
+ nativeBinding = require('@quicknode/sdk-linux-arm64-musl')
207
+ }
208
+ } catch (e) {
209
+ loadError = e
210
+ }
211
+ } else {
212
+ localFileExisted = existsSync(
213
+ join(__dirname, 'index.linux-arm64-gnu.node')
214
+ )
215
+ try {
216
+ if (localFileExisted) {
217
+ nativeBinding = require('./index.linux-arm64-gnu.node')
218
+ } else {
219
+ nativeBinding = require('@quicknode/sdk-linux-arm64-gnu')
220
+ }
221
+ } catch (e) {
222
+ loadError = e
223
+ }
224
+ }
225
+ break
226
+ case 'arm':
227
+ if (isMusl()) {
228
+ localFileExisted = existsSync(
229
+ join(__dirname, 'index.linux-arm-musleabihf.node')
230
+ )
231
+ try {
232
+ if (localFileExisted) {
233
+ nativeBinding = require('./index.linux-arm-musleabihf.node')
234
+ } else {
235
+ nativeBinding = require('@quicknode/sdk-linux-arm-musleabihf')
236
+ }
237
+ } catch (e) {
238
+ loadError = e
239
+ }
240
+ } else {
241
+ localFileExisted = existsSync(
242
+ join(__dirname, 'index.linux-arm-gnueabihf.node')
243
+ )
244
+ try {
245
+ if (localFileExisted) {
246
+ nativeBinding = require('./index.linux-arm-gnueabihf.node')
247
+ } else {
248
+ nativeBinding = require('@quicknode/sdk-linux-arm-gnueabihf')
249
+ }
250
+ } catch (e) {
251
+ loadError = e
252
+ }
253
+ }
254
+ break
255
+ case 'riscv64':
256
+ if (isMusl()) {
257
+ localFileExisted = existsSync(
258
+ join(__dirname, 'index.linux-riscv64-musl.node')
259
+ )
260
+ try {
261
+ if (localFileExisted) {
262
+ nativeBinding = require('./index.linux-riscv64-musl.node')
263
+ } else {
264
+ nativeBinding = require('@quicknode/sdk-linux-riscv64-musl')
265
+ }
266
+ } catch (e) {
267
+ loadError = e
268
+ }
269
+ } else {
270
+ localFileExisted = existsSync(
271
+ join(__dirname, 'index.linux-riscv64-gnu.node')
272
+ )
273
+ try {
274
+ if (localFileExisted) {
275
+ nativeBinding = require('./index.linux-riscv64-gnu.node')
276
+ } else {
277
+ nativeBinding = require('@quicknode/sdk-linux-riscv64-gnu')
278
+ }
279
+ } catch (e) {
280
+ loadError = e
281
+ }
282
+ }
283
+ break
284
+ case 's390x':
285
+ localFileExisted = existsSync(
286
+ join(__dirname, 'index.linux-s390x-gnu.node')
287
+ )
288
+ try {
289
+ if (localFileExisted) {
290
+ nativeBinding = require('./index.linux-s390x-gnu.node')
291
+ } else {
292
+ nativeBinding = require('@quicknode/sdk-linux-s390x-gnu')
293
+ }
294
+ } catch (e) {
295
+ loadError = e
296
+ }
297
+ break
298
+ default:
299
+ throw new Error(`Unsupported architecture on Linux: ${arch}`)
300
+ }
301
+ break
302
+ default:
303
+ throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
304
+ }
305
+
306
+ if (!nativeBinding) {
307
+ if (loadError) {
308
+ throw loadError
309
+ }
310
+ throw new Error(`Failed to load native binding`)
311
+ }
312
+
313
+ const { StreamRegion, StreamDataset, StreamDestination, FilterLanguage, StreamMetadataLocation, ProductType, StreamStatus, WebhookTemplateId, WebhookStartFrom, QuickNodeSdk, AdminApiClient, StreamsApiClient, WebhooksApiClient, KvStoreApiClient } = nativeBinding
314
+
315
+ module.exports.StreamRegion = StreamRegion
316
+ module.exports.StreamDataset = StreamDataset
317
+ module.exports.StreamDestination = StreamDestination
318
+ module.exports.FilterLanguage = FilterLanguage
319
+ module.exports.StreamMetadataLocation = StreamMetadataLocation
320
+ module.exports.ProductType = ProductType
321
+ module.exports.StreamStatus = StreamStatus
322
+ module.exports.WebhookTemplateId = WebhookTemplateId
323
+ module.exports.WebhookStartFrom = WebhookStartFrom
324
+ module.exports.QuickNodeSdk = QuickNodeSdk
325
+ module.exports.AdminApiClient = AdminApiClient
326
+ module.exports.StreamsApiClient = StreamsApiClient
327
+ module.exports.WebhooksApiClient = WebhooksApiClient
328
+ module.exports.KvStoreApiClient = KvStoreApiClient
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quicknode/sdk",
3
- "version": "3.0.0-alpha.5",
3
+ "version": "3.0.0-alpha.6",
4
4
  "description": "Quicknode SDK",
5
5
  "main": "sdk.js",
6
6
  "types": "sdk.d.ts",
@@ -18,6 +18,7 @@
18
18
  "sdk.js",
19
19
  "sdk.d.ts",
20
20
  "sdk.mjs",
21
+ "errors.js",
21
22
  "browser.js",
22
23
  "*.node"
23
24
  ],
@@ -44,10 +45,10 @@
44
45
  },
45
46
  "license": "MIT",
46
47
  "optionalDependencies": {
47
- "@quicknode/sdk-linux-x64-gnu": "3.0.0-alpha.5",
48
- "@quicknode/sdk-linux-arm64-gnu": "3.0.0-alpha.5",
49
- "@quicknode/sdk-linux-x64-musl": "3.0.0-alpha.5",
50
- "@quicknode/sdk-linux-arm64-musl": "3.0.0-alpha.5",
51
- "@quicknode/sdk-darwin-arm64": "3.0.0-alpha.5"
48
+ "@quicknode/sdk-linux-x64-gnu": "3.0.0-alpha.6",
49
+ "@quicknode/sdk-linux-arm64-gnu": "3.0.0-alpha.6",
50
+ "@quicknode/sdk-linux-x64-musl": "3.0.0-alpha.6",
51
+ "@quicknode/sdk-linux-arm64-musl": "3.0.0-alpha.6",
52
+ "@quicknode/sdk-darwin-arm64": "3.0.0-alpha.6"
52
53
  }
53
54
  }