@bananapus/nana-sdk-core 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,7 @@ export * from "./actions/suckerPairs.js";
4
4
  export * from "./constants.js";
5
5
  export * from "./contracts.js";
6
6
  export * from "./generated/juicebox.js";
7
+ export * from "./jbcenter.js";
7
8
  export * from "./types.js";
8
9
  export * from "./utils/index.js";
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -20,6 +20,7 @@ __exportStar(require("./actions/suckerPairs.js"), exports);
20
20
  __exportStar(require("./constants.js"), exports);
21
21
  __exportStar(require("./contracts.js"), exports);
22
22
  __exportStar(require("./generated/juicebox.js"), exports);
23
+ __exportStar(require("./jbcenter.js"), exports);
23
24
  __exportStar(require("./types.js"), exports);
24
25
  __exportStar(require("./utils/index.js"), exports);
25
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,+DAA6C;AAC7C,2DAAyC;AACzC,iDAA+B;AAC/B,iDAA+B;AAC/B,0DAAwC;AACxC,6CAA2B;AAC3B,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,+DAA6C;AAC7C,2DAAyC;AACzC,iDAA+B;AAC/B,iDAA+B;AAC/B,0DAAwC;AACxC,gDAA8B;AAC9B,6CAA2B;AAC3B,mDAAiC"}
@@ -0,0 +1,153 @@
1
+ import type { Address, Hex } from "viem";
2
+ export declare const JBCENTER_DEFAULT_URL = "https://juicebox.center";
3
+ export declare const JBCENTER_REQUEST_TIMEOUT_MS = 15000;
4
+ export declare const JBCENTER_PIN_TIMEOUT_MS = 300000;
5
+ export declare const MAX_JBCENTER_RESPONSE_BYTES: number;
6
+ export declare const JBCENTER_RPC_METHODS: readonly ["eth_blobBaseFee", "eth_blockNumber", "eth_call", "eth_chainId", "eth_createAccessList", "eth_estimateGas", "eth_feeHistory", "eth_gasPrice", "eth_getBalance", "eth_getBlockByHash", "eth_getBlockByNumber", "eth_getBlockReceipts", "eth_getBlockTransactionCountByHash", "eth_getBlockTransactionCountByNumber", "eth_getCode", "eth_getLogs", "eth_getProof", "eth_getStorageAt", "eth_getTransactionByBlockHashAndIndex", "eth_getTransactionByBlockNumberAndIndex", "eth_getTransactionByHash", "eth_getTransactionCount", "eth_getTransactionReceipt", "eth_maxPriorityFeePerGas", "eth_syncing", "net_version"];
7
+ export type JBCenterRpcMethod = (typeof JBCENTER_RPC_METHODS)[number];
8
+ export type JBCenterRpcRequest = {
9
+ method: JBCenterRpcMethod;
10
+ params?: readonly unknown[];
11
+ };
12
+ /** Structurally compatible with EIP-1193 providers, including viem's `custom`. */
13
+ export type JBCenterRpcProvider = {
14
+ request<TResult = unknown>(request: {
15
+ method: string;
16
+ params?: readonly unknown[];
17
+ }): Promise<TResult>;
18
+ };
19
+ export type JBCenterJson = null | boolean | number | string | JBCenterJson[] | JBCenterJsonObject;
20
+ export type JBCenterJsonObject = {
21
+ [key: string]: JBCenterJson;
22
+ };
23
+ export type JBCenterIntentInput<TJb extends JBCenterJsonObject = JBCenterJsonObject> = {
24
+ format: string;
25
+ deploymentVersion: string;
26
+ chainIds: number[];
27
+ jb: TJb;
28
+ };
29
+ export type JBCenterIntentEnvelope<TJb extends JBCenterJsonObject = JBCenterJsonObject> = JBCenterIntentInput<TJb> & {
30
+ version: 1;
31
+ };
32
+ export type JBCenterPreparedIntent<TJb extends JBCenterJsonObject = JBCenterJsonObject> = {
33
+ contentHash: Hex;
34
+ message: string;
35
+ envelope: JBCenterIntentEnvelope<TJb>;
36
+ };
37
+ export type JBCenterPublishIntentInput<TJb extends JBCenterJsonObject = JBCenterJsonObject> = JBCenterIntentInput<TJb> & {
38
+ publisher: Address;
39
+ signature: Hex;
40
+ };
41
+ export type JBCenterIntentMetadata = {
42
+ name: string;
43
+ description: string | null;
44
+ tagline: string | null;
45
+ tags: string[];
46
+ logoUri: string | null;
47
+ owner: Address | null;
48
+ };
49
+ export type JBCenterDeployment = {
50
+ chainId: number;
51
+ projectId: string;
52
+ transactionHash: Hex;
53
+ createdAt: string;
54
+ };
55
+ export type JBCenterDeploymentInput = Omit<JBCenterDeployment, "createdAt">;
56
+ export type JBCenterIntent<TJb extends JBCenterJsonObject = JBCenterJsonObject> = JBCenterIntentMetadata & {
57
+ id: string;
58
+ status: "undeployed" | "deployed";
59
+ contentHash: Hex;
60
+ envelope: JBCenterIntentEnvelope<TJb>;
61
+ publisher: Address;
62
+ signature: Hex;
63
+ createdAt: string;
64
+ deployments: JBCenterDeployment[];
65
+ };
66
+ export type JBCenterSearchItem = JBCenterIntentMetadata & {
67
+ source: "jbcenter";
68
+ status: "undeployed";
69
+ intentId: string;
70
+ contentHash: Hex;
71
+ format: string;
72
+ deploymentVersion: string;
73
+ chainIds: number[];
74
+ publisher: Address;
75
+ createdAt: string;
76
+ };
77
+ export type JBCenterSearchPage = {
78
+ items: JBCenterSearchItem[];
79
+ totalCount: number;
80
+ nextCursor: string | null;
81
+ };
82
+ export type JBCenterSearchParams = {
83
+ query?: string;
84
+ limit?: number;
85
+ cursor?: string;
86
+ };
87
+ export type JBCenterPin = {
88
+ cid: string;
89
+ status: "queued";
90
+ uri: `ipfs://${string}`;
91
+ gatewayUrl: string;
92
+ };
93
+ export type JBCenterRequestOptions = {
94
+ signal?: AbortSignal;
95
+ timeoutMs?: number;
96
+ };
97
+ export type JBCenterClientOptions = {
98
+ /** A server-side API key. Omit it for trusted-origin browser pin requests. */
99
+ apiKey?: string;
100
+ baseUrl?: string;
101
+ fetch?: typeof fetch;
102
+ maxResponseBytes?: number;
103
+ timeoutMs?: number;
104
+ };
105
+ export declare class JBCenterRequestError extends Error {
106
+ readonly status: number;
107
+ readonly code?: string | undefined;
108
+ readonly requestId?: string | undefined;
109
+ readonly retryAfter?: number | undefined;
110
+ constructor(message: string, status: number, code?: string | undefined, requestId?: string | undefined, retryAfter?: number | undefined);
111
+ }
112
+ export declare class JBCenterTimeoutError extends Error {
113
+ readonly timeoutMs: number;
114
+ constructor(timeoutMs: number);
115
+ }
116
+ export declare class JBCenterRpcError extends Error {
117
+ readonly code: number;
118
+ readonly data?: Hex | undefined;
119
+ constructor(code: number, message: string, data?: Hex | undefined);
120
+ }
121
+ export declare class JBCenterClient {
122
+ readonly baseUrl: string;
123
+ private readonly apiKey?;
124
+ private readonly fetchImpl;
125
+ private readonly maxResponseBytes;
126
+ private readonly timeoutMs;
127
+ private nextRpcId;
128
+ constructor(options?: JBCenterClientOptions);
129
+ prepareIntent<TJb extends JBCenterJsonObject>(intent: JBCenterIntentInput<TJb>, options?: JBCenterRequestOptions): Promise<JBCenterPreparedIntent<TJb>>;
130
+ publishIntent<TJb extends JBCenterJsonObject>(intent: JBCenterPublishIntentInput<TJb>, options?: JBCenterRequestOptions): Promise<JBCenterIntent<TJb>>;
131
+ getIntent<TJb extends JBCenterJsonObject = JBCenterJsonObject>(intentId: string, options?: JBCenterRequestOptions): Promise<JBCenterIntent<TJb>>;
132
+ searchIntents(params?: JBCenterSearchParams, options?: JBCenterRequestOptions): Promise<JBCenterSearchPage>;
133
+ recordDeployment(intentId: string, deployment: JBCenterDeploymentInput, options?: JBCenterRequestOptions): Promise<JBCenterDeployment>;
134
+ pinJson(value: JBCenterJsonObject, options?: JBCenterRequestOptions): Promise<JBCenterPin>;
135
+ pinImage(content: Blob, options?: JBCenterRequestOptions & {
136
+ filename?: string;
137
+ }): Promise<JBCenterPin>;
138
+ pinMedia(content: Blob, options?: JBCenterRequestOptions & {
139
+ filename?: string;
140
+ }): Promise<JBCenterPin>;
141
+ /**
142
+ * Sends one read-only JSON-RPC request through JB Center. The service rejects
143
+ * wallet, signing, transaction-submission, batch, and privileged methods.
144
+ */
145
+ rpc<TResult = unknown>(chainId: number, request: JBCenterRpcRequest, options?: JBCenterRequestOptions): Promise<TResult>;
146
+ /** Returns an EIP-1193-shaped provider suitable for viem's `custom`. */
147
+ rpcProvider(chainId: number): JBCenterRpcProvider;
148
+ private pinFile;
149
+ private fetchJson;
150
+ }
151
+ export declare function createJBCenterClient(options?: JBCenterClientOptions): JBCenterClient;
152
+ export declare function createJBCenterRpcProvider(chainId: number, options?: JBCenterClientOptions): JBCenterRpcProvider;
153
+ //# sourceMappingURL=jbcenter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jbcenter.d.ts","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,408 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JBCenterClient = exports.JBCenterRpcError = exports.JBCenterTimeoutError = exports.JBCenterRequestError = exports.JBCENTER_RPC_METHODS = exports.MAX_JBCENTER_RESPONSE_BYTES = exports.JBCENTER_PIN_TIMEOUT_MS = exports.JBCENTER_REQUEST_TIMEOUT_MS = exports.JBCENTER_DEFAULT_URL = void 0;
4
+ exports.createJBCenterClient = createJBCenterClient;
5
+ exports.createJBCenterRpcProvider = createJBCenterRpcProvider;
6
+ exports.JBCENTER_DEFAULT_URL = "https://juicebox.center";
7
+ exports.JBCENTER_REQUEST_TIMEOUT_MS = 15_000;
8
+ exports.JBCENTER_PIN_TIMEOUT_MS = 300_000;
9
+ exports.MAX_JBCENTER_RESPONSE_BYTES = 5 * 1024 * 1024;
10
+ exports.JBCENTER_RPC_METHODS = [
11
+ "eth_blobBaseFee",
12
+ "eth_blockNumber",
13
+ "eth_call",
14
+ "eth_chainId",
15
+ "eth_createAccessList",
16
+ "eth_estimateGas",
17
+ "eth_feeHistory",
18
+ "eth_gasPrice",
19
+ "eth_getBalance",
20
+ "eth_getBlockByHash",
21
+ "eth_getBlockByNumber",
22
+ "eth_getBlockReceipts",
23
+ "eth_getBlockTransactionCountByHash",
24
+ "eth_getBlockTransactionCountByNumber",
25
+ "eth_getCode",
26
+ "eth_getLogs",
27
+ "eth_getProof",
28
+ "eth_getStorageAt",
29
+ "eth_getTransactionByBlockHashAndIndex",
30
+ "eth_getTransactionByBlockNumberAndIndex",
31
+ "eth_getTransactionByHash",
32
+ "eth_getTransactionCount",
33
+ "eth_getTransactionReceipt",
34
+ "eth_maxPriorityFeePerGas",
35
+ "eth_syncing",
36
+ "net_version",
37
+ ];
38
+ class JBCenterRequestError extends Error {
39
+ constructor(message, status, code, requestId, retryAfter) {
40
+ super(message);
41
+ this.status = status;
42
+ this.code = code;
43
+ this.requestId = requestId;
44
+ this.retryAfter = retryAfter;
45
+ this.name = "JBCenterRequestError";
46
+ }
47
+ }
48
+ exports.JBCenterRequestError = JBCenterRequestError;
49
+ class JBCenterTimeoutError extends Error {
50
+ constructor(timeoutMs) {
51
+ super(`JB Center request timed out after ${timeoutMs}ms`);
52
+ this.timeoutMs = timeoutMs;
53
+ this.name = "JBCenterTimeoutError";
54
+ }
55
+ }
56
+ exports.JBCenterTimeoutError = JBCenterTimeoutError;
57
+ class JBCenterRpcError extends Error {
58
+ constructor(code, message, data) {
59
+ super(message);
60
+ this.code = code;
61
+ this.data = data;
62
+ this.name = "JBCenterRpcError";
63
+ }
64
+ }
65
+ exports.JBCenterRpcError = JBCenterRpcError;
66
+ function record(value) {
67
+ return value !== null && typeof value === "object" && !Array.isArray(value);
68
+ }
69
+ function isHash(value) {
70
+ return typeof value === "string" && /^0x[0-9a-f]{64}$/iu.test(value);
71
+ }
72
+ function isSignature(value) {
73
+ return (typeof value === "string" &&
74
+ /^0x(?:[0-9a-f]{128}|[0-9a-f]{130})$/iu.test(value));
75
+ }
76
+ function isRpcErrorData(value) {
77
+ return typeof value === "string" && /^0x(?:[0-9a-f]{2})*$/iu.test(value);
78
+ }
79
+ function rpcEnvelope(id) {
80
+ return (value) => {
81
+ if (!record(value) || value.jsonrpc !== "2.0" || value.id !== id) {
82
+ return false;
83
+ }
84
+ const hasResult = Object.prototype.hasOwnProperty.call(value, "result");
85
+ const hasError = Object.prototype.hasOwnProperty.call(value, "error");
86
+ if (hasResult === hasError)
87
+ return false;
88
+ if (hasResult)
89
+ return true;
90
+ return (record(value.error) &&
91
+ Number.isSafeInteger(value.error.code) &&
92
+ typeof value.error.message === "string" &&
93
+ (value.error.data === undefined || isRpcErrorData(value.error.data)));
94
+ };
95
+ }
96
+ function isAddress(value) {
97
+ return typeof value === "string" && /^0x[0-9a-f]{40}$/iu.test(value);
98
+ }
99
+ function isStringArray(value) {
100
+ return (Array.isArray(value) && value.every((item) => typeof item === "string"));
101
+ }
102
+ function isNumberArray(value) {
103
+ return (Array.isArray(value) &&
104
+ value.every((item) => Number.isSafeInteger(item) && Number(item) > 0));
105
+ }
106
+ function isEnvelope(value) {
107
+ return (record(value) &&
108
+ value.version === 1 &&
109
+ typeof value.format === "string" &&
110
+ typeof value.deploymentVersion === "string" &&
111
+ isNumberArray(value.chainIds) &&
112
+ record(value.jb));
113
+ }
114
+ function isMetadata(value) {
115
+ return (typeof value.name === "string" &&
116
+ (value.description === null || typeof value.description === "string") &&
117
+ (value.tagline === null || typeof value.tagline === "string") &&
118
+ isStringArray(value.tags) &&
119
+ (value.logoUri === null || typeof value.logoUri === "string") &&
120
+ (value.owner === null || isAddress(value.owner)));
121
+ }
122
+ function isDeployment(value) {
123
+ return (record(value) &&
124
+ Number.isSafeInteger(value.chainId) &&
125
+ Number(value.chainId) > 0 &&
126
+ typeof value.projectId === "string" &&
127
+ isHash(value.transactionHash) &&
128
+ typeof value.createdAt === "string");
129
+ }
130
+ function isIntent(value) {
131
+ return (record(value) &&
132
+ isMetadata(value) &&
133
+ typeof value.id === "string" &&
134
+ (value.status === "undeployed" || value.status === "deployed") &&
135
+ isHash(value.contentHash) &&
136
+ isEnvelope(value.envelope) &&
137
+ isAddress(value.publisher) &&
138
+ isSignature(value.signature) &&
139
+ typeof value.createdAt === "string" &&
140
+ Array.isArray(value.deployments) &&
141
+ value.deployments.every(isDeployment));
142
+ }
143
+ function isPreparedIntent(value) {
144
+ return (record(value) &&
145
+ isHash(value.contentHash) &&
146
+ typeof value.message === "string" &&
147
+ isEnvelope(value.envelope));
148
+ }
149
+ function isSearchItem(value) {
150
+ return (record(value) &&
151
+ isMetadata(value) &&
152
+ value.source === "jbcenter" &&
153
+ value.status === "undeployed" &&
154
+ typeof value.intentId === "string" &&
155
+ isHash(value.contentHash) &&
156
+ typeof value.format === "string" &&
157
+ typeof value.deploymentVersion === "string" &&
158
+ isNumberArray(value.chainIds) &&
159
+ isAddress(value.publisher) &&
160
+ typeof value.createdAt === "string");
161
+ }
162
+ function isSearchPage(value) {
163
+ return (record(value) &&
164
+ Array.isArray(value.items) &&
165
+ value.items.every(isSearchItem) &&
166
+ Number.isSafeInteger(value.totalCount) &&
167
+ Number(value.totalCount) >= 0 &&
168
+ (value.nextCursor === null || typeof value.nextCursor === "string"));
169
+ }
170
+ function isPin(value) {
171
+ return (record(value) &&
172
+ typeof value.cid === "string" &&
173
+ /^(?:Qm[1-9A-HJ-NP-Za-km-z]{44}|b[a-z2-7]{20,160})$/u.test(value.cid) &&
174
+ value.status === "queued" &&
175
+ typeof value.uri === "string" &&
176
+ value.uri === `ipfs://${value.cid}` &&
177
+ value.gatewayUrl === `/ipfs/${value.cid}`);
178
+ }
179
+ function normalizeBaseUrl(value) {
180
+ const url = new URL(value);
181
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
182
+ throw new TypeError("JB Center baseUrl must use HTTP or HTTPS");
183
+ }
184
+ if (url.username || url.password || url.search || url.hash) {
185
+ throw new TypeError("JB Center baseUrl cannot include credentials, query, or hash");
186
+ }
187
+ return url.toString().replace(/\/$/u, "");
188
+ }
189
+ async function readBoundedJson(response, maxResponseBytes) {
190
+ const declaredSize = Number(response.headers.get("content-length") ?? 0);
191
+ if (Number.isFinite(declaredSize) && declaredSize > maxResponseBytes) {
192
+ await response.body?.cancel();
193
+ throw new JBCenterRequestError("JB Center response exceeds the size limit", 502);
194
+ }
195
+ if (!response.headers.get("content-type")?.toLowerCase().includes("json")) {
196
+ await response.body?.cancel();
197
+ throw new JBCenterRequestError("JB Center returned an invalid content type", 502);
198
+ }
199
+ if (!response.body) {
200
+ throw new JBCenterRequestError("JB Center returned an empty response", 502);
201
+ }
202
+ const reader = response.body.getReader();
203
+ const chunks = [];
204
+ let total = 0;
205
+ try {
206
+ for (;;) {
207
+ const { done, value } = await reader.read();
208
+ if (done)
209
+ break;
210
+ total += value.byteLength;
211
+ if (total > maxResponseBytes) {
212
+ await reader.cancel("JB Center response exceeds the size limit");
213
+ throw new JBCenterRequestError("JB Center response exceeds the size limit", 502);
214
+ }
215
+ chunks.push(value);
216
+ }
217
+ }
218
+ finally {
219
+ reader.releaseLock();
220
+ }
221
+ const bytes = new Uint8Array(total);
222
+ let offset = 0;
223
+ for (const chunk of chunks) {
224
+ bytes.set(chunk, offset);
225
+ offset += chunk.byteLength;
226
+ }
227
+ try {
228
+ return JSON.parse(new TextDecoder().decode(bytes));
229
+ }
230
+ catch {
231
+ throw new JBCenterRequestError("JB Center returned invalid JSON", 502);
232
+ }
233
+ }
234
+ function filenameOf(content, fallback) {
235
+ const candidate = content.name;
236
+ return typeof candidate === "string" && candidate ? candidate : fallback;
237
+ }
238
+ class JBCenterClient {
239
+ constructor(options = {}) {
240
+ this.nextRpcId = 1;
241
+ this.baseUrl = normalizeBaseUrl(options.baseUrl ?? exports.JBCENTER_DEFAULT_URL);
242
+ if (options.apiKey !== undefined && !options.apiKey.trim()) {
243
+ throw new TypeError("JB Center apiKey cannot be empty");
244
+ }
245
+ const endpoint = new URL(this.baseUrl);
246
+ if (options.apiKey &&
247
+ endpoint.protocol !== "https:" &&
248
+ !["localhost", "127.0.0.1", "[::1]"].includes(endpoint.hostname)) {
249
+ throw new TypeError("JB Center apiKey requires HTTPS outside local development");
250
+ }
251
+ this.apiKey = options.apiKey;
252
+ this.fetchImpl = options.fetch ?? fetch;
253
+ this.maxResponseBytes =
254
+ options.maxResponseBytes ?? exports.MAX_JBCENTER_RESPONSE_BYTES;
255
+ this.timeoutMs = options.timeoutMs ?? exports.JBCENTER_REQUEST_TIMEOUT_MS;
256
+ if (!Number.isSafeInteger(this.maxResponseBytes) ||
257
+ this.maxResponseBytes <= 0) {
258
+ throw new TypeError("maxResponseBytes must be a positive safe integer");
259
+ }
260
+ if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0) {
261
+ throw new TypeError("timeoutMs must be positive");
262
+ }
263
+ }
264
+ prepareIntent(intent, options) {
265
+ return this.fetchJson("v1/intents/message", { method: "POST", body: JSON.stringify(intent) }, isPreparedIntent, options);
266
+ }
267
+ publishIntent(intent, options) {
268
+ return this.fetchJson("v1/intents", { method: "POST", body: JSON.stringify(intent) }, isIntent, options);
269
+ }
270
+ getIntent(intentId, options) {
271
+ return this.fetchJson(`v1/intents/${encodeURIComponent(intentId)}`, {}, isIntent, options);
272
+ }
273
+ searchIntents(params = {}, options) {
274
+ const query = new URLSearchParams();
275
+ if (params.query !== undefined)
276
+ query.set("q", params.query);
277
+ if (params.limit !== undefined)
278
+ query.set("limit", String(params.limit));
279
+ if (params.cursor !== undefined)
280
+ query.set("cursor", params.cursor);
281
+ const suffix = query.size ? `?${query}` : "";
282
+ return this.fetchJson(`v1/search${suffix}`, {}, isSearchPage, options);
283
+ }
284
+ recordDeployment(intentId, deployment, options) {
285
+ return this.fetchJson(`v1/intents/${encodeURIComponent(intentId)}/deployments`, { method: "POST", body: JSON.stringify(deployment) }, isDeployment, options);
286
+ }
287
+ pinJson(value, options) {
288
+ return this.fetchJson("v1/pins/json", { method: "POST", body: JSON.stringify(value) }, isPin, { ...options, timeoutMs: options?.timeoutMs ?? exports.JBCENTER_PIN_TIMEOUT_MS });
289
+ }
290
+ pinImage(content, options) {
291
+ return this.pinFile("v1/pins/file", content, "image", options);
292
+ }
293
+ pinMedia(content, options) {
294
+ return this.pinFile("v1/pins/media", content, "media", options);
295
+ }
296
+ /**
297
+ * Sends one read-only JSON-RPC request through JB Center. The service rejects
298
+ * wallet, signing, transaction-submission, batch, and privileged methods.
299
+ */
300
+ async rpc(chainId, request, options) {
301
+ if (!Number.isSafeInteger(chainId) || chainId <= 0) {
302
+ throw new TypeError("chainId must be a positive safe integer");
303
+ }
304
+ if (!exports.JBCENTER_RPC_METHODS.includes(request.method)) {
305
+ throw new TypeError("JB Center RPC method is not supported");
306
+ }
307
+ if (request.params !== undefined && !Array.isArray(request.params)) {
308
+ throw new TypeError("JB Center RPC params must be an array");
309
+ }
310
+ const id = this.nextRpcId;
311
+ this.nextRpcId = id === Number.MAX_SAFE_INTEGER ? 1 : id + 1;
312
+ const body = await this.fetchJson(`v1/rpc/${chainId}`, {
313
+ method: "POST",
314
+ body: JSON.stringify({ jsonrpc: "2.0", id, ...request }),
315
+ }, rpcEnvelope(id), options);
316
+ if ("error" in body) {
317
+ throw new JBCenterRpcError(body.error.code, body.error.message, body.error.data);
318
+ }
319
+ return body.result;
320
+ }
321
+ /** Returns an EIP-1193-shaped provider suitable for viem's `custom`. */
322
+ rpcProvider(chainId) {
323
+ if (!Number.isSafeInteger(chainId) || chainId <= 0) {
324
+ throw new TypeError("chainId must be a positive safe integer");
325
+ }
326
+ return {
327
+ request: async (request) => {
328
+ if (!exports.JBCENTER_RPC_METHODS.includes(request.method)) {
329
+ throw new TypeError("JB Center RPC method is not supported");
330
+ }
331
+ return this.rpc(chainId, request);
332
+ },
333
+ };
334
+ }
335
+ pinFile(path, content, fallbackName, options) {
336
+ const body = new FormData();
337
+ body.append("file", content, options?.filename ?? filenameOf(content, fallbackName));
338
+ return this.fetchJson(path, { method: "POST", body }, isPin, {
339
+ ...options,
340
+ timeoutMs: options?.timeoutMs ?? exports.JBCENTER_PIN_TIMEOUT_MS,
341
+ });
342
+ }
343
+ async fetchJson(path, init, validate, options = {}) {
344
+ const timeoutMs = options.timeoutMs ?? this.timeoutMs;
345
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
346
+ throw new TypeError("timeoutMs must be positive");
347
+ }
348
+ const controller = new AbortController();
349
+ const abort = () => controller.abort(options.signal?.reason);
350
+ options.signal?.addEventListener("abort", abort, { once: true });
351
+ const timeoutReason = new JBCenterTimeoutError(timeoutMs);
352
+ const timeout = setTimeout(() => controller.abort(timeoutReason), timeoutMs);
353
+ try {
354
+ if (options.signal?.aborted)
355
+ abort();
356
+ const headers = new Headers(init.headers);
357
+ headers.set("Accept", "application/json");
358
+ if (typeof init.body === "string") {
359
+ headers.set("Content-Type", "application/json");
360
+ }
361
+ if (this.apiKey)
362
+ headers.set("Authorization", `Bearer ${this.apiKey}`);
363
+ const response = await this.fetchImpl(`${this.baseUrl}/${path}`, {
364
+ ...init,
365
+ headers,
366
+ signal: controller.signal,
367
+ });
368
+ const body = await readBoundedJson(response, this.maxResponseBytes);
369
+ if (!response.ok) {
370
+ const envelope = record(body) ? body : {};
371
+ const code = typeof envelope.error?.code === "string"
372
+ ? envelope.error.code
373
+ : undefined;
374
+ const message = typeof envelope.error?.message === "string"
375
+ ? envelope.error.message
376
+ : `JB Center request failed (${response.status})`;
377
+ const retryAfterHeader = response.headers.get("retry-after");
378
+ const retryAfter = Number(retryAfterHeader);
379
+ throw new JBCenterRequestError(message, response.status, code, response.headers.get("x-request-id") ?? undefined, retryAfterHeader !== null &&
380
+ Number.isFinite(retryAfter) &&
381
+ retryAfter >= 0
382
+ ? retryAfter
383
+ : undefined);
384
+ }
385
+ if (!validate(body)) {
386
+ throw new JBCenterRequestError("JB Center returned an invalid response", 502, undefined, response.headers.get("x-request-id") ?? undefined);
387
+ }
388
+ return body;
389
+ }
390
+ catch (error) {
391
+ if (controller.signal.reason === timeoutReason)
392
+ throw timeoutReason;
393
+ throw error;
394
+ }
395
+ finally {
396
+ clearTimeout(timeout);
397
+ options.signal?.removeEventListener("abort", abort);
398
+ }
399
+ }
400
+ }
401
+ exports.JBCenterClient = JBCenterClient;
402
+ function createJBCenterClient(options = {}) {
403
+ return new JBCenterClient(options);
404
+ }
405
+ function createJBCenterRpcProvider(chainId, options = {}) {
406
+ return new JBCenterClient(options).rpcProvider(chainId);
407
+ }
408
+ //# sourceMappingURL=jbcenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jbcenter.js","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export * from "./actions/suckerPairs.js";
4
4
  export * from "./constants.js";
