@bananapus/nana-sdk-core 2.7.0 → 2.9.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.
- package/dist/cjs/jbcenter/decode.d.ts +19 -0
- package/dist/cjs/jbcenter/decode.d.ts.map +1 -1
- package/dist/cjs/jbcenter/decode.js +121 -0
- package/dist/cjs/jbcenter/decode.js.map +1 -1
- package/dist/cjs/jbcenter/publish.d.ts +26 -0
- package/dist/cjs/jbcenter/publish.d.ts.map +1 -0
- package/dist/cjs/jbcenter/publish.js +86 -0
- package/dist/cjs/jbcenter/publish.js.map +1 -0
- package/dist/cjs/jbcenter/refusal.d.ts +12 -0
- package/dist/cjs/jbcenter/refusal.d.ts.map +1 -0
- package/dist/cjs/jbcenter/refusal.js +37 -0
- package/dist/cjs/jbcenter/refusal.js.map +1 -0
- package/dist/cjs/jbcenter/setupCalls.d.ts +26 -0
- package/dist/cjs/jbcenter/setupCalls.d.ts.map +1 -0
- package/dist/cjs/jbcenter/setupCalls.js +57 -0
- package/dist/cjs/jbcenter/setupCalls.js.map +1 -0
- package/dist/cjs/jbcenter.d.ts +10 -0
- package/dist/cjs/jbcenter.d.ts.map +1 -1
- package/dist/cjs/jbcenter.js +19 -7
- package/dist/cjs/jbcenter.js.map +1 -1
- package/dist/cjs/safe.d.ts +8 -0
- package/dist/cjs/safe.d.ts.map +1 -1
- package/dist/cjs/safe.js +9 -1
- package/dist/cjs/safe.js.map +1 -1
- package/dist/esm/jbcenter/decode.d.ts +19 -0
- package/dist/esm/jbcenter/decode.d.ts.map +1 -1
- package/dist/esm/jbcenter/decode.js +122 -1
- package/dist/esm/jbcenter/decode.js.map +1 -1
- package/dist/esm/jbcenter/publish.d.ts +26 -0
- package/dist/esm/jbcenter/publish.d.ts.map +1 -0
- package/dist/esm/jbcenter/publish.js +81 -0
- package/dist/esm/jbcenter/publish.js.map +1 -0
- package/dist/esm/jbcenter/refusal.d.ts +12 -0
- package/dist/esm/jbcenter/refusal.d.ts.map +1 -0
- package/dist/esm/jbcenter/refusal.js +34 -0
- package/dist/esm/jbcenter/refusal.js.map +1 -0
- package/dist/esm/jbcenter/setupCalls.d.ts +26 -0
- package/dist/esm/jbcenter/setupCalls.d.ts.map +1 -0
- package/dist/esm/jbcenter/setupCalls.js +52 -0
- package/dist/esm/jbcenter/setupCalls.js.map +1 -0
- package/dist/esm/jbcenter.d.ts +10 -0
- package/dist/esm/jbcenter.d.ts.map +1 -1
- package/dist/esm/jbcenter.js +14 -6
- package/dist/esm/jbcenter.js.map +1 -1
- package/dist/esm/safe.d.ts +8 -0
- package/dist/esm/safe.d.ts.map +1 -1
- package/dist/esm/safe.js +8 -0
- package/dist/esm/safe.js.map +1 -1
- package/package.json +1 -1
|
@@ -34,6 +34,25 @@ export type JBCenterDecodedLaunch = {
|
|
|
34
34
|
stages: REVConfig["stageConfigurations"];
|
|
35
35
|
description: REVConfig["description"];
|
|
36
36
|
accountingContexts: readonly JBAccountingContext[];
|
|
37
|
+
} | {
|
|
38
|
+
flavor: "homerun-fund";
|
|
39
|
+
owner: Address;
|
|
40
|
+
projectUri: string;
|
|
41
|
+
tokenName: string;
|
|
42
|
+
ticker: string;
|
|
43
|
+
to: Address;
|
|
44
|
+
mustStartAtOrAfter: number;
|
|
45
|
+
salt: Hex;
|
|
46
|
+
peerSuckerDeployers: readonly Address[];
|
|
47
|
+
} | {
|
|
48
|
+
flavor: "safe-create";
|
|
49
|
+
to: Address;
|
|
50
|
+
singleton: Address;
|
|
51
|
+
saltNonce: Hex;
|
|
52
|
+
owners: readonly Address[];
|
|
53
|
+
threshold: number;
|
|
54
|
+
fallbackHandler: Address;
|
|
55
|
+
address: Address;
|
|
37
56
|
} | {
|
|
38
57
|
flavor: "unknown";
|
|
39
58
|
to: Address;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../src/jbcenter/decode.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../../src/jbcenter/decode.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,OAAO,EACZ,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;AAQd,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAW7D,MAAM,MAAM,qBAAqB,GAC7B;IACE,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,sBAAsB,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,sBAAsB,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,CAAC;CACX,GACD;IACE,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,SAAS,eAAe,EAAE,CAAC;IAClD,sBAAsB,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,GACD;IACE,MAAM,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACzC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACtC,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACpD,GACD;IACE,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,kBAAkB,EAAE,MAAM,CAAC;IAC3B,IAAI,EAAE,GAAG,CAAC;IACV,mBAAmB,EAAE,SAAS,OAAO,EAAE,CAAC;CACzC,GACD;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB,GACD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,CAAC;AA2StD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,GAC3B,qBAAqB,CAMvB"}
|
|
@@ -4,6 +4,7 @@ exports.decodeDeploymentCall = decodeDeploymentCall;
|
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
5
|
const juicebox_js_1 = require("../generated/juicebox.js");
|
|
6
6
|
const types_js_1 = require("../v6/types.js");
|
|
7
|
+
const safe_js_1 = require("../safe.js");
|
|
7
8
|
/** The address of `contract` on `chainId`, or null when it isn't deployed there. */
|
|
8
9
|
function addressFor(contract, chainId) {
|
|
9
10
|
try {
|
|
@@ -131,11 +132,131 @@ function decodeRevnetDeploy(call) {
|
|
|
131
132
|
return null;
|
|
132
133
|
}
|
|
133
134
|
}
|
|
135
|
+
/** Source: HomerunDeployer.sol. Carried here because Homerun deploys its own
|
|
136
|
+
* per-chain deployer, which the V6 address registry does not name. */
|
|
137
|
+
const homerunLaunchFundAbi = (0, viem_1.parseAbi)([
|
|
138
|
+
"function launchFundFor(address owner, string projectUri, string name, string ticker, uint48 mustStartAtOrAfter, bytes32 salt, address[] peerSuckerDeployers) payable returns (uint256 projectId, address token)",
|
|
139
|
+
]);
|
|
140
|
+
/** HomerunDeployer's address on each chain it is deployed to: one salt across
|
|
141
|
+
* the mainnets, another across the testnets. Source: Homerun's
|
|
142
|
+
* `deployments/<chain>/HomerunDeployer.json`. */
|
|
143
|
+
const HOMERUN_DEPLOYER_ADDRESSES = {
|
|
144
|
+
1: "0xac9250654ea223513ffee25fdb647dc016873905",
|
|
145
|
+
10: "0xac9250654ea223513ffee25fdb647dc016873905",
|
|
146
|
+
8453: "0xac9250654ea223513ffee25fdb647dc016873905",
|
|
147
|
+
42161: "0xac9250654ea223513ffee25fdb647dc016873905",
|
|
148
|
+
11155111: "0xe944fe96765450877f95cc36aa36ec72b4388721",
|
|
149
|
+
11155420: "0xe944fe96765450877f95cc36aa36ec72b4388721",
|
|
150
|
+
84532: "0xe944fe96765450877f95cc36aa36ec72b4388721",
|
|
151
|
+
421614: "0xe944fe96765450877f95cc36aa36ec72b4388721",
|
|
152
|
+
};
|
|
153
|
+
function decodeHomerunFundLaunch(call) {
|
|
154
|
+
try {
|
|
155
|
+
const address = HOMERUN_DEPLOYER_ADDRESSES[call.chainId];
|
|
156
|
+
if (!address || !(0, viem_1.isAddressEqual)(address, call.to))
|
|
157
|
+
return null;
|
|
158
|
+
const decoded = (0, viem_1.decodeFunctionData)({
|
|
159
|
+
abi: homerunLaunchFundAbi,
|
|
160
|
+
data: call.data,
|
|
161
|
+
});
|
|
162
|
+
const [owner, projectUri, tokenName, ticker, mustStartAtOrAfter, salt, peerSuckerDeployers,] = decoded.args;
|
|
163
|
+
return {
|
|
164
|
+
flavor: "homerun-fund",
|
|
165
|
+
owner,
|
|
166
|
+
projectUri,
|
|
167
|
+
tokenName,
|
|
168
|
+
ticker,
|
|
169
|
+
to: call.to,
|
|
170
|
+
mustStartAtOrAfter,
|
|
171
|
+
salt,
|
|
172
|
+
peerSuckerDeployers,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/** JB Center's ceiling on the owners one intent's Safe may carry. */
|
|
180
|
+
const MAX_INTENT_SAFE_OWNERS = 20;
|
|
181
|
+
/**
|
|
182
|
+
* A setup call: `createProxyWithNonce` to the canonical Safe factory, for the
|
|
183
|
+
* canonical singleton and fallback handler, with no delegatecall hook and no
|
|
184
|
+
* setup payment. The address is the one the factory would compute, derived
|
|
185
|
+
* from the pinned proxy creation code, so nothing here reaches a chain.
|
|
186
|
+
*/
|
|
187
|
+
function decodeSafeCreate(call) {
|
|
188
|
+
try {
|
|
189
|
+
if (!(0, viem_1.isAddressEqual)(safe_js_1.SAFE_FACTORY, call.to))
|
|
190
|
+
return null;
|
|
191
|
+
const create = (0, viem_1.decodeFunctionData)({
|
|
192
|
+
abi: safe_js_1.SAFE_CREATE_ABI,
|
|
193
|
+
data: call.data,
|
|
194
|
+
});
|
|
195
|
+
if (create.functionName !== "createProxyWithNonce")
|
|
196
|
+
return null;
|
|
197
|
+
const [singleton, initializer, nonce] = create.args;
|
|
198
|
+
if (!(0, viem_1.isAddressEqual)(singleton, safe_js_1.SAFE_SINGLETON))
|
|
199
|
+
return null;
|
|
200
|
+
const setup = (0, viem_1.decodeFunctionData)({
|
|
201
|
+
abi: safe_js_1.SAFE_CREATE_ABI,
|
|
202
|
+
data: initializer,
|
|
203
|
+
});
|
|
204
|
+
if (setup.functionName !== "setup")
|
|
205
|
+
return null;
|
|
206
|
+
const [owners, threshold, to, data, fallbackHandler, paymentToken, payment, paymentReceiver,] = setup.args;
|
|
207
|
+
if (owners.length < 1 ||
|
|
208
|
+
owners.length > MAX_INTENT_SAFE_OWNERS ||
|
|
209
|
+
owners.some((owner) => BigInt(owner) === 0n) ||
|
|
210
|
+
new Set(owners.map((owner) => owner.toLowerCase())).size !==
|
|
211
|
+
owners.length ||
|
|
212
|
+
threshold < 1n ||
|
|
213
|
+
threshold > BigInt(owners.length) ||
|
|
214
|
+
!(0, viem_1.isAddressEqual)(to, viem_1.zeroAddress) ||
|
|
215
|
+
data !== "0x" ||
|
|
216
|
+
!(0, viem_1.isAddressEqual)(fallbackHandler, safe_js_1.SAFE_FALLBACK) ||
|
|
217
|
+
!(0, viem_1.isAddressEqual)(paymentToken, viem_1.zeroAddress) ||
|
|
218
|
+
payment !== 0n ||
|
|
219
|
+
!(0, viem_1.isAddressEqual)(paymentReceiver, viem_1.zeroAddress)) {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
const plan = {
|
|
223
|
+
owners: [...owners],
|
|
224
|
+
threshold: Number(threshold),
|
|
225
|
+
saltNonce: (0, viem_1.toHex)(nonce, { size: 32 }),
|
|
226
|
+
proxyCreationCode: safe_js_1.SAFE_PROXY_CREATION_CODE,
|
|
227
|
+
};
|
|
228
|
+
// Only the canonical encoding predicts the address the factory computes,
|
|
229
|
+
// so the call has to be exactly what this plan re-encodes to. This also
|
|
230
|
+
// refuses the sentinel owner, which `buildSafeInitializer` rejects.
|
|
231
|
+
if ((0, viem_1.encodeFunctionData)({
|
|
232
|
+
abi: safe_js_1.SAFE_CREATE_ABI,
|
|
233
|
+
functionName: "createProxyWithNonce",
|
|
234
|
+
args: [safe_js_1.SAFE_SINGLETON, (0, safe_js_1.buildSafeInitializer)(plan), nonce],
|
|
235
|
+
}).toLowerCase() !== call.data.toLowerCase()) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
flavor: "safe-create",
|
|
240
|
+
to: call.to,
|
|
241
|
+
singleton,
|
|
242
|
+
saltNonce: plan.saltNonce,
|
|
243
|
+
owners: plan.owners,
|
|
244
|
+
threshold: plan.threshold,
|
|
245
|
+
fallbackHandler,
|
|
246
|
+
address: (0, safe_js_1.predictSafeAddress)(plan),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
134
253
|
const DECODERS = [
|
|
254
|
+
decodeSafeCreate,
|
|
135
255
|
decodeProjectLaunch,
|
|
136
256
|
decodeProject721Launch,
|
|
137
257
|
decodeOmnichainLaunch,
|
|
138
258
|
decodeRevnetDeploy,
|
|
259
|
+
decodeHomerunFundLaunch,
|
|
139
260
|
];
|
|
140
261
|
/**
|
|
141
262
|
* Recognize a frozen `{ chainId, to, data }` deployment call (as produced by
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/jbcenter/decode.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/jbcenter/decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
import type { JBCenterClient, JBCenterIntent, JBCenterIntentInput, JBCenterJsonObject, JBCenterRequestOptions } from "../jbcenter.js";
|
|
3
|
+
/** JB Center prepared something other than the intent the caller built. */
|
|
4
|
+
export declare class JBCenterIntentMismatchError extends Error {
|
|
5
|
+
readonly reason: "envelope" | "message";
|
|
6
|
+
constructor(reason: "envelope" | "message");
|
|
7
|
+
}
|
|
8
|
+
export type PublishSignedIntentOptions = {
|
|
9
|
+
/** The address whose signature `sign` returns. */
|
|
10
|
+
publisher: Address;
|
|
11
|
+
/**
|
|
12
|
+
* The whole message the publisher may be asked to sign for a content hash.
|
|
13
|
+
* Defaults to JB Center's own signing message.
|
|
14
|
+
*/
|
|
15
|
+
expectMessage?: (contentHash: Hex) => string;
|
|
16
|
+
request?: JBCenterRequestOptions;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Publish an intent, signing only JB Center's prepared message and only once
|
|
20
|
+
* it has been checked: the prepared envelope must carry the same values as
|
|
21
|
+
* the intent built here, and the message must be the whole signing message
|
|
22
|
+
* for the content hash of what is being signed. `sign` is the caller's own
|
|
23
|
+
* signer; this package never reaches a wallet itself.
|
|
24
|
+
*/
|
|
25
|
+
export declare function publishSignedIntent<TJb extends JBCenterJsonObject>(client: JBCenterClient, intent: JBCenterIntentInput<TJb>, sign: (message: string) => Promise<Hex>, options: PublishSignedIntentOptions): Promise<JBCenterIntent<TJb>>;
|
|
26
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/jbcenter/publish.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AA+DxB,2EAA2E;AAC3E,qBAAa,2BAA4B,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS;gBAA9B,MAAM,EAAE,UAAU,GAAG,SAAS;CAQpD;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,KAAK,MAAM,CAAC;IAC7C,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,SAAS,kBAAkB,EACtE,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAChC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,EACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAmB9B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JBCenterIntentMismatchError = void 0;
|
|
4
|
+
exports.publishSignedIntent = publishSignedIntent;
|
|
5
|
+
/**
|
|
6
|
+
* Key order and the casing of addresses and calldata are JB Center's to
|
|
7
|
+
* choose; the values are not. Sorting keys and lowercasing hex long enough to
|
|
8
|
+
* be an address or calldata puts both sides in one form so the comparison
|
|
9
|
+
* reads values only. Shorter hex-looking text is a value like any other and is
|
|
10
|
+
* compared as written.
|
|
11
|
+
*/
|
|
12
|
+
function canonical(value) {
|
|
13
|
+
return JSON.stringify(value, (_key, item) => {
|
|
14
|
+
if (typeof item === "string") {
|
|
15
|
+
return /^0x[0-9a-fA-F]{40,}$/u.test(item) ? item.toLowerCase() : item;
|
|
16
|
+
}
|
|
17
|
+
if (!item || typeof item !== "object" || Array.isArray(item))
|
|
18
|
+
return item;
|
|
19
|
+
return Object.fromEntries(Object.entries(item).sort(([a], [b]) => a < b ? -1 : 1));
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The shape JB Center normalizes an envelope into before it hashes: unique
|
|
24
|
+
* chain ids in ascending order, deployment calls in the same order, and
|
|
25
|
+
* `format` and `deploymentVersion` without surrounding space.
|
|
26
|
+
*/
|
|
27
|
+
function normalized(envelope) {
|
|
28
|
+
return {
|
|
29
|
+
...envelope,
|
|
30
|
+
format: envelope.format.trim(),
|
|
31
|
+
deploymentVersion: envelope.deploymentVersion.trim(),
|
|
32
|
+
chainIds: [...new Set(envelope.chainIds)].sort((a, b) => a - b),
|
|
33
|
+
deploymentCalls: [...envelope.deploymentCalls].sort((a, b) => a.chainId - b.chainId),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** A copy of its own, so what is checked is what is published even if the
|
|
37
|
+
* caller keeps writing to its object while the signer is open. */
|
|
38
|
+
function snapshot(envelope) {
|
|
39
|
+
return JSON.parse(JSON.stringify(envelope));
|
|
40
|
+
}
|
|
41
|
+
/** JB Center's own signing message, word for word. */
|
|
42
|
+
function centerSigningMessage(contentHash) {
|
|
43
|
+
return `Juice Central project intent\nVersion: 1\nContent hash: ${contentHash}`;
|
|
44
|
+
}
|
|
45
|
+
/** The casing of the hash JB Center echoes is its to choose; every other
|
|
46
|
+
* character of the message is not. */
|
|
47
|
+
function withLowercaseHash(message, contentHash) {
|
|
48
|
+
const at = message.toLowerCase().indexOf(contentHash);
|
|
49
|
+
if (at === -1)
|
|
50
|
+
return message;
|
|
51
|
+
return `${message.slice(0, at)}${contentHash}${message.slice(at + contentHash.length)}`;
|
|
52
|
+
}
|
|
53
|
+
/** JB Center prepared something other than the intent the caller built. */
|
|
54
|
+
class JBCenterIntentMismatchError extends Error {
|
|
55
|
+
constructor(reason) {
|
|
56
|
+
super(reason === "envelope"
|
|
57
|
+
? "JB Center prepared a different intent than the one built here"
|
|
58
|
+
: "JB Center's prepared message is not Center's signing message for that content hash");
|
|
59
|
+
this.reason = reason;
|
|
60
|
+
this.name = "JBCenterIntentMismatchError";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.JBCenterIntentMismatchError = JBCenterIntentMismatchError;
|
|
64
|
+
/**
|
|
65
|
+
* Publish an intent, signing only JB Center's prepared message and only once
|
|
66
|
+
* it has been checked: the prepared envelope must carry the same values as
|
|
67
|
+
* the intent built here, and the message must be the whole signing message
|
|
68
|
+
* for the content hash of what is being signed. `sign` is the caller's own
|
|
69
|
+
* signer; this package never reaches a wallet itself.
|
|
70
|
+
*/
|
|
71
|
+
async function publishSignedIntent(client, intent, sign, options) {
|
|
72
|
+
const checked = snapshot(normalized(intent));
|
|
73
|
+
const prepared = await client.prepareIntent(checked, options.request);
|
|
74
|
+
if (canonical(normalized(prepared.envelope)) !== canonical(checked)) {
|
|
75
|
+
throw new JBCenterIntentMismatchError("envelope");
|
|
76
|
+
}
|
|
77
|
+
const contentHash = prepared.contentHash.toLowerCase();
|
|
78
|
+
const expected = (options.expectMessage ?? centerSigningMessage)(contentHash);
|
|
79
|
+
if (withLowercaseHash(prepared.message, contentHash) !==
|
|
80
|
+
withLowercaseHash(expected, contentHash)) {
|
|
81
|
+
throw new JBCenterIntentMismatchError("message");
|
|
82
|
+
}
|
|
83
|
+
const signature = await sign(prepared.message);
|
|
84
|
+
return client.publishIntent({ ...checked, publisher: options.publisher, signature }, options.request);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/jbcenter/publish.ts"],"names":[],"mappings":";;;AAoGA,kDAwBC;AAnHD;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAa,EAAE,EAAE;QACnD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1E,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAChE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACf,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CACjB,QAAkC;IAElC,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;QAC9B,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE;QACpD,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/D,eAAe,EAAE,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAChC;KACF,CAAC;AACJ,CAAC;AAED;kEACkE;AAClE,SAAS,QAAQ,CACf,QAAkC;IAElC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAA6B,CAAC;AAC1E,CAAC;AAED,sDAAsD;AACtD,SAAS,oBAAoB,CAAC,WAAgB;IAC5C,OAAO,2DAA2D,WAAW,EAAE,CAAC;AAClF,CAAC;AAED;sCACsC;AACtC,SAAS,iBAAiB,CAAC,OAAe,EAAE,WAAgB;IAC1D,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED,2EAA2E;AAC3E,MAAa,2BAA4B,SAAQ,KAAK;IACpD,YAAqB,MAA8B;QACjD,KAAK,CACH,MAAM,KAAK,UAAU;YACnB,CAAC,CAAC,+DAA+D;YACjE,CAAC,CAAC,oFAAoF,CACzF,CAAC;QALiB,WAAM,GAAN,MAAM,CAAwB;QAMjD,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AATD,kEASC;AAaD;;;;;;GAMG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAAsB,EACtB,MAAgC,EAChC,IAAuC,EACvC,OAAmC;IAEnC,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,2BAA2B,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAS,CAAC;IAC9D,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,oBAAoB,CAAC,CAAC,WAAW,CAAC,CAAC;IAC9E,IACE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;QAChD,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,EACxC,CAAC;QACD,MAAM,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,aAAa,CACzB,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EACvD,OAAO,CAAC,OAAO,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type JBCenterRefusalCode = "sponsor_quota" | "sponsor_budget" | "unavailable" | "rate_limited";
|
|
2
|
+
export type JBCenterRefusal = {
|
|
3
|
+
code: JBCenterRefusalCode;
|
|
4
|
+
message: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* The sentence to show when JB Center declines to sponsor a deploy, or `null`
|
|
8
|
+
* when the failure is something else and the caller should keep its own
|
|
9
|
+
* wording.
|
|
10
|
+
*/
|
|
11
|
+
export declare function describeCenterRefusal(error: unknown): JBCenterRefusal | null;
|
|
12
|
+
//# sourceMappingURL=refusal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../../../src/jbcenter/refusal.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,cAAc,CAAC;AAEnB,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAgBF;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAY5E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.describeCenterRefusal = describeCenterRefusal;
|
|
4
|
+
// `jbcenter.ts` re-exports this module, so the two form an import cycle. Keep
|
|
5
|
+
// the `JBCenterRequestError` read inside the function body: a top-level read
|
|
6
|
+
// would resolve before `jbcenter.ts` finishes evaluating under CJS.
|
|
7
|
+
const jbcenter_js_1 = require("../jbcenter.js");
|
|
8
|
+
/** One sentence per refusal, so no provider or gateway text reaches a reader. */
|
|
9
|
+
const MESSAGES = {
|
|
10
|
+
sponsor_quota: "Center's daily sponsored-deploy quota is used up. Try again tomorrow.",
|
|
11
|
+
sponsor_budget: "Center's daily sponsorship budget is spent. Try again tomorrow.",
|
|
12
|
+
unavailable: "Sponsored deploys are paused right now. Try again shortly.",
|
|
13
|
+
rate_limited: "Center is rate limiting sponsored deploys. Try again shortly.",
|
|
14
|
+
};
|
|
15
|
+
function refusal(code) {
|
|
16
|
+
return { code, message: MESSAGES[code] };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The sentence to show when JB Center declines to sponsor a deploy, or `null`
|
|
20
|
+
* when the failure is something else and the caller should keep its own
|
|
21
|
+
* wording.
|
|
22
|
+
*/
|
|
23
|
+
function describeCenterRefusal(error) {
|
|
24
|
+
if (!(error instanceof jbcenter_js_1.JBCenterRequestError))
|
|
25
|
+
return null;
|
|
26
|
+
if (error.code === "sponsor_quota" ||
|
|
27
|
+
error.code === "sponsor_budget" ||
|
|
28
|
+
error.code === "unavailable") {
|
|
29
|
+
return refusal(error.code);
|
|
30
|
+
}
|
|
31
|
+
if (error.status === 429)
|
|
32
|
+
return refusal("rate_limited");
|
|
33
|
+
if (error.status === 503)
|
|
34
|
+
return refusal("unavailable");
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=refusal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.js","sourceRoot":"","sources":["../../../src/jbcenter/refusal.ts"],"names":[],"mappings":";;AAmCA,sDAYC;AA/CD,8EAA8E;AAC9E,6EAA6E;AAC7E,oEAAoE;AACpE,gDAAsD;AAatD,iFAAiF;AACjF,MAAM,QAAQ,GAAwC;IACpD,aAAa,EACX,uEAAuE;IACzE,cAAc,EACZ,iEAAiE;IACnE,WAAW,EAAE,4DAA4D;IACzE,YAAY,EAAE,+DAA+D;CAC9E,CAAC;AAEF,SAAS,OAAO,CAAC,IAAyB;IACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC,CAAC,KAAK,YAAY,kCAAoB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,IACE,KAAK,CAAC,IAAI,KAAK,eAAe;QAC9B,KAAK,CAAC,IAAI,KAAK,gBAAgB;QAC/B,KAAK,CAAC,IAAI,KAAK,aAAa,EAC5B,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { JBCenterDeploymentCall, JBCenterIntent, JBCenterJsonObject } from "../jbcenter.js";
|
|
2
|
+
import type { JBCenterDecodedLaunch } from "./decode.js";
|
|
3
|
+
/** An intent's `deploymentCalls` per chain, each chain's calls in order. */
|
|
4
|
+
export declare function groupDeploymentCalls(calls: readonly JBCenterDeploymentCall[]): Map<number, JBCenterDeploymentCall[]>;
|
|
5
|
+
/**
|
|
6
|
+
* JB Center's rule, mirrored: a chain carries 1 to 4 calls, the last call for
|
|
7
|
+
* a chain is its launch, and every call before it creates a Safe through the
|
|
8
|
+
* canonical factory. Whether the chains named match the calls is the
|
|
9
|
+
* envelope's own check.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isValidDeploymentCalls(calls: readonly JBCenterDeploymentCall[]): boolean;
|
|
12
|
+
/** One of an intent's calls, with the launch or Safe creation it carries. */
|
|
13
|
+
export type JBCenterDecodedCall = JBCenterDeploymentCall & {
|
|
14
|
+
decoded: JBCenterDecodedLaunch;
|
|
15
|
+
};
|
|
16
|
+
export type JBCenterChainCalls = {
|
|
17
|
+
setup: JBCenterDecodedCall[];
|
|
18
|
+
launch: JBCenterDecodedCall;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* An intent's calls per chain, decoded, so a client renders "creates this
|
|
22
|
+
* Safe, then launches" without repeating the rule: the last call for a chain
|
|
23
|
+
* is its launch and every call before it is a setup call.
|
|
24
|
+
*/
|
|
25
|
+
export declare function intentCalls(intent: JBCenterIntent<JBCenterJsonObject>): Map<number, JBCenterChainCalls>;
|
|
26
|
+
//# sourceMappingURL=setupCalls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupCalls.d.ts","sourceRoot":"","sources":["../../../src/jbcenter/setupCalls.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,sBAAsB,EACtB,cAAc,EACd,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAKzD,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,sBAAsB,EAAE,GACvC,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAUvC;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,sBAAsB,EAAE,GACvC,OAAO,CAST;AAED,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,GAAG;IACzD,OAAO,EAAE,qBAAqB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,cAAc,CAAC,kBAAkB,CAAC,GACzC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAiBjC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.groupDeploymentCalls = groupDeploymentCalls;
|
|
4
|
+
exports.isValidDeploymentCalls = isValidDeploymentCalls;
|
|
5
|
+
exports.intentCalls = intentCalls;
|
|
6
|
+
const decode_js_1 = require("./decode.js");
|
|
7
|
+
/** JB Center's ceiling: one launch per chain, with up to three setup calls. */
|
|
8
|
+
const MAX_CALLS_PER_CHAIN = 4;
|
|
9
|
+
/** An intent's `deploymentCalls` per chain, each chain's calls in order. */
|
|
10
|
+
function groupDeploymentCalls(calls) {
|
|
11
|
+
const groups = new Map();
|
|
12
|
+
for (const call of calls) {
|
|
13
|
+
const group = groups.get(call.chainId);
|
|
14
|
+
if (group)
|
|
15
|
+
group.push(call);
|
|
16
|
+
else
|
|
17
|
+
groups.set(call.chainId, [call]);
|
|
18
|
+
}
|
|
19
|
+
return groups;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* JB Center's rule, mirrored: a chain carries 1 to 4 calls, the last call for
|
|
23
|
+
* a chain is its launch, and every call before it creates a Safe through the
|
|
24
|
+
* canonical factory. Whether the chains named match the calls is the
|
|
25
|
+
* envelope's own check.
|
|
26
|
+
*/
|
|
27
|
+
function isValidDeploymentCalls(calls) {
|
|
28
|
+
for (const group of groupDeploymentCalls(calls).values()) {
|
|
29
|
+
if (group.length > MAX_CALLS_PER_CHAIN)
|
|
30
|
+
return false;
|
|
31
|
+
for (const call of group.slice(0, -1)) {
|
|
32
|
+
if ((0, decode_js_1.decodeDeploymentCall)(call).flavor !== "safe-create")
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* An intent's calls per chain, decoded, so a client renders "creates this
|
|
40
|
+
* Safe, then launches" without repeating the rule: the last call for a chain
|
|
41
|
+
* is its launch and every call before it is a setup call.
|
|
42
|
+
*/
|
|
43
|
+
function intentCalls(intent) {
|
|
44
|
+
const result = new Map();
|
|
45
|
+
for (const [chainId, calls] of groupDeploymentCalls(intent.envelope.deploymentCalls)) {
|
|
46
|
+
const decoded = calls.map((call) => ({
|
|
47
|
+
...call,
|
|
48
|
+
decoded: (0, decode_js_1.decodeDeploymentCall)(call),
|
|
49
|
+
}));
|
|
50
|
+
result.set(chainId, {
|
|
51
|
+
setup: decoded.slice(0, -1),
|
|
52
|
+
launch: decoded[decoded.length - 1],
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=setupCalls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupCalls.js","sourceRoot":"","sources":["../../../src/jbcenter/setupCalls.ts"],"names":[],"mappings":";;AAeA,oDAYC;AAQD,wDAWC;AAiBD,kCAmBC;AA1ED,2CAAmD;AAGnD,+EAA+E;AAC/E,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,4EAA4E;AAC5E,SAAgB,oBAAoB,CAClC,KAAwC;IAExC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoC,CAAC;IAE3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACvB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CACpC,KAAwC;IAExC,KAAK,MAAM,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACzD,IAAI,KAAK,CAAC,MAAM,GAAG,mBAAmB;YAAE,OAAO,KAAK,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,IAAI,IAAA,gCAAoB,EAAC,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa;gBAAE,OAAO,KAAK,CAAC;QACxE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAYD;;;;GAIG;AACH,SAAgB,WAAW,CACzB,MAA0C;IAE1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;IAErD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,oBAAoB,CACjD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAChC,EAAE,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,IAAI;YACP,OAAO,EAAE,IAAA,gCAAoB,EAAC,IAAI,CAAC;SACpC,CAAC,CAAC,CAAC;QACJ,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/cjs/jbcenter.d.ts
CHANGED
|
@@ -28,10 +28,16 @@ export type JBCenterDeploymentCall = {
|
|
|
28
28
|
};
|
|
29
29
|
export type { JBCenterDecodedLaunch } from "./jbcenter/decode.js";
|
|
30
30
|
export { decodeDeploymentCall } from "./jbcenter/decode.js";
|
|
31
|
+
export type { JBCenterChainCalls, JBCenterDecodedCall, } from "./jbcenter/setupCalls.js";
|
|
32
|
+
export { intentCalls } from "./jbcenter/setupCalls.js";
|
|
31
33
|
export type { JBCenterIntentRow } from "./jbcenter/merge.js";
|
|
32
34
|
export { deployedChains, intentPath, intentRow, isFullyDeployed, mergeSearch, } from "./jbcenter/merge.js";
|
|
33
35
|
export type { EnsureDeployedOptions, EnsureDeployedStep, } from "./jbcenter/ensureDeployed.js";
|
|
34
36
|
export { EnsureDeployedError, ensureDeployed, } from "./jbcenter/ensureDeployed.js";
|
|
37
|
+
export type { PublishSignedIntentOptions } from "./jbcenter/publish.js";
|
|
38
|
+
export { JBCenterIntentMismatchError, publishSignedIntent, } from "./jbcenter/publish.js";
|
|
39
|
+
export type { JBCenterRefusal, JBCenterRefusalCode, } from "./jbcenter/refusal.js";
|
|
40
|
+
export { describeCenterRefusal } from "./jbcenter/refusal.js";
|
|
35
41
|
export type JBCenterContractCall<TAbi extends Abi = Abi, TFunctionName extends ContractFunctionName<TAbi, "payable" | "nonpayable"> = ContractFunctionName<TAbi, "payable" | "nonpayable">> = {
|
|
36
42
|
chainId: number;
|
|
37
43
|
address: Address;
|
|
@@ -112,6 +118,10 @@ export type JBCenterSearchParams = {
|
|
|
112
118
|
query?: string;
|
|
113
119
|
limit?: number;
|
|
114
120
|
cursor?: string;
|
|
121
|
+
/** The intent's `jb.owner`, matched without regard to checksum casing. */
|
|
122
|
+
owner?: Address;
|
|
123
|
+
/** The address that signed the intent, matched the same way. */
|
|
124
|
+
publisher?: Address;
|
|
115
125
|
};
|
|
116
126
|
export type JBCenterPin = {
|
|
117
127
|
cid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jbcenter.d.ts","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"jbcenter.d.ts","sourceRoot":"","sources":["../../src/jbcenter.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/jbcenter.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JBCenterClient = exports.JBCenterRpcError = exports.JBCenterTimeoutError = exports.JBCenterRequestError = exports.JBCENTER_SPONSORED_CHAIN_IDS = exports.ensureDeployed = exports.EnsureDeployedError = exports.mergeSearch = exports.isFullyDeployed = exports.intentRow = exports.intentPath = exports.deployedChains = exports.decodeDeploymentCall = exports.JBCENTER_RPC_METHODS = exports.MAX_JBCENTER_RESPONSE_BYTES = exports.JBCENTER_PIN_TIMEOUT_MS = exports.JBCENTER_DEPLOYMENT_TIMEOUT_MS = exports.JBCENTER_REQUEST_TIMEOUT_MS = exports.JBCENTER_DEFAULT_URL = void 0;
|
|
3
|
+
exports.JBCenterClient = exports.JBCenterRpcError = exports.JBCenterTimeoutError = exports.JBCenterRequestError = exports.JBCENTER_SPONSORED_CHAIN_IDS = exports.describeCenterRefusal = exports.publishSignedIntent = exports.JBCenterIntentMismatchError = exports.ensureDeployed = exports.EnsureDeployedError = exports.mergeSearch = exports.isFullyDeployed = exports.intentRow = exports.intentPath = exports.deployedChains = exports.intentCalls = exports.decodeDeploymentCall = exports.JBCENTER_RPC_METHODS = exports.MAX_JBCENTER_RESPONSE_BYTES = exports.JBCENTER_PIN_TIMEOUT_MS = exports.JBCENTER_DEPLOYMENT_TIMEOUT_MS = exports.JBCENTER_REQUEST_TIMEOUT_MS = exports.JBCENTER_DEFAULT_URL = void 0;
|
|
4
4
|
exports.createJBCenterDeploymentCall = createJBCenterDeploymentCall;
|
|
5
5
|
exports.isSponsorable = isSponsorable;
|
|
6
6
|
exports.createJBCenterClient = createJBCenterClient;
|
|
7
7
|
exports.createJBCenterRpcProvider = createJBCenterRpcProvider;
|
|
8
8
|
const viem_1 = require("viem");
|
|
9
|
+
const setupCalls_js_1 = require("./jbcenter/setupCalls.js");
|
|
9
10
|
exports.JBCENTER_DEFAULT_URL = "https://juicebox.center";
|
|
10
11
|
exports.JBCENTER_REQUEST_TIMEOUT_MS = 15_000;
|
|
11
12
|
exports.JBCENTER_DEPLOYMENT_TIMEOUT_MS = 45_000;
|
|
@@ -42,6 +43,8 @@ exports.JBCENTER_RPC_METHODS = [
|
|
|
42
43
|
];
|
|
43
44
|
var decode_js_1 = require("./jbcenter/decode.js");
|
|
44
45
|
Object.defineProperty(exports, "decodeDeploymentCall", { enumerable: true, get: function () { return decode_js_1.decodeDeploymentCall; } });
|
|
46
|
+
var setupCalls_js_2 = require("./jbcenter/setupCalls.js");
|
|
47
|
+
Object.defineProperty(exports, "intentCalls", { enumerable: true, get: function () { return setupCalls_js_2.intentCalls; } });
|
|
45
48
|
var merge_js_1 = require("./jbcenter/merge.js");
|
|
46
49
|
Object.defineProperty(exports, "deployedChains", { enumerable: true, get: function () { return merge_js_1.deployedChains; } });
|
|
47
50
|
Object.defineProperty(exports, "intentPath", { enumerable: true, get: function () { return merge_js_1.intentPath; } });
|
|
@@ -51,6 +54,11 @@ Object.defineProperty(exports, "mergeSearch", { enumerable: true, get: function
|
|
|
51
54
|
var ensureDeployed_js_1 = require("./jbcenter/ensureDeployed.js");
|
|
52
55
|
Object.defineProperty(exports, "EnsureDeployedError", { enumerable: true, get: function () { return ensureDeployed_js_1.EnsureDeployedError; } });
|
|
53
56
|
Object.defineProperty(exports, "ensureDeployed", { enumerable: true, get: function () { return ensureDeployed_js_1.ensureDeployed; } });
|
|
57
|
+
var publish_js_1 = require("./jbcenter/publish.js");
|
|
58
|
+
Object.defineProperty(exports, "JBCenterIntentMismatchError", { enumerable: true, get: function () { return publish_js_1.JBCenterIntentMismatchError; } });
|
|
59
|
+
Object.defineProperty(exports, "publishSignedIntent", { enumerable: true, get: function () { return publish_js_1.publishSignedIntent; } });
|
|
60
|
+
var refusal_js_1 = require("./jbcenter/refusal.js");
|
|
61
|
+
Object.defineProperty(exports, "describeCenterRefusal", { enumerable: true, get: function () { return refusal_js_1.describeCenterRefusal; } });
|
|
54
62
|
/** Freeze a typed viem contract request into the call signed by JB Center. */
|
|
55
63
|
function createJBCenterDeploymentCall(request) {
|
|
56
64
|
const { chainId, address, ...parameters } = request;
|
|
@@ -154,15 +162,15 @@ function isEnvelope(value) {
|
|
|
154
162
|
return false;
|
|
155
163
|
}
|
|
156
164
|
if (!Array.isArray(value.deploymentCalls) ||
|
|
157
|
-
!value.deploymentCalls.every(isDeploymentCall)
|
|
158
|
-
value.deploymentCalls.length !== value.chainIds.length) {
|
|
165
|
+
!value.deploymentCalls.every(isDeploymentCall)) {
|
|
159
166
|
return false;
|
|
160
167
|
}
|
|
168
|
+
const calls = value.deploymentCalls;
|
|
169
|
+
if (!(0, setupCalls_js_1.isValidDeploymentCalls)(calls))
|
|
170
|
+
return false;
|
|
161
171
|
const chains = [...value.chainIds].sort((a, b) => a - b);
|
|
162
|
-
const callChains =
|
|
163
|
-
|
|
164
|
-
.sort((a, b) => a - b);
|
|
165
|
-
return (new Set(callChains).size === callChains.length &&
|
|
172
|
+
const callChains = [...(0, setupCalls_js_1.groupDeploymentCalls)(calls).keys()].sort((a, b) => a - b);
|
|
173
|
+
return (callChains.length === chains.length &&
|
|
166
174
|
chains.every((chainId, index) => callChains[index] === chainId));
|
|
167
175
|
}
|
|
168
176
|
function isMetadata(value) {
|
|
@@ -355,6 +363,10 @@ class JBCenterClient {
|
|
|
355
363
|
query.set("limit", String(params.limit));
|
|
356
364
|
if (params.cursor !== undefined)
|
|
357
365
|
query.set("cursor", params.cursor);
|
|
366
|
+
if (params.owner !== undefined)
|
|
367
|
+
query.set("owner", params.owner);
|
|
368
|
+
if (params.publisher !== undefined)
|
|
369
|
+
query.set("publisher", params.publisher);
|
|
358
370
|
const suffix = query.size ? `?${query}` : "";
|
|
359
371
|
return this.fetchJson(`v1/search${suffix}`, {}, isSearchPage, options);
|
|
360
372
|
}
|