@rhinestone/sdk 1.4.2 → 1.5.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/README.md +89 -1
- package/dist/src/accounts/signing/common.d.ts +8 -2
- package/dist/src/accounts/signing/common.d.ts.map +1 -1
- package/dist/src/auth/provider.d.ts +7 -0
- package/dist/src/auth/provider.d.ts.map +1 -0
- package/dist/src/auth/provider.js +41 -0
- package/dist/src/execution/index.d.ts +3 -2
- package/dist/src/execution/index.d.ts.map +1 -1
- package/dist/src/execution/index.js +11 -9
- package/dist/src/execution/utils.d.ts +6 -2
- package/dist/src/execution/utils.d.ts.map +1 -1
- package/dist/src/execution/utils.js +33 -13
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -5
- package/dist/src/jwt-server/digest.d.ts +11 -0
- package/dist/src/jwt-server/digest.d.ts.map +1 -0
- package/dist/src/jwt-server/digest.js +22 -0
- package/dist/src/jwt-server/express.d.ts +16 -0
- package/dist/src/jwt-server/express.d.ts.map +1 -0
- package/dist/src/jwt-server/express.js +24 -0
- package/dist/src/jwt-server/handlers.d.ts +10 -0
- package/dist/src/jwt-server/handlers.d.ts.map +1 -0
- package/dist/src/jwt-server/handlers.js +41 -0
- package/dist/src/jwt-server/index.d.ts +8 -0
- package/dist/src/jwt-server/index.d.ts.map +1 -0
- package/dist/src/jwt-server/index.js +18 -0
- package/dist/src/jwt-server/jcs.d.ts +12 -0
- package/dist/src/jwt-server/jcs.d.ts.map +1 -0
- package/dist/src/jwt-server/jcs.js +60 -0
- package/dist/src/jwt-server/signer.d.ts +18 -0
- package/dist/src/jwt-server/signer.d.ts.map +1 -0
- package/dist/src/jwt-server/signer.js +71 -0
- package/dist/src/jwt-server/sponsorship.d.ts +19 -0
- package/dist/src/jwt-server/sponsorship.d.ts.map +1 -0
- package/dist/src/jwt-server/sponsorship.js +56 -0
- package/dist/src/jwt-server/web.d.ts +4 -0
- package/dist/src/jwt-server/web.d.ts.map +1 -0
- package/dist/src/jwt-server/web.js +27 -0
- package/dist/src/modules/validators/smart-sessions.d.ts +1 -1
- package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.js +12 -3
- package/dist/src/orchestrator/client.d.ts +9 -4
- package/dist/src/orchestrator/client.d.ts.map +1 -1
- package/dist/src/orchestrator/client.js +28 -17
- package/dist/src/orchestrator/consts.d.ts +1 -1
- package/dist/src/orchestrator/consts.js +1 -1
- package/dist/src/orchestrator/index.d.ts +2 -1
- package/dist/src/orchestrator/index.d.ts.map +1 -1
- package/dist/src/orchestrator/index.js +2 -2
- package/dist/src/orchestrator/types.d.ts +5 -1
- package/dist/src/orchestrator/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +27 -3
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +17 -3
- package/dist/src/accounts/index.test.d.ts +0 -2
- package/dist/src/accounts/index.test.d.ts.map +0 -1
- package/dist/src/accounts/index.test.js +0 -33
- package/dist/src/accounts/json-rpc/index.test.d.ts +0 -2
- package/dist/src/accounts/json-rpc/index.test.d.ts.map +0 -1
- package/dist/src/accounts/json-rpc/index.test.js +0 -35
- package/dist/src/accounts/json-rpc/providers.test.d.ts +0 -2
- package/dist/src/accounts/json-rpc/providers.test.d.ts.map +0 -1
- package/dist/src/accounts/json-rpc/providers.test.js +0 -43
- package/dist/src/accounts/kernel.test.d.ts +0 -2
- package/dist/src/accounts/kernel.test.d.ts.map +0 -1
- package/dist/src/accounts/kernel.test.js +0 -132
- package/dist/src/accounts/nexus.test.d.ts +0 -2
- package/dist/src/accounts/nexus.test.d.ts.map +0 -1
- package/dist/src/accounts/nexus.test.js +0 -118
- package/dist/src/accounts/safe.test.d.ts +0 -2
- package/dist/src/accounts/safe.test.d.ts.map +0 -1
- package/dist/src/accounts/safe.test.js +0 -168
- package/dist/src/accounts/signing/passkeys.test.d.ts +0 -2
- package/dist/src/accounts/signing/passkeys.test.d.ts.map +0 -1
- package/dist/src/accounts/signing/passkeys.test.js +0 -88
- package/dist/src/accounts/startale.test.d.ts +0 -2
- package/dist/src/accounts/startale.test.d.ts.map +0 -1
- package/dist/src/accounts/startale.test.js +0 -189
- package/dist/src/accounts/utils.test.d.ts +0 -2
- package/dist/src/accounts/utils.test.d.ts.map +0 -1
- package/dist/src/accounts/utils.test.js +0 -49
- package/dist/src/actions/ecdsa.test.d.ts +0 -2
- package/dist/src/actions/ecdsa.test.d.ts.map +0 -1
- package/dist/src/actions/ecdsa.test.js +0 -99
- package/dist/src/actions/passkeys.test.d.ts +0 -2
- package/dist/src/actions/passkeys.test.d.ts.map +0 -1
- package/dist/src/actions/passkeys.test.js +0 -54
- package/dist/src/actions/recovery.test.d.ts +0 -2
- package/dist/src/actions/recovery.test.d.ts.map +0 -1
- package/dist/src/actions/recovery.test.js +0 -168
- package/dist/src/execution/signing.test.d.ts +0 -2
- package/dist/src/execution/signing.test.d.ts.map +0 -1
- package/dist/src/execution/signing.test.js +0 -465
- package/dist/src/execution/utils.test.d.ts +0 -2
- package/dist/src/execution/utils.test.d.ts.map +0 -1
- package/dist/src/execution/utils.test.js +0 -388
- package/dist/src/modules/index.test.d.ts +0 -2
- package/dist/src/modules/index.test.d.ts.map +0 -1
- package/dist/src/modules/index.test.js +0 -81
- package/dist/src/modules/validators/core.test.d.ts +0 -2
- package/dist/src/modules/validators/core.test.d.ts.map +0 -1
- package/dist/src/modules/validators/core.test.js +0 -101
- package/dist/src/modules/validators/policies/claim/permit2.test.d.ts +0 -2
- package/dist/src/modules/validators/policies/claim/permit2.test.d.ts.map +0 -1
- package/dist/src/modules/validators/policies/claim/permit2.test.js +0 -519
- package/dist/src/modules/validators/smart-sessions.test.d.ts +0 -2
- package/dist/src/modules/validators/smart-sessions.test.d.ts.map +0 -1
- package/dist/src/modules/validators/smart-sessions.test.js +0 -311
- package/dist/src/orchestrator/registry.test.d.ts +0 -2
- package/dist/src/orchestrator/registry.test.d.ts.map +0 -1
- package/dist/src/orchestrator/registry.test.js +0 -154
- package/dist/src/utils/index.test.d.ts +0 -2
- package/dist/src/utils/index.test.d.ts.map +0 -1
- package/dist/src/utils/index.test.js +0 -42
- package/dist/test/consts.d.ts +0 -10
- package/dist/test/consts.d.ts.map +0 -1
- package/dist/test/consts.js +0 -22
- package/dist/test/utils/utils.d.ts +0 -5
- package/dist/test/utils/utils.d.ts.map +0 -1
- package/dist/test/utils/utils.js +0 -20
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createExpressRouter = createExpressRouter;
|
|
4
|
+
const handlers_1 = require("./handlers");
|
|
5
|
+
function createExpressRouter(config) {
|
|
6
|
+
// Dynamic import avoidance: we type the router interface manually
|
|
7
|
+
// so express doesn't need to be installed unless this function is called.
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
9
|
+
const { Router } = require('express');
|
|
10
|
+
const router = Router();
|
|
11
|
+
const handleAccessToken = (0, handlers_1.createCoreAccessTokenHandler)(config);
|
|
12
|
+
const handleExtensionToken = (0, handlers_1.createCoreExtensionTokenHandler)(config);
|
|
13
|
+
router.get('/access-token', async (_req, res) => {
|
|
14
|
+
const result = await handleAccessToken();
|
|
15
|
+
res.status(result.status).json(result.body);
|
|
16
|
+
});
|
|
17
|
+
router.post('/extension-token', async (req, res) => {
|
|
18
|
+
const body = req.body;
|
|
19
|
+
const intentInput = body?.intentInput;
|
|
20
|
+
const result = await handleExtensionToken(intentInput);
|
|
21
|
+
res.status(result.status).json(result.body);
|
|
22
|
+
});
|
|
23
|
+
return router;
|
|
24
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type JwtSignerConfig } from './signer';
|
|
2
|
+
export type JwtHandlerConfig = JwtSignerConfig;
|
|
3
|
+
interface HandlerResult {
|
|
4
|
+
status: number;
|
|
5
|
+
body: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export declare function createCoreAccessTokenHandler(config: JwtHandlerConfig): () => Promise<HandlerResult>;
|
|
8
|
+
export declare function createCoreExtensionTokenHandler(config: JwtHandlerConfig): (intentInput: unknown) => Promise<HandlerResult>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../jwt-server/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAGhE,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAA;AAE9C,UAAU,aAAa;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,gBAAgB,GACvB,MAAM,OAAO,CAAC,aAAa,CAAC,CAa9B;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,gBAAgB,GACvB,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAuBlD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCoreAccessTokenHandler = createCoreAccessTokenHandler;
|
|
4
|
+
exports.createCoreExtensionTokenHandler = createCoreExtensionTokenHandler;
|
|
5
|
+
const signer_1 = require("./signer");
|
|
6
|
+
const sponsorship_1 = require("./sponsorship");
|
|
7
|
+
function createCoreAccessTokenHandler(config) {
|
|
8
|
+
const signer = (0, signer_1.createJwtSigner)(config);
|
|
9
|
+
return async () => {
|
|
10
|
+
try {
|
|
11
|
+
const token = await signer.accessToken();
|
|
12
|
+
return { status: 200, body: { token } };
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
const message = error instanceof Error ? error.message : 'Internal server error';
|
|
16
|
+
return { status: 500, body: { error: message } };
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function createCoreExtensionTokenHandler(config) {
|
|
21
|
+
const signer = (0, signer_1.createJwtSigner)(config);
|
|
22
|
+
return async (intentInput) => {
|
|
23
|
+
if (intentInput === undefined || intentInput === null) {
|
|
24
|
+
return {
|
|
25
|
+
status: 400,
|
|
26
|
+
body: { error: 'Missing intentInput in request body' },
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const token = await signer.getIntentExtensionToken(intentInput);
|
|
31
|
+
return { status: 200, body: { token } };
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (error instanceof sponsorship_1.SponsorshipDeniedError) {
|
|
35
|
+
return { status: 403, body: { error: error.message } };
|
|
36
|
+
}
|
|
37
|
+
const message = error instanceof Error ? error.message : 'Internal server error';
|
|
38
|
+
return { status: 500, body: { error: message } };
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { computeIntentInputDigest } from './digest';
|
|
2
|
+
export { createExpressRouter } from './express';
|
|
3
|
+
export type { JwtHandlerConfig } from './handlers';
|
|
4
|
+
export { jcsCanonicalise } from './jcs';
|
|
5
|
+
export { createJwtSigner, type JwtCredentials, type JwtSignerConfig, } from './signer';
|
|
6
|
+
export { SponsorshipDeniedError, type SponsorshipFilter, shouldSponsor, } from './sponsorship';
|
|
7
|
+
export { createAccessTokenHandler, createExtensionTokenHandler, } from './web';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../jwt-server/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EACL,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,aAAa,GACd,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,OAAO,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createExtensionTokenHandler = exports.createAccessTokenHandler = exports.shouldSponsor = exports.SponsorshipDeniedError = exports.createJwtSigner = exports.jcsCanonicalise = exports.createExpressRouter = exports.computeIntentInputDigest = void 0;
|
|
4
|
+
// biome-ignore lint/performance/noBarrelFile: subpath entry point for @rhinestone/sdk/jwt-server
|
|
5
|
+
var digest_1 = require("./digest");
|
|
6
|
+
Object.defineProperty(exports, "computeIntentInputDigest", { enumerable: true, get: function () { return digest_1.computeIntentInputDigest; } });
|
|
7
|
+
var express_1 = require("./express");
|
|
8
|
+
Object.defineProperty(exports, "createExpressRouter", { enumerable: true, get: function () { return express_1.createExpressRouter; } });
|
|
9
|
+
var jcs_1 = require("./jcs");
|
|
10
|
+
Object.defineProperty(exports, "jcsCanonicalise", { enumerable: true, get: function () { return jcs_1.jcsCanonicalise; } });
|
|
11
|
+
var signer_1 = require("./signer");
|
|
12
|
+
Object.defineProperty(exports, "createJwtSigner", { enumerable: true, get: function () { return signer_1.createJwtSigner; } });
|
|
13
|
+
var sponsorship_1 = require("./sponsorship");
|
|
14
|
+
Object.defineProperty(exports, "SponsorshipDeniedError", { enumerable: true, get: function () { return sponsorship_1.SponsorshipDeniedError; } });
|
|
15
|
+
Object.defineProperty(exports, "shouldSponsor", { enumerable: true, get: function () { return sponsorship_1.shouldSponsor; } });
|
|
16
|
+
var web_1 = require("./web");
|
|
17
|
+
Object.defineProperty(exports, "createAccessTokenHandler", { enumerable: true, get: function () { return web_1.createAccessTokenHandler; } });
|
|
18
|
+
Object.defineProperty(exports, "createExtensionTokenHandler", { enumerable: true, get: function () { return web_1.createExtensionTokenHandler; } });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 8785 JSON Canonicalization Scheme (JCS).
|
|
3
|
+
*
|
|
4
|
+
* Produces a deterministic JSON serialization by:
|
|
5
|
+
* 1. Sorting object keys lexicographically (Unicode code-point order)
|
|
6
|
+
* 2. Using ES2015+ `JSON.stringify` number serialization (IEEE 754 → shortest round-trip)
|
|
7
|
+
* 3. No whitespace
|
|
8
|
+
*
|
|
9
|
+
* Reference: https://www.rfc-editor.org/rfc/rfc8785
|
|
10
|
+
*/
|
|
11
|
+
export declare function jcsCanonicalise(value: unknown): string;
|
|
12
|
+
//# sourceMappingURL=jcs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jcs.d.ts","sourceRoot":"","sources":["../../../jwt-server/jcs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RFC 8785 JSON Canonicalization Scheme (JCS).
|
|
4
|
+
*
|
|
5
|
+
* Produces a deterministic JSON serialization by:
|
|
6
|
+
* 1. Sorting object keys lexicographically (Unicode code-point order)
|
|
7
|
+
* 2. Using ES2015+ `JSON.stringify` number serialization (IEEE 754 → shortest round-trip)
|
|
8
|
+
* 3. No whitespace
|
|
9
|
+
*
|
|
10
|
+
* Reference: https://www.rfc-editor.org/rfc/rfc8785
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.jcsCanonicalise = jcsCanonicalise;
|
|
14
|
+
function jcsCanonicalise(value) {
|
|
15
|
+
return serialize(value);
|
|
16
|
+
}
|
|
17
|
+
function serialize(value) {
|
|
18
|
+
if (value === null || value === undefined) {
|
|
19
|
+
return 'null';
|
|
20
|
+
}
|
|
21
|
+
switch (typeof value) {
|
|
22
|
+
case 'boolean':
|
|
23
|
+
return value ? 'true' : 'false';
|
|
24
|
+
case 'number':
|
|
25
|
+
if (!Number.isFinite(value)) {
|
|
26
|
+
throw new Error(`JCS: non-finite number: ${value}`);
|
|
27
|
+
}
|
|
28
|
+
// ES2015 Number-to-String satisfies RFC 8785 §3.2.2.3
|
|
29
|
+
return Object.is(value, -0) ? '0' : String(value);
|
|
30
|
+
case 'string':
|
|
31
|
+
return JSON.stringify(value);
|
|
32
|
+
case 'bigint':
|
|
33
|
+
// BigInt is not valid JSON; coerce to bare decimal string.
|
|
34
|
+
// Values above MAX_SAFE_INTEGER are rejected because downstream
|
|
35
|
+
// JSON parsers using IEEE 754 doubles would silently lose precision,
|
|
36
|
+
// producing a different digest.
|
|
37
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER) ||
|
|
38
|
+
value < BigInt(-Number.MAX_SAFE_INTEGER)) {
|
|
39
|
+
throw new Error(`JCS: BigInt ${value} exceeds safe integer range — convert to string before calling`);
|
|
40
|
+
}
|
|
41
|
+
return String(value);
|
|
42
|
+
default:
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(value)) {
|
|
46
|
+
const items = value.map((item) => serialize(item));
|
|
47
|
+
return `[${items.join(',')}]`;
|
|
48
|
+
}
|
|
49
|
+
// Object — sort keys by Unicode code-point order
|
|
50
|
+
const obj = value;
|
|
51
|
+
const keys = Object.keys(obj).sort();
|
|
52
|
+
const members = [];
|
|
53
|
+
for (const key of keys) {
|
|
54
|
+
const v = obj[key];
|
|
55
|
+
if (v === undefined)
|
|
56
|
+
continue; // skip undefined properties
|
|
57
|
+
members.push(`${JSON.stringify(key)}:${serialize(v)}`);
|
|
58
|
+
}
|
|
59
|
+
return `{${members.join(',')}}`;
|
|
60
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type SponsorshipFilter } from './sponsorship';
|
|
2
|
+
export interface JwtCredentials {
|
|
3
|
+
privateKey: JsonWebKey;
|
|
4
|
+
integratorId: string;
|
|
5
|
+
projectId: string;
|
|
6
|
+
appId: string;
|
|
7
|
+
keyId: string;
|
|
8
|
+
audience?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface JwtSignerConfig {
|
|
11
|
+
jwt: JwtCredentials;
|
|
12
|
+
shouldSponsor?: SponsorshipFilter;
|
|
13
|
+
}
|
|
14
|
+
export declare function createJwtSigner(config: JwtSignerConfig): {
|
|
15
|
+
accessToken: () => Promise<string>;
|
|
16
|
+
getIntentExtensionToken: (intentInput: unknown) => Promise<string>;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../jwt-server/signer.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,eAAe,CAAA;AAEtB,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,CAAC,EAAE,iBAAiB,CAAA;CAClC;AAeD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG;IACxD,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,uBAAuB,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CACnE,CAoEA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createJwtSigner = createJwtSigner;
|
|
4
|
+
const jose_1 = require("jose");
|
|
5
|
+
const digest_1 = require("./digest");
|
|
6
|
+
const sponsorship_1 = require("./sponsorship");
|
|
7
|
+
function pickAlg(jwk) {
|
|
8
|
+
if (jwk.kty === 'EC') {
|
|
9
|
+
if (jwk.crv === 'P-256')
|
|
10
|
+
return 'ES256';
|
|
11
|
+
if (jwk.crv === 'P-384')
|
|
12
|
+
return 'ES384';
|
|
13
|
+
if (jwk.crv === 'P-521')
|
|
14
|
+
return 'ES512';
|
|
15
|
+
throw new Error(`Unsupported EC curve: ${jwk.crv}`);
|
|
16
|
+
}
|
|
17
|
+
if (jwk.kty === 'RSA')
|
|
18
|
+
return 'RS256';
|
|
19
|
+
throw new Error(`Unsupported JWK kty: ${jwk.kty}`);
|
|
20
|
+
}
|
|
21
|
+
function createJwtSigner(config) {
|
|
22
|
+
const { jwt: { privateKey, integratorId, projectId, appId, keyId, audience = 'rhinestone-api', }, shouldSponsor: filters, } = config;
|
|
23
|
+
const alg = pickAlg(privateKey);
|
|
24
|
+
let cachedKey = null;
|
|
25
|
+
async function getKey() {
|
|
26
|
+
if (!cachedKey) {
|
|
27
|
+
cachedKey = (await (0, jose_1.importJWK)(privateKey, alg));
|
|
28
|
+
}
|
|
29
|
+
return cachedKey;
|
|
30
|
+
}
|
|
31
|
+
async function accessToken() {
|
|
32
|
+
const key = await getKey();
|
|
33
|
+
return new jose_1.SignJWT({ typ: 'access', app_id: appId })
|
|
34
|
+
.setProtectedHeader({ alg, kid: keyId })
|
|
35
|
+
.setIssuer(integratorId)
|
|
36
|
+
.setSubject(projectId)
|
|
37
|
+
.setAudience(audience)
|
|
38
|
+
.setIssuedAt()
|
|
39
|
+
.setExpirationTime('1h')
|
|
40
|
+
.sign(key);
|
|
41
|
+
}
|
|
42
|
+
async function getIntentExtensionToken(intentInput) {
|
|
43
|
+
if (filters) {
|
|
44
|
+
const allowed = await (0, sponsorship_1.shouldSponsor)(intentInput, filters);
|
|
45
|
+
if (!allowed) {
|
|
46
|
+
throw new sponsorship_1.SponsorshipDeniedError();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const key = await getKey();
|
|
50
|
+
const digest = await (0, digest_1.computeIntentInputDigest)(intentInput);
|
|
51
|
+
return new jose_1.SignJWT({
|
|
52
|
+
typ: 'intent_extension',
|
|
53
|
+
app_id: appId,
|
|
54
|
+
jti: crypto.randomUUID(),
|
|
55
|
+
policy: {
|
|
56
|
+
sponsorship: {
|
|
57
|
+
scope: 'intent',
|
|
58
|
+
intent_input: { digest },
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
})
|
|
62
|
+
.setProtectedHeader({ alg, kid: keyId })
|
|
63
|
+
.setIssuer(integratorId)
|
|
64
|
+
.setSubject(projectId)
|
|
65
|
+
.setAudience(audience)
|
|
66
|
+
.setIssuedAt()
|
|
67
|
+
.setExpirationTime('5m')
|
|
68
|
+
.sign(key);
|
|
69
|
+
}
|
|
70
|
+
return { accessToken, getIntentExtensionToken };
|
|
71
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Address, Hex } from 'viem';
|
|
2
|
+
export declare class SponsorshipDeniedError extends Error {
|
|
3
|
+
constructor();
|
|
4
|
+
}
|
|
5
|
+
type MaybeAsync<T> = T | Promise<T>;
|
|
6
|
+
export interface SponsorshipFilter {
|
|
7
|
+
chain?: (chain: {
|
|
8
|
+
id: number;
|
|
9
|
+
}) => MaybeAsync<boolean>;
|
|
10
|
+
account?: (address: Address) => MaybeAsync<boolean>;
|
|
11
|
+
calls?: (calls: {
|
|
12
|
+
to: Address;
|
|
13
|
+
value: bigint;
|
|
14
|
+
data: Hex;
|
|
15
|
+
}[]) => MaybeAsync<boolean>;
|
|
16
|
+
}
|
|
17
|
+
export declare function shouldSponsor(intentInput: unknown, filters: SponsorshipFilter): Promise<boolean>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=sponsorship.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sponsorship.d.ts","sourceRoot":"","sources":["../../../jwt-server/sponsorship.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAExC,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAEnC,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,UAAU,CAAC,OAAO,CAAC,CAAA;IACtD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,OAAO,CAAC,CAAA;IACnD,KAAK,CAAC,EAAE,CACN,KAAK,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,EAAE,KAC/C,UAAU,CAAC,OAAO,CAAC,CAAA;CACzB;AAiDD,wBAAsB,aAAa,CACjC,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CAclB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SponsorshipDeniedError = void 0;
|
|
4
|
+
exports.shouldSponsor = shouldSponsor;
|
|
5
|
+
class SponsorshipDeniedError extends Error {
|
|
6
|
+
constructor() {
|
|
7
|
+
super('Sponsorship denied');
|
|
8
|
+
this.name = 'SponsorshipDeniedError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.SponsorshipDeniedError = SponsorshipDeniedError;
|
|
12
|
+
function parseIntentInput(intentInput) {
|
|
13
|
+
if (typeof intentInput !== 'object' || intentInput === null) {
|
|
14
|
+
throw new Error('intentInput must be a non-null object');
|
|
15
|
+
}
|
|
16
|
+
const input = intentInput;
|
|
17
|
+
const chainId = input.destinationChainId;
|
|
18
|
+
if (typeof chainId !== 'number') {
|
|
19
|
+
throw new Error('intentInput.destinationChainId must be a number');
|
|
20
|
+
}
|
|
21
|
+
const account = input.account;
|
|
22
|
+
if (typeof account !== 'object' || account === null) {
|
|
23
|
+
throw new Error('intentInput.account must be a non-null object');
|
|
24
|
+
}
|
|
25
|
+
const address = account.address;
|
|
26
|
+
if (typeof address !== 'string') {
|
|
27
|
+
throw new Error('intentInput.account.address must be a string');
|
|
28
|
+
}
|
|
29
|
+
const executions = input.destinationExecutions;
|
|
30
|
+
if (!Array.isArray(executions)) {
|
|
31
|
+
throw new Error('intentInput.destinationExecutions must be an array');
|
|
32
|
+
}
|
|
33
|
+
const calls = executions.map((exec) => ({
|
|
34
|
+
to: exec.to,
|
|
35
|
+
value: BigInt(exec.value),
|
|
36
|
+
data: exec.data,
|
|
37
|
+
}));
|
|
38
|
+
return {
|
|
39
|
+
chain: { id: chainId },
|
|
40
|
+
account: address,
|
|
41
|
+
calls,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async function shouldSponsor(intentInput, filters) {
|
|
45
|
+
const parsed = parseIntentInput(intentInput);
|
|
46
|
+
if (filters.chain && !(await filters.chain(parsed.chain))) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (filters.account && !(await filters.account(parsed.account))) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (filters.calls && !(await filters.calls(parsed.calls))) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type JwtHandlerConfig } from './handlers';
|
|
2
|
+
export declare function createAccessTokenHandler(config: JwtHandlerConfig): (req: Request) => Promise<Response>;
|
|
3
|
+
export declare function createExtensionTokenHandler(config: JwtHandlerConfig): (req: Request) => Promise<Response>;
|
|
4
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../jwt-server/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAA;AAEnB,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,GACvB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAOrC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,gBAAgB,GACvB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAerC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAccessTokenHandler = createAccessTokenHandler;
|
|
4
|
+
exports.createExtensionTokenHandler = createExtensionTokenHandler;
|
|
5
|
+
const handlers_1 = require("./handlers");
|
|
6
|
+
function createAccessTokenHandler(config) {
|
|
7
|
+
const handle = (0, handlers_1.createCoreAccessTokenHandler)(config);
|
|
8
|
+
return async () => {
|
|
9
|
+
const result = await handle();
|
|
10
|
+
return Response.json(result.body, { status: result.status });
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function createExtensionTokenHandler(config) {
|
|
14
|
+
const handle = (0, handlers_1.createCoreExtensionTokenHandler)(config);
|
|
15
|
+
return async (req) => {
|
|
16
|
+
let intentInput;
|
|
17
|
+
try {
|
|
18
|
+
const body = await req.json();
|
|
19
|
+
intentInput = body.intentInput;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return Response.json({ error: 'Invalid JSON body' }, { status: 400 });
|
|
23
|
+
}
|
|
24
|
+
const result = await handle(intentInput);
|
|
25
|
+
return Response.json(result.body, { status: result.status });
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -203,7 +203,7 @@ declare function getSmartSessionValidator(config: RhinestoneConfig): Module | nu
|
|
|
203
203
|
* The orchestrator slices off the first 20 bytes to identify the validator, then
|
|
204
204
|
* simulates verifyExecution with the mock emissary to estimate gas before the user signs.
|
|
205
205
|
*/
|
|
206
|
-
declare function buildMockSignature(session: Session, useDevContracts?: boolean, chainCount?: number): Hex;
|
|
206
|
+
declare function buildMockSignature(session: Session, useDevContracts?: boolean, chainCount?: number, targetChainId?: number): Hex;
|
|
207
207
|
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, DUMMY_PRECLAIMOP_TARGET, DUMMY_PRECLAIMOP_SELECTOR, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
208
208
|
export type { ChainSession, ChainDigest, ResolvedSessionSignerSet, SessionData, SmartSessionModeType, SessionDetails, };
|
|
209
209
|
//# sourceMappingURL=smart-sessions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-sessions.d.ts","sourceRoot":"","sources":["../../../../modules/validators/smart-sessions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"smart-sessions.d.ts","sourceRoot":"","sources":["../../../../modules/validators/smart-sessions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EAMZ,KAAK,GAAG,EAOR,KAAK,mBAAmB,EAKzB,MAAM,MAAM,CAAA;AAcb,OAAO,KAAK,EAEV,MAAM,EACN,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EAElB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAGL,8BAA8B,EAC9B,kCAAkC,EACnC,MAAM,QAAQ,CAAA;AAYf,UAAU,WAAW;IACnB,gBAAgB,EAAE,OAAO,CAAA;IACzB,wBAAwB,EAAE,GAAG,CAAA;IAC7B,IAAI,EAAE,GAAG,CAAA;IACT,eAAe,EAAE;QACf,qBAAqB,EAAE,SAAS,qBAAqB,EAAE,CAAA;QACvD,eAAe,EAAE,SAAS,aAAa,EAAE,CAAA;KAC1C,CAAA;IACD,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;IAC9B,aAAa,EAAE,SAAS,UAAU,EAAE,CAAA;CACrC;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,GAAG,CAAA;CACd;AAED,UAAU,qBAAqB;IAC7B,kBAAkB,EAAE,GAAG,CAAA;IACvB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,UAAU,UAAU;IAClB,oBAAoB,EAAE,GAAG,CAAA;IACzB,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,SAAS,UAAU,EAAE,CAAA;CACtC;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,GAAG,CAAA;CACd;AAaD,KAAK,oBAAoB,GACrB,OAAO,sBAAsB,GAC7B,OAAO,yBAAyB,CAAA;AAEpC,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,GAAG,CAAA;CACnB;AAED,UAAU,iBAAiB;IACzB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,iBAAiB,EAAE,OAAO,CAAA;IAC1B,0BAA0B,EAAE,OAAO,CAAA;IACnC,sBAAsB,EAAE,OAAO,CAAA;IAC/B,cAAc,EAAE,SAAS,UAAU,EAAE,CAAA;IACrC,eAAe,EAAE,WAAW,CAAA;IAC5B,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;CAC/B;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,iBAAiB,CAAA;IAC9B,gBAAgB,EAAE,OAAO,CAAA;IACzB,wBAAwB,EAAE,GAAG,CAAA;IAC7B,IAAI,EAAE,GAAG,CAAA;IACT,YAAY,EAAE,OAAO,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,aAAa,CAAA;CACvB;AAED,UAAU,WAAW;IACnB,qBAAqB,EAAE,SAAS,cAAc,EAAE,CAAA;IAChD,eAAe,EAAE,SAAS,UAAU,EAAE,CAAA;CACvC;AAED,UAAU,cAAc;IACtB,kBAAkB,EAAE,GAAG,CAAA;IACvB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;CAC/B;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,iBAAiB,EAAE,WAAW,EAAE,CAAA;IAChC,IAAI,EAAE,mBAAmB,CAAC,OAAO,KAAK,EAAE,mBAAmB,CAAC,CAAA;CAC7D;AAED,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CD,CAAA;AAEV,QAAA,MAAM,sBAAsB,SAAS,CAAA;AACrC,QAAA,MAAM,yBAAyB,SAAS,CAAA;AAExC,QAAA,MAAM,mCAAmC,EAAE,OACG,CAAA;AAC9C,QAAA,MAAM,4CAA4C,EAAE,GAAkB,CAAA;AACtE,QAAA,MAAM,2EAA2E,EAAE,GACrE,CAAA;AASd,QAAA,MAAM,uBAAuB,EAAE,OACe,CAAA;AAC9C,QAAA,MAAM,yBAAyB,EAAE,GAAkB,CAAA;AAEnD,QAAA,MAAM,8BAA8B,EAAE,OACQ,CAAA;AAC9C,QAAA,MAAM,yBAAyB,EAAE,OACa,CAAA;AAC9C,QAAA,MAAM,mBAAmB,EAAE,OACmB,CAAA;AAC9C,QAAA,MAAM,+BAA+B,EAAE,OACO,CAAA;AAC9C,QAAA,MAAM,0BAA0B,EAAE,OACY,CAAA;AAC9C,QAAA,MAAM,0BAA0B,EAAE,OACY,CAAA;AAC9C,QAAA,MAAM,+BAA+B,EAAE,OACO,CAAA;AAY9C,UAAU,wBAAwB;IAChC,IAAI,EAAE,sBAAsB,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,gBAAgB,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,GAAG,CAAA;CACtB;AAED,iBAAS,aAAa,CACpB,OAAO,EAAE,wBAAwB,EACjC,kBAAkB,EAAE,GAAG,GACtB,GAAG,CA4JL;AAED,iBAAe,iBAAiB,CAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,cAAc,CAAC,CAiDzB;AAED,iBAAe,gBAAgB,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED,iBAAe,iBAAiB,CAC9B,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,GAAG,CAAC,CAyBd;AAwED,iBAAe,oBAAoB,CACjC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,sBAAsB,EAAE,GAAG,EAC3B,iBAAiB,EAAE;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,GAAG,CAAA;CACnB,EAAE,EACH,oBAAoB,EAAE,MAAM,EAC5B,eAAe,CAAC,EAAE,OAAO;;;GA8B1B;AAED,iBAAS,cAAc,CACrB,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,OAAO,GACxB,WAAW,CA6Fb;AAED,iBAAS,eAAe,CAAC,OAAO,EAAE,OAAO,iBAyBxC;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,UAAU,CA0K5E;AAED,iBAAS,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAezE;AAQD;;;;;;;GAOG;AACH,iBAAS,kBAAkB,CACzB,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,OAAO,EACzB,UAAU,GAAE,MAAU,EACtB,aAAa,CAAC,EAAE,MAAM,GACrB,GAAG,CAgCL;AASD,OAAO,EACL,8BAA8B,EAC9B,kCAAkC,EAClC,mCAAmC,EACnC,4CAA4C,EAC5C,2EAA2E,EAC3E,uBAAuB,EACvB,yBAAyB,EACzB,8BAA8B,EAC9B,yBAAyB,EACzB,mBAAmB,EACnB,+BAA+B,EAC/B,0BAA0B,EAC1B,0BAA0B,EAC1B,+BAA+B,EAC/B,aAAa,EACb,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,CAAA;AACD,YAAY,EACV,YAAY,EACZ,WAAW,EACX,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,cAAc,GACf,CAAA"}
|
|
@@ -712,13 +712,22 @@ function getSmartSessionEmissaryAddress(useDevContracts) {
|
|
|
712
712
|
* The orchestrator slices off the first 20 bytes to identify the validator, then
|
|
713
713
|
* simulates verifyExecution with the mock emissary to estimate gas before the user signs.
|
|
714
714
|
*/
|
|
715
|
-
function buildMockSignature(session, useDevContracts, chainCount = 1) {
|
|
715
|
+
function buildMockSignature(session, useDevContracts, chainCount = 1, targetChainId) {
|
|
716
716
|
const emissaryAddress = getSmartSessionEmissaryAddress(useDevContracts);
|
|
717
|
+
// Use targetChainId when provided (per-chain mockSignatures path) so the
|
|
718
|
+
// mock emissary's chainId check passes on the correct chain. Falls back to
|
|
719
|
+
// session.chain.id for the global mockSignature (single-chain path).
|
|
720
|
+
const primaryChainId = targetChainId ?? session.chain.id;
|
|
721
|
+
// Normalize chainCount to a finite positive integer. Guards against
|
|
722
|
+
// accidental NaN/undefined from caller (e.g. `sourceChains?.length` when
|
|
723
|
+
// sourceChains is undefined) which would otherwise make Array.from produce
|
|
724
|
+
// an empty array and silently drop the ChainId check.
|
|
725
|
+
const safeChainCount = Number.isFinite(chainCount) && chainCount > 0 ? Math.floor(chainCount) : 1;
|
|
717
726
|
// Build one entry per chain — first entry is the real chain ID (for the ChainId check),
|
|
718
727
|
// remaining entries use chainId 0 as placeholders. Hash mismatch is skipped by the
|
|
719
728
|
// mock emissary, so sessionDigest can be zeroHash throughout.
|
|
720
|
-
const hashesAndChainIds = Array.from({ length:
|
|
721
|
-
chainId: i === 0 ? BigInt(
|
|
729
|
+
const hashesAndChainIds = Array.from({ length: safeChainCount }, (_, i) => ({
|
|
730
|
+
chainId: i === 0 ? BigInt(primaryChainId) : 0n,
|
|
722
731
|
sessionDigest: viem_1.zeroHash,
|
|
723
732
|
}));
|
|
724
733
|
const dummySigners = {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { Address } from 'viem';
|
|
2
|
+
import type { AuthProvider } from '../auth/provider';
|
|
2
3
|
import type { IntentInput, IntentOpStatus, IntentResult, IntentRoute, Portfolio, SignedIntentOp, SplitIntentsInput, SplitIntentsResult } from './types';
|
|
3
4
|
export declare class Orchestrator {
|
|
4
5
|
private serverUrl;
|
|
5
|
-
private
|
|
6
|
-
private
|
|
7
|
-
constructor(serverUrl: string,
|
|
6
|
+
private authProvider;
|
|
7
|
+
private extraHeaders?;
|
|
8
|
+
constructor(serverUrl: string, authProvider: AuthProvider, headers?: Record<string, string>);
|
|
8
9
|
getPortfolio(userAddress: Address, filter?: {
|
|
9
10
|
chainIds?: number[];
|
|
10
11
|
tokens?: {
|
|
@@ -13,9 +14,13 @@ export declare class Orchestrator {
|
|
|
13
14
|
}): Promise<Portfolio>;
|
|
14
15
|
getIntentRoute(input: IntentInput): Promise<IntentRoute>;
|
|
15
16
|
splitIntents(input: SplitIntentsInput): Promise<SplitIntentsResult>;
|
|
16
|
-
submitIntent(signedIntentOpUnformatted: SignedIntentOp, dryRun: boolean
|
|
17
|
+
submitIntent(signedIntentOpUnformatted: SignedIntentOp, dryRun: boolean, policyContext?: {
|
|
18
|
+
intentInput: unknown;
|
|
19
|
+
isSponsored: boolean;
|
|
20
|
+
}): Promise<IntentResult>;
|
|
17
21
|
getIntentOpStatus(intentId: bigint): Promise<IntentOpStatus>;
|
|
18
22
|
private getHeaders;
|
|
23
|
+
private getSubmitHeaders;
|
|
19
24
|
private fetch;
|
|
20
25
|
private parseError;
|
|
21
26
|
private parseErrorMessage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AA2BpD,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EAET,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,SAAS,CAAA;AAchB,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,YAAY,CAAC,CAAwB;gBAG3C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO5B,YAAY,CAChB,WAAW,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,CAAC,EAAE;YACP,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;SAC7B,CAAA;KACF,GACA,OAAO,CAAC,SAAS,CAAC;IA+Cf,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IASxD,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwDnE,YAAY,CAChB,yBAAyB,EAAE,cAAc,EACzC,MAAM,EAAE,OAAO,EACf,aAAa,CAAC,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,GAC7D,OAAO,CAAC,YAAY,CAAC;IAqBlB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YASpD,UAAU;YAWV,gBAAgB;YAgBhB,KAAK;IA4BnB,OAAO,CAAC,UAAU;IA6GlB,OAAO,CAAC,iBAAiB;CAmG1B"}
|
|
@@ -12,12 +12,12 @@ function parseTokenAmountsRecord(record) {
|
|
|
12
12
|
}
|
|
13
13
|
class Orchestrator {
|
|
14
14
|
serverUrl;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
constructor(serverUrl,
|
|
15
|
+
authProvider;
|
|
16
|
+
extraHeaders;
|
|
17
|
+
constructor(serverUrl, authProvider, headers) {
|
|
18
18
|
this.serverUrl = serverUrl;
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
19
|
+
this.authProvider = authProvider;
|
|
20
|
+
this.extraHeaders = headers;
|
|
21
21
|
}
|
|
22
22
|
async getPortfolio(userAddress, filter) {
|
|
23
23
|
const params = new URLSearchParams();
|
|
@@ -32,7 +32,7 @@ class Orchestrator {
|
|
|
32
32
|
const url = new URL(`${this.serverUrl}/accounts/${userAddress}/portfolio`);
|
|
33
33
|
url.search = params.toString();
|
|
34
34
|
const json = await this.fetch(url.toString(), {
|
|
35
|
-
headers: this.getHeaders(),
|
|
35
|
+
headers: await this.getHeaders(),
|
|
36
36
|
});
|
|
37
37
|
const portfolioResponse = json.portfolio;
|
|
38
38
|
const portfolio = portfolioResponse.map((tokenResponse) => ({
|
|
@@ -55,14 +55,14 @@ class Orchestrator {
|
|
|
55
55
|
const body = (0, utils_1.convertBigIntFields)(input);
|
|
56
56
|
return await this.fetch(`${this.serverUrl}/intents/route`, {
|
|
57
57
|
method: 'POST',
|
|
58
|
-
headers: this.getHeaders(),
|
|
58
|
+
headers: await this.getHeaders(),
|
|
59
59
|
body: JSON.stringify(body),
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
async splitIntents(input) {
|
|
63
63
|
const response = await fetch(`${this.serverUrl}/intents/split`, {
|
|
64
64
|
method: 'POST',
|
|
65
|
-
headers: this.getHeaders(),
|
|
65
|
+
headers: await this.getHeaders(),
|
|
66
66
|
body: JSON.stringify((0, utils_1.convertBigIntFields)({
|
|
67
67
|
chainId: input.chain.id,
|
|
68
68
|
tokens: input.tokens,
|
|
@@ -104,7 +104,7 @@ class Orchestrator {
|
|
|
104
104
|
});
|
|
105
105
|
throw new error_1.OrchestratorError({ message: 'Unexpected error' });
|
|
106
106
|
}
|
|
107
|
-
async submitIntent(signedIntentOpUnformatted, dryRun) {
|
|
107
|
+
async submitIntent(signedIntentOpUnformatted, dryRun, policyContext) {
|
|
108
108
|
const signedIntentOp = (0, utils_1.convertBigIntFields)(signedIntentOpUnformatted);
|
|
109
109
|
if (dryRun) {
|
|
110
110
|
signedIntentOp.options = {
|
|
@@ -112,27 +112,38 @@ class Orchestrator {
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
const body = { signedIntentOp };
|
|
115
|
+
const headers = policyContext
|
|
116
|
+
? await this.getSubmitHeaders(policyContext.intentInput, policyContext.isSponsored)
|
|
117
|
+
: await this.getHeaders();
|
|
115
118
|
return await this.fetch(`${this.serverUrl}/intent-operations`, {
|
|
116
119
|
method: 'POST',
|
|
117
|
-
headers
|
|
120
|
+
headers,
|
|
118
121
|
body: JSON.stringify(body),
|
|
119
122
|
});
|
|
120
123
|
}
|
|
121
124
|
async getIntentOpStatus(intentId) {
|
|
122
125
|
return await this.fetch(`${this.serverUrl}/intent-operation/${intentId.toString()}`, {
|
|
123
|
-
headers: this.getHeaders(),
|
|
126
|
+
headers: await this.getHeaders(),
|
|
124
127
|
});
|
|
125
128
|
}
|
|
126
|
-
getHeaders() {
|
|
127
|
-
const
|
|
129
|
+
async getHeaders() {
|
|
130
|
+
const auth = await this.authProvider.getHeaders();
|
|
131
|
+
return {
|
|
128
132
|
'Content-Type': 'application/json',
|
|
129
133
|
'x-sdk-version': consts_1.SDK_VERSION,
|
|
130
134
|
'x-api-version': consts_1.API_VERSION,
|
|
135
|
+
...auth,
|
|
136
|
+
...this.extraHeaders,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
async getSubmitHeaders(intentInput, isSponsored) {
|
|
140
|
+
const auth = await this.authProvider.getSubmitHeaders(intentInput, isSponsored);
|
|
141
|
+
return {
|
|
142
|
+
'Content-Type': 'application/json',
|
|
143
|
+
'x-sdk-version': consts_1.SDK_VERSION,
|
|
144
|
+
...auth,
|
|
145
|
+
...this.extraHeaders,
|
|
131
146
|
};
|
|
132
|
-
if (this.apiKey) {
|
|
133
|
-
headers['x-api-key'] = this.apiKey;
|
|
134
|
-
}
|
|
135
|
-
return { ...headers, ...this.headers };
|
|
136
147
|
}
|
|
137
148
|
async fetch(url, options) {
|
|
138
149
|
const response = await fetch(url, options);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
declare const PROD_ORCHESTRATOR_URL = "https://v1.orchestrator.rhinestone.dev";
|
|
2
2
|
declare const RHINESTONE_SPOKE_POOL_ADDRESS = "0x000000000060f6e853447881951574cdd0663530";
|
|
3
|
-
declare const SDK_VERSION = "1.
|
|
3
|
+
declare const SDK_VERSION = "1.5.0";
|
|
4
4
|
declare const API_VERSION = "2026-01.alps";
|
|
5
5
|
export { PROD_ORCHESTRATOR_URL, RHINESTONE_SPOKE_POOL_ADDRESS, SDK_VERSION, API_VERSION, };
|
|
6
6
|
//# sourceMappingURL=consts.d.ts.map
|
|
@@ -5,7 +5,7 @@ const PROD_ORCHESTRATOR_URL = 'https://v1.orchestrator.rhinestone.dev';
|
|
|
5
5
|
exports.PROD_ORCHESTRATOR_URL = PROD_ORCHESTRATOR_URL;
|
|
6
6
|
const RHINESTONE_SPOKE_POOL_ADDRESS = '0x000000000060f6e853447881951574cdd0663530';
|
|
7
7
|
exports.RHINESTONE_SPOKE_POOL_ADDRESS = RHINESTONE_SPOKE_POOL_ADDRESS;
|
|
8
|
-
const SDK_VERSION = '1.
|
|
8
|
+
const SDK_VERSION = '1.5.0';
|
|
9
9
|
exports.SDK_VERSION = SDK_VERSION;
|
|
10
10
|
const API_VERSION = '2026-01.alps';
|
|
11
11
|
exports.API_VERSION = API_VERSION;
|