5
5
  export * from "./contracts.js";
6
6
  export * from "./generated/juicebox.js";
7
+ export * from "./jbcenter.js";
7
8
  export * from "./types.js";
8
9
  export * from "./utils/index.js";
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
package/dist/esm/index.js CHANGED
@@ -4,6 +4,7 @@ export * from "./actions/suckerPairs.js";
4
4
  export * from "./constants.js";
5
5
  export * from "./contracts.js";
6
6
  export * from "./generated/juicebox.js";
7
+ export * from "./jbcenter.js";
7
8
  export * from "./types.js";
8
9
  export * from "./utils/index.js";
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,153 @@
1
+ import type { Address, Hex } from "viem";
2
+ export declare const JBCENTER_DEFAULT_URL = "https://juicebox.center";
3
+ export declare const JBCENTER_REQUEST_TIMEOUT_MS = 15000;
4
+ export declare const JBCENTER_PIN_TIMEOUT_MS = 300000;
5
+ export declare const MAX_JBCENTER_RESPONSE_BYTES: number;
6
+ export declare const JBCENTER_RPC_METHODS: readonly ["eth_blobBaseFee", "eth_blockNumber", "eth_call", "eth_chainId", "eth_createAccessList", "eth_estimateGas", "eth_feeHistory", "eth_gasPrice", "eth_getBalance", "eth_getBlockByHash", "eth_getBlockByNumber", "eth_getBlockReceipts", "eth_getBlockTransactionCountByHash", "eth_getBlockTransactionCountByNumber", "eth_getCode", "eth_getLogs", "eth_getProof", "eth_getStorageAt", "eth_getTransactionByBlockHashAndIndex", "eth_getTransactionByBlockNumberAndIndex", "eth_getTransactionByHash", "eth_getTransactionCount", "eth_getTransactionReceipt", "eth_maxPriorityFeePerGas", "eth_syncing", "net_version"];
7
+ export type JBCenterRpcMethod = (typeof JBCENTER_RPC_METHODS)[number];
8
+ export type JBCenterRpcRequest = {
9
+ method: JBCenterRpcMethod;
10
+ params?: readonly unknown[];
11
+ };
12
+ /** Structurally compatible with EIP-1193 providers, including viem's `custom`. */
13
+ export type JBCenterRpcProvider = {
14
+ request<TResult = unknown>(request: {
15
+ method: string;
16
+ params?: readonly unknown[];
17
+ }): Promise<TResult>;
18
+ };
19
+ export type JBCenterJson = null | boolean | number | string | JBCenterJson[] | JBCenterJsonObject;
20
+ export type JBCenterJsonObject = {
21
+ [key: string]: JBCenterJson;
22
+ };
23
+ export type JBCenterIntentInput<TJb extends JBCenterJsonObject = JBCenterJsonObject> = {
24
+ format: string;
25
+ deploymentVersion: string;
26
+ chainIds: number[];
27
+ jb: TJb;
28
+ };
29
+ export type JBCenterIntentEnvelope<TJb extends JBCenterJsonObject = JBCenterJsonObject> = JBCenterIntentInput<TJb> & {
30
+ version: 1;
31
+ };
32
+ export type JBCenterPreparedIntent<TJb extends JBCenterJsonObject = JBCenterJsonObject> = {
33
+ contentHash: Hex;
34
+ message: string;
35
+ envelope: JBCenterIntentEnvelope<TJb>;
36
+ };
37
+ export type JBCenterPublishIntentInput<TJb extends JBCenterJsonObject = JBCenterJsonObject> = JBCenterIntentInput<TJb> & {
38
+ publisher: Address;
39
+ signature: Hex;
40
+ };
41
+ export type JBCenterIntentMetadata = {
42
+ name: string;
43
+ description: string | null;
44
+ tagline: string | null;
45
+ tags: string[];
46
+ logoUri: string | null;
47
+ owner: Address | null;
48
+ };
49
+ export type JBCenterDeployment = {
50
+ chainId: number;
51
+ projectId: string;
52
+ transactionHash: Hex;
53
+ createdAt: string;
54
+ };
55
+ export type JBCenterDeploymentInput = Omit<JBCenterDeployment, "createdAt">;
56
+ export type JBCenterIntent<TJb extends JBCenterJsonObject = JBCenterJsonObject> = JBCenterIntentMetadata & {
57
+ id: string;
58
+ status: "undeployed" | "deployed";
59
+ contentHash: Hex;
60
+ envelope: JBCenterIntentEnvelope<TJb>;
61
+ publisher: Address;
62
+ signature: Hex;
63
+ createdAt: string;
64
+ deployments: JBCenterDeployment[];
65
+ };
66
+ export type JBCenterSearchItem = JBCenterIntentMetadata & {
67
+ source: "jbcenter";
68
+ status: "undeployed";
69
+ intentId: string;
70
+ contentHash: Hex;
71
+ format: string;
72
+ deploymentVersion: string;
73
+ chainIds: number[];
74
+ publisher: Address;
75
+ createdAt: string;
76
+ };
77
+ export type JBCenterSearchPage = {
78
+ items: JBCenterSearchItem[];
79
+ totalCount: number;
80
+ nextCursor: string | null;
81
+ };
82
+ export type JBCenterSearchParams = {
83
+ query?: string;
84
+ limit?: number;
85
+ cursor?: string;
86
+ };
87
+ export type JBCenterPin = {
88
+ cid: string;
89
+ status: "queued";
90
+ uri: `ipfs://${string}`;
91
+ gatewayUrl: string;
92
+ };
93
+ export type JBCenterRequestOptions = {
94
+ signal?: AbortSignal;
95
+ timeoutMs?: number;
96
+ };
97
+ export type JBCenterClientOptions = {
98
+ /** A server-side API key. Omit it for trusted-origin browser pin requests. */
99
+ apiKey?: string;
100
+ baseUrl?: string;
101
+ fetch?: typeof fetch;
102
+ maxResponseBytes?: number;
103
+ timeoutMs?: number;
104
+ };
105
+ export declare class JBCenterRequestError extends Error {
106
+ readonly status: number;
107
+ readonly code?: string | undefined;
108
+ readonly requestId?: string | undefined;
109
+ readonly retryAfter?: number | undefined;
110
+ constructor(message: string, status: number, code?: string | undefined, requestId?: string | undefined, retryAfter?: number | undefined);
111
+ }
112
+ export declare class JBCenterTimeoutError extends Error {
113
+ readonly timeoutMs: number;
114
+ constructor(timeoutMs: number);
115
+ }
116
+ export declare class JBCenterRpcError extends Error {
117
+ readonly code: number;
118
+ readonly data?: Hex | undefined;
119
+ constructor(code: number, message: string, data?: Hex | undefined);
120
+ }
121
+ export declare class JBCenterClient {
122
+ readonly baseUrl: string;
123
+ private readonly apiKey?;
124
+ private readonly fetchImpl;
125
+ private readonly maxResponseBytes;
126
+ private readonly timeoutMs;
127
+ private nextRpcId;
128
+ constructor(options?: JBCenterClientOptions);
129
+ prepareIntent<TJb extends JBCenterJsonObject>(intent: JBCenterIntentInput<TJb>, options?: JBCenterRequestOptions): Promise<JBCenterPreparedIntent<TJb>>;
130
+ publishIntent<TJb extends JBCenterJsonObject>(intent: JBCenterPublishIntentInput<TJb>, options?: JBCenterRequestOptions): Promise<JBCenterIntent<TJb>>;
131
+ getIntent<TJb extends JBCenterJsonObject = JBCenterJsonObject>(intentId: string, options?: JBCenterRequestOptions): Promise<JBCenterIntent<TJb>>;
132
+ searchIntents(params?: JBCenterSearchParams, options?: JBCenterRequestOptions): Promise<JBCenterSearchPage>;
133
+ recordDeployment(intentId: string, deployment: JBCenterDeploymentInput, options?: JBCenterRequestOptions): Promise<JBCenterDeployment>;
134
+ pinJson(value: JBCenterJsonObject, options?: JBCenterRequestOptions): Promise<JBCenterPin>;
135
+ pinImage(content: Blob, options?: JBCenterRequestOptions & {
136
+ filename?: string;
137
+ }): Promise<JBCenterPin>;
138
+ pinMedia(content: Blob, options?: JBCenterRequestOptions & {
139
+ filename?: string;
140
+ }): Promise<JBCenterPin>;
141
+ /**
142
+ * Sends one read-only JSON-RPC request through JB Center. The service rejects
143
+ * wallet, signing, transaction-submission, batch, and privileged methods.
144
+ */
145
+ rpc<TResult = unknown>(chainId: number, request: JBCenterRpcRequest, options?: JBCenterRequestOptions): Promise<TResult>;
146
+ /** Returns an EIP-1193-shaped provider suitable for viem's `custom`. */
147
+ rpcProvider(chainId: number): JBCenterRpcProvider;
148
+ private pinFile;
149
+ private fetchJson;
150
+ }
151
+ export declare function createJBCenterClient(options?: JBCenterClientOptions): JBCenterClient;
152
+ export declare function createJBCenterRpcProvider(chainId: number, options?: JBCenterClientOptions): JBCenterRpcProvider;
153
+ //# sourceMappingURL=jbcenter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jbcenter.d.ts","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,399 @@
1
+ export const JBCENTER_DEFAULT_URL = "https://juicebox.center";
2
+ export const JBCENTER_REQUEST_TIMEOUT_MS = 15_000;
3
+ export const JBCENTER_PIN_TIMEOUT_MS = 300_000;
4
+ export const MAX_JBCENTER_RESPONSE_BYTES = 5 * 1024 * 1024;
5
+ export const JBCENTER_RPC_METHODS = [
6
+ "eth_blobBaseFee",
7
+ "eth_blockNumber",
8
+ "eth_call",
9
+ "eth_chainId",
10
+ "eth_createAccessList",
11
+ "eth_estimateGas",
12
+ "eth_feeHistory",
13
+ "eth_gasPrice",
14
+ "eth_getBalance",
15
+ "eth_getBlockByHash",
16
+ "eth_getBlockByNumber",
17
+ "eth_getBlockReceipts",
18
+ "eth_getBlockTransactionCountByHash",
19
+ "eth_getBlockTransactionCountByNumber",
20
+ "eth_getCode",
21
+ "eth_getLogs",
22
+ "eth_getProof",
23
+ "eth_getStorageAt",
24
+ "eth_getTransactionByBlockHashAndIndex",
25
+ "eth_getTransactionByBlockNumberAndIndex",
26
+ "eth_getTransactionByHash",
27
+ "eth_getTransactionCount",
28
+ "eth_getTransactionReceipt",
29
+ "eth_maxPriorityFeePerGas",
30
+ "eth_syncing",
31
+ "net_version",
32
+ ];
33
+ export class JBCenterRequestError extends Error {
34
+ constructor(message, status, code, requestId, retryAfter) {
35
+ super(message);
36
+ this.status = status;
37
+ this.code = code;
38
+ this.requestId = requestId;
39
+ this.retryAfter = retryAfter;
40
+ this.name = "JBCenterRequestError";
41
+ }
42
+ }
43
+ export class JBCenterTimeoutError extends Error {
44
+ constructor(timeoutMs) {
45
+ super(`JB Center request timed out after ${timeoutMs}ms`);
46
+ this.timeoutMs = timeoutMs;
47
+ this.name = "JBCenterTimeoutError";
48
+ }
49
+ }
50
+ export class JBCenterRpcError extends Error {
51
+ constructor(code, message, data) {
52
+ super(message);
53
+ this.code = code;
54
+ this.data = data;
55
+ this.name = "JBCenterRpcError";
56
+ }
57
+ }
58
+ function record(value) {
59
+ return value !== null && typeof value === "object" && !Array.isArray(value);
60
+ }
61
+ function isHash(value) {
62
+ return typeof value === "string" && /^0x[0-9a-f]{64}$/iu.test(value);
63
+ }
64
+ function isSignature(value) {
65
+ return (typeof value === "string" &&
66
+ /^0x(?:[0-9a-f]{128}|[0-9a-f]{130})$/iu.test(value));
67
+ }
68
+ function isRpcErrorData(value) {
69
+ return typeof value === "string" && /^0x(?:[0-9a-f]{2})*$/iu.test(value);
70
+ }
71
+ function rpcEnvelope(id) {
72
+ return (value) => {
73
+ if (!record(value) || value.jsonrpc !== "2.0" || value.id !== id) {
74
+ return false;
75
+ }
76
+ const hasResult = Object.prototype.hasOwnProperty.call(value, "result");
77
+ const hasError = Object.prototype.hasOwnProperty.call(value, "error");
78
+ if (hasResult === hasError)
79
+ return false;
80
+ if (hasResult)
81
+ return true;
82
+ return (record(value.error) &&
83
+ Number.isSafeInteger(value.error.code) &&
84
+ typeof value.error.message === "string" &&
85
+ (value.error.data === undefined || isRpcErrorData(value.error.data)));
86
+ };
87
+ }
88
+ function isAddress(value) {
89
+ return typeof value === "string" && /^0x[0-9a-f]{40}$/iu.test(value);
90
+ }
91
+ function isStringArray(value) {
92
+ return (Array.isArray(value) && value.every((item) => typeof item === "string"));
93
+ }
94
+ function isNumberArray(value) {
95
+ return (Array.isArray(value) &&
96
+ value.every((item) => Number.isSafeInteger(item) && Number(item) > 0));
97
+ }
98
+ function isEnvelope(value) {
99
+ return (record(value) &&
100
+ value.version === 1 &&
101
+ typeof value.format === "string" &&
102
+ typeof value.deploymentVersion === "string" &&
103
+ isNumberArray(value.chainIds) &&
104
+ record(value.jb));
105
+ }
106
+ function isMetadata(value) {
107
+ return (typeof value.name === "string" &&
108
+ (value.description === null || typeof value.description === "string") &&
109
+ (value.tagline === null || typeof value.tagline === "string") &&
110
+ isStringArray(value.tags) &&
111
+ (value.logoUri === null || typeof value.logoUri === "string") &&
112
+ (value.owner === null || isAddress(value.owner)));
113
+ }
114
+ function isDeployment(value) {
115
+ return (record(value) &&
116
+ Number.isSafeInteger(value.chainId) &&
117
+ Number(value.chainId) > 0 &&
118
+ typeof value.projectId === "string" &&
119
+ isHash(value.transactionHash) &&
120
+ typeof value.createdAt === "string");
121
+ }
122
+ function isIntent(value) {
123
+ return (record(value) &&
124
+ isMetadata(value) &&
125
+ typeof value.id === "string" &&
126
+ (value.status === "undeployed" || value.status === "deployed") &&
127
+ isHash(value.contentHash) &&
128
+ isEnvelope(value.envelope) &&
129
+ isAddress(value.publisher) &&
130
+ isSignature(value.signature) &&
131
+ typeof value.createdAt === "string" &&
132
+ Array.isArray(value.deployments) &&
133
+ value.deployments.every(isDeployment));
134
+ }
135
+ function isPreparedIntent(value) {
136
+ return (record(value) &&
137
+ isHash(value.contentHash) &&
138
+ typeof value.message === "string" &&
139
+ isEnvelope(value.envelope));
140
+ }
141
+ function isSearchItem(value) {
142
+ return (record(value) &&
143
+ isMetadata(value) &&
144
+ value.source === "jbcenter" &&
145
+ value.status === "undeployed" &&
146
+ typeof value.intentId === "string" &&
147
+ isHash(value.contentHash) &&
148
+ typeof value.format === "string" &&
149
+ typeof value.deploymentVersion === "string" &&
150
+ isNumberArray(value.chainIds) &&
151
+ isAddress(value.publisher) &&
152
+ typeof value.createdAt === "string");
153
+ }
154
+ function isSearchPage(value) {
155
+ return (record(value) &&
156
+ Array.isArray(value.items) &&
157
+ value.items.every(isSearchItem) &&
158
+ Number.isSafeInteger(value.totalCount) &&
159
+ Number(value.totalCount) >= 0 &&
160
+ (value.nextCursor === null || typeof value.nextCursor === "string"));
161
+ }
162
+ function isPin(value) {
163
+ return (record(value) &&
164
+ typeof value.cid === "string" &&
165
+ /^(?:Qm[1-9A-HJ-NP-Za-km-z]{44}|b[a-z2-7]{20,160})$/u.test(value.cid) &&
166
+ value.status === "queued" &&
167
+ typeof value.uri === "string" &&
168
+ value.uri === `ipfs://${value.cid}` &&
169
+ value.gatewayUrl === `/ipfs/${value.cid}`);
170
+ }
171
+ function normalizeBaseUrl(value) {
172
+ const url = new URL(value);
173
+ if (url.protocol !== "https:" && url.protocol !== "http:") {
174
+ throw new TypeError("JB Center baseUrl must use HTTP or HTTPS");
175
+ }
176
+ if (url.username || url.password || url.search || url.hash) {
177
+ throw new TypeError("JB Center baseUrl cannot include credentials, query, or hash");
178
+ }
179
+ return url.toString().replace(/\/$/u, "");
180
+ }
181
+ async function readBoundedJson(response, maxResponseBytes) {
182
+ const declaredSize = Number(response.headers.get("content-length") ?? 0);
183
+ if (Number.isFinite(declaredSize) && declaredSize > maxResponseBytes) {
184
+ await response.body?.cancel();
185
+ throw new JBCenterRequestError("JB Center response exceeds the size limit", 502);
186
+ }
187
+ if (!response.headers.get("content-type")?.toLowerCase().includes("json")) {
188
+ await response.body?.cancel();
189
+ throw new JBCenterRequestError("JB Center returned an invalid content type", 502);
190
+ }
191
+ if (!response.body) {
192
+ throw new JBCenterRequestError("JB Center returned an empty response", 502);
193
+ }
194
+ const reader = response.body.getReader();
195
+ const chunks = [];
196
+ let total = 0;
197
+ try {
198
+ for (;;) {
199
+ const { done, value } = await reader.read();
200
+ if (done)
201
+ break;
202
+ total += value.byteLength;
203
+ if (total > maxResponseBytes) {
204
+ await reader.cancel("JB Center response exceeds the size limit");
205
+ throw new JBCenterRequestError("JB Center response exceeds the size limit", 502);
206
+ }
207
+ chunks.push(value);
208
+ }
209
+ }
210
+ finally {
211
+ reader.releaseLock();
212
+ }
213
+ const bytes = new Uint8Array(total);
214
+ let offset = 0;
215
+ for (const chunk of chunks) {
216
+ bytes.set(chunk, offset);
217
+ offset += chunk.byteLength;
218
+ }
219
+ try {
220
+ return JSON.parse(new TextDecoder().decode(bytes));
221
+ }
222
+ catch {
223
+ throw new JBCenterRequestError("JB Center returned invalid JSON", 502);
224
+ }
225
+ }
226
+ function filenameOf(content, fallback) {
227
+ const candidate = content.name;
228
+ return typeof candidate === "string" && candidate ? candidate : fallback;
229
+ }
230
+ export class JBCenterClient {
231
+ constructor(options = {}) {
232
+ this.nextRpcId = 1;
233
+ this.baseUrl = normalizeBaseUrl(options.baseUrl ?? JBCENTER_DEFAULT_URL);
234
+ if (options.apiKey !== undefined && !options.apiKey.trim()) {
235
+ throw new TypeError("JB Center apiKey cannot be empty");
236
+ }
237
+ const endpoint = new URL(this.baseUrl);
238
+ if (options.apiKey &&
239
+ endpoint.protocol !== "https:" &&
240
+ !["localhost", "127.0.0.1", "[::1]"].includes(endpoint.hostname)) {
241
+ throw new TypeError("JB Center apiKey requires HTTPS outside local development");
242
+ }
243
+ this.apiKey = options.apiKey;
244
+ this.fetchImpl = options.fetch ?? fetch;
245
+ this.maxResponseBytes =
246
+ options.maxResponseBytes ?? MAX_JBCENTER_RESPONSE_BYTES;
247
+ this.timeoutMs = options.timeoutMs ?? JBCENTER_REQUEST_TIMEOUT_MS;
248
+ if (!Number.isSafeInteger(this.maxResponseBytes) ||
249
+ this.maxResponseBytes <= 0) {
250
+ throw new TypeError("maxResponseBytes must be a positive safe integer");
251
+ }
252
+ if (!Number.isFinite(this.timeoutMs) || this.timeoutMs <= 0) {
253
+ throw new TypeError("timeoutMs must be positive");
254
+ }
255
+ }
256
+ prepareIntent(intent, options) {
257
+ return this.fetchJson("v1/intents/message", { method: "POST", body: JSON.stringify(intent) }, isPreparedIntent, options);
258
+ }
259
+ publishIntent(intent, options) {
260
+ return this.fetchJson("v1/intents", { method: "POST", body: JSON.stringify(intent) }, isIntent, options);
261
+ }
262
+ getIntent(intentId, options) {
263
+ return this.fetchJson(`v1/intents/${encodeURIComponent(intentId)}`, {}, isIntent, options);
264
+ }
265
+ searchIntents(params = {}, options) {
266
+ const query = new URLSearchParams();
267
+ if (params.query !== undefined)
268
+ query.set("q", params.query);
269
+ if (params.limit !== undefined)
270
+ query.set("limit", String(params.limit));
271
+ if (params.cursor !== undefined)
272
+ query.set("cursor", params.cursor);
273
+ const suffix = query.size ? `?${query}` : "";
274
+ return this.fetchJson(`v1/search${suffix}`, {}, isSearchPage, options);
275
+ }
276
+ recordDeployment(intentId, deployment, options) {
277
+ return this.fetchJson(`v1/intents/${encodeURIComponent(intentId)}/deployments`, { method: "POST", body: JSON.stringify(deployment) }, isDeployment, options);
278
+ }
279
+ pinJson(value, options) {
280
+ return this.fetchJson("v1/pins/json", { method: "POST", body: JSON.stringify(value) }, isPin, { ...options, timeoutMs: options?.timeoutMs ?? JBCENTER_PIN_TIMEOUT_MS });
281
+ }
282
+ pinImage(content, options) {
283
+ return this.pinFile("v1/pins/file", content, "image", options);
284
+ }
285
+ pinMedia(content, options) {
286
+ return this.pinFile("v1/pins/media", content, "media", options);
287
+ }
288
+ /**
289
+ * Sends one read-only JSON-RPC request through JB Center. The service rejects
290
+ * wallet, signing, transaction-submission, batch, and privileged methods.
291
+ */
292
+ async rpc(chainId, request, options) {
293
+ if (!Number.isSafeInteger(chainId) || chainId <= 0) {
294
+ throw new TypeError("chainId must be a positive safe integer");
295
+ }
296
+ if (!JBCENTER_RPC_METHODS.includes(request.method)) {
297
+ throw new TypeError("JB Center RPC method is not supported");
298
+ }
299
+ if (request.params !== undefined && !Array.isArray(request.params)) {
300
+ throw new TypeError("JB Center RPC params must be an array");
301
+ }
302
+ const id = this.nextRpcId;
303
+ this.nextRpcId = id === Number.MAX_SAFE_INTEGER ? 1 : id + 1;
304
+ const body = await this.fetchJson(`v1/rpc/${chainId}`, {
305
+ method: "POST",
306
+ body: JSON.stringify({ jsonrpc: "2.0", id, ...request }),
307
+ }, rpcEnvelope(id), options);
308
+ if ("error" in body) {
309
+ throw new JBCenterRpcError(body.error.code, body.error.message, body.error.data);
310
+ }
311
+ return body.result;
312
+ }
313
+ /** Returns an EIP-1193-shaped provider suitable for viem's `custom`. */
314
+ rpcProvider(chainId) {
315
+ if (!Number.isSafeInteger(chainId) || chainId <= 0) {
316
+ throw new TypeError("chainId must be a positive safe integer");
317
+ }
318
+ return {
319
+ request: async (request) => {
320
+ if (!JBCENTER_RPC_METHODS.includes(request.method)) {
321
+ throw new TypeError("JB Center RPC method is not supported");
322
+ }
323
+ return this.rpc(chainId, request);
324
+ },
325
+ };
326
+ }
327
+ pinFile(path, content, fallbackName, options) {
328
+ const body = new FormData();
329
+ body.append("file", content, options?.filename ?? filenameOf(content, fallbackName));
330
+ return this.fetchJson(path, { method: "POST", body }, isPin, {
331
+ ...options,
332
+ timeoutMs: options?.timeoutMs ?? JBCENTER_PIN_TIMEOUT_MS,
333
+ });
334
+ }
335
+ async fetchJson(path, init, validate, options = {}) {
336
+ const timeoutMs = options.timeoutMs ?? this.timeoutMs;
337
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
338
+ throw new TypeError("timeoutMs must be positive");
339
+ }
340
+ const controller = new AbortController();
341
+ const abort = () => controller.abort(options.signal?.reason);
342
+ options.signal?.addEventListener("abort", abort, { once: true });
343
+ const timeoutReason = new JBCenterTimeoutError(timeoutMs);
344
+ const timeout = setTimeout(() => controller.abort(timeoutReason), timeoutMs);
345
+ try {
346
+ if (options.signal?.aborted)
347
+ abort();
348
+ const headers = new Headers(init.headers);
349
+ headers.set("Accept", "application/json");
350
+ if (typeof init.body === "string") {
351
+ headers.set("Content-Type", "application/json");
352
+ }
353
+ if (this.apiKey)
354
+ headers.set("Authorization", `Bearer ${this.apiKey}`);
355
+ const response = await this.fetchImpl(`${this.baseUrl}/${path}`, {
356
+ ...init,
357
+ headers,
358
+ signal: controller.signal,
359
+ });
360
+ const body = await readBoundedJson(response, this.maxResponseBytes);
361
+ if (!response.ok) {
362
+ const envelope = record(body) ? body : {};
363
+ const code = typeof envelope.error?.code === "string"
364
+ ? envelope.error.code
365
+ : undefined;
366
+ const message = typeof envelope.error?.message === "string"
367
+ ? envelope.error.message
368
+ : `JB Center request failed (${response.status})`;
369
+ const retryAfterHeader = response.headers.get("retry-after");
370
+ const retryAfter = Number(retryAfterHeader);
371
+ throw new JBCenterRequestError(message, response.status, code, response.headers.get("x-request-id") ?? undefined, retryAfterHeader !== null &&
372
+ Number.isFinite(retryAfter) &&
373
+ retryAfter >= 0
374
+ ? retryAfter
375
+ : undefined);
376
+ }
377
+ if (!validate(body)) {
378
+ throw new JBCenterRequestError("JB Center returned an invalid response", 502, undefined, response.headers.get("x-request-id") ?? undefined);
379
+ }
380
+ return body;
381
+ }
382
+ catch (error) {
383
+ if (controller.signal.reason === timeoutReason)
384
+ throw timeoutReason;
385
+ throw error;
386
+ }
387
+ finally {
388
+ clearTimeout(timeout);
389
+ options.signal?.removeEventListener("abort", abort);
390
+ }
391
+ }
392
+ }
393
+ export function createJBCenterClient(options = {}) {
394
+ return new JBCenterClient(options);
395
+ }
396
+ export function createJBCenterRpcProvider(chainId, options = {}) {
397
+ return new JBCenterClient(options).rpcProvider(chainId);
398
+ }
399
+ //# sourceMappingURL=jbcenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jbcenter.js","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bananapus/nana-sdk-core",
3
- "version": "2.0.0",
3
+ "version": "2.2.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "repository": {
@@ -31,6 +31,11 @@
31
31
  "import": "./dist/esm/chains.js",
32
32
  "require": "./dist/cjs/chains.js"
33
33
  },
34
+ "./jbcenter": {
35
+ "types": "./dist/esm/jbcenter.d.ts",
36
+ "import": "./dist/esm/jbcenter.js",
37
+ "require": "./dist/cjs/jbcenter.js"
38
+ },
34
39
  "./v6": {
35
40
  "types": "./dist/esm/v6/index.d.ts",
36
41
  "import": "./dist/esm/v6/index.js",