@opendatalabs/vana-sdk 0.1.0-alpha.2b6935d → 0.1.0-alpha.2e77fcc
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/browser.cjs.map +1 -1
- package/dist/browser.d.ts +33 -1
- package/dist/browser.js.map +1 -1
- package/dist/chains/index.cjs.map +1 -1
- package/dist/chains/index.d.ts +30 -1
- package/dist/chains/index.js.map +1 -1
- package/dist/config/chains.cjs.map +1 -1
- package/dist/config/chains.d.ts +99 -0
- package/dist/config/chains.js.map +1 -1
- package/dist/contracts/contractController.cjs.map +1 -1
- package/dist/contracts/contractController.d.ts +66 -10
- package/dist/contracts/contractController.js.map +1 -1
- package/dist/controllers/base.cjs +33 -0
- package/dist/controllers/base.cjs.map +1 -1
- package/dist/controllers/base.d.ts +10 -0
- package/dist/controllers/base.js +33 -0
- package/dist/controllers/base.js.map +1 -1
- package/dist/controllers/data.cjs +162 -133
- package/dist/controllers/data.cjs.map +1 -1
- package/dist/controllers/data.d.ts +222 -184
- package/dist/controllers/data.js +162 -133
- package/dist/controllers/data.js.map +1 -1
- package/dist/controllers/permissions.cjs +208 -60
- package/dist/controllers/permissions.cjs.map +1 -1
- package/dist/controllers/permissions.d.ts +75 -45
- package/dist/controllers/permissions.js +208 -60
- package/dist/controllers/permissions.js.map +1 -1
- package/dist/controllers/protocol.cjs.map +1 -1
- package/dist/controllers/protocol.d.ts +27 -28
- package/dist/controllers/protocol.js.map +1 -1
- package/dist/controllers/schemas.cjs +23 -21
- package/dist/controllers/schemas.cjs.map +1 -1
- package/dist/controllers/schemas.d.ts +47 -40
- package/dist/controllers/schemas.js +23 -21
- package/dist/controllers/schemas.js.map +1 -1
- package/dist/controllers/server.cjs +17 -15
- package/dist/controllers/server.cjs.map +1 -1
- package/dist/controllers/server.d.ts +46 -38
- package/dist/controllers/server.js +17 -15
- package/dist/controllers/server.js.map +1 -1
- package/dist/core/apiClient.cjs +53 -3
- package/dist/core/apiClient.cjs.map +1 -1
- package/dist/core/apiClient.d.ts +132 -7
- package/dist/core/apiClient.js +53 -3
- package/dist/core/apiClient.js.map +1 -1
- package/dist/core/generics.cjs +30 -3
- package/dist/core/generics.cjs.map +1 -1
- package/dist/core/generics.d.ts +95 -6
- package/dist/core/generics.js +30 -3
- package/dist/core/generics.js.map +1 -1
- package/dist/core.cjs +4 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +2 -1
- package/dist/core.js +4 -1
- package/dist/core.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.node.cjs +2 -3
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.d.ts +33 -13
- package/dist/index.node.js +2 -2
- package/dist/index.node.js.map +1 -1
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.ts +39 -1
- package/dist/node.js.map +1 -1
- package/dist/platform/browser.cjs +160 -2
- package/dist/platform/browser.cjs.map +1 -1
- package/dist/platform/browser.d.ts +232 -12
- package/dist/platform/browser.js +160 -2
- package/dist/platform/browser.js.map +1 -1
- package/dist/platform/interface.cjs.map +1 -1
- package/dist/platform/interface.d.ts +283 -90
- package/dist/platform/node.cjs +163 -2
- package/dist/platform/node.cjs.map +1 -1
- package/dist/platform/node.d.ts +69 -6
- package/dist/platform/node.js +163 -2
- package/dist/platform/node.js.map +1 -1
- package/dist/server/relayerHandler.cjs +136 -98
- package/dist/server/relayerHandler.cjs.map +1 -1
- package/dist/server/relayerHandler.d.ts +3 -2
- package/dist/server/relayerHandler.js +135 -96
- package/dist/server/relayerHandler.js.map +1 -1
- package/dist/storage/manager.cjs +108 -25
- package/dist/storage/manager.cjs.map +1 -1
- package/dist/storage/manager.d.ts +119 -25
- package/dist/storage/manager.js +108 -25
- package/dist/storage/manager.js.map +1 -1
- package/dist/storage/providers/callback-storage.cjs +86 -15
- package/dist/storage/providers/callback-storage.cjs.map +1 -1
- package/dist/storage/providers/callback-storage.d.ts +109 -20
- package/dist/storage/providers/callback-storage.js +86 -15
- package/dist/storage/providers/callback-storage.js.map +1 -1
- package/dist/storage/providers/pinata.cjs.map +1 -1
- package/dist/storage/providers/pinata.d.ts +12 -14
- package/dist/storage/providers/pinata.js.map +1 -1
- package/dist/types/blockchain.cjs.map +1 -1
- package/dist/types/blockchain.d.ts +39 -11
- package/dist/types/chains.cjs.map +1 -1
- package/dist/types/chains.d.ts +74 -7
- package/dist/types/chains.js.map +1 -1
- package/dist/types/config.cjs.map +1 -1
- package/dist/types/config.d.ts +38 -4
- package/dist/types/config.js.map +1 -1
- package/dist/types/contracts.cjs.map +1 -1
- package/dist/types/contracts.d.ts +71 -7
- package/dist/types/controller-context.cjs.map +1 -1
- package/dist/types/controller-context.d.ts +3 -1
- package/dist/types/data.cjs.map +1 -1
- package/dist/types/data.d.ts +4 -6
- package/dist/types/generics.cjs.map +1 -1
- package/dist/types/generics.d.ts +81 -10
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.d.ts +28 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/operations.cjs.map +1 -1
- package/dist/types/operations.d.ts +178 -15
- package/dist/types/operations.js.map +1 -1
- package/dist/types/permissions.cjs.map +1 -1
- package/dist/types/permissions.d.ts +15 -20
- package/dist/types/personal.cjs.map +1 -1
- package/dist/types/personal.d.ts +131 -14
- package/dist/types/relayer.cjs.map +1 -1
- package/dist/types/relayer.d.ts +114 -18
- package/dist/types/storage.cjs.map +1 -1
- package/dist/types/storage.d.ts +9 -21
- package/dist/types/storage.js.map +1 -1
- package/dist/types/utils.cjs.map +1 -1
- package/dist/types/utils.d.ts +5 -1
- package/dist/utils/grantFiles.cjs.map +1 -1
- package/dist/utils/grantFiles.d.ts +10 -20
- package/dist/utils/grantFiles.js.map +1 -1
- package/dist/utils/grantValidation.cjs.map +1 -1
- package/dist/utils/grantValidation.d.ts +95 -16
- package/dist/utils/grantValidation.js.map +1 -1
- package/dist/utils/grants.cjs.map +1 -1
- package/dist/utils/grants.d.ts +93 -12
- package/dist/utils/grants.js.map +1 -1
- package/dist/utils/ipfs.cjs +2 -4
- package/dist/utils/ipfs.cjs.map +1 -1
- package/dist/utils/ipfs.d.ts +1 -1
- package/dist/utils/ipfs.js +2 -4
- package/dist/utils/ipfs.js.map +1 -1
- package/dist/utils/lazy-import.cjs.map +1 -1
- package/dist/utils/lazy-import.d.ts +32 -7
- package/dist/utils/lazy-import.js.map +1 -1
- package/dist/utils/signatureCache.cjs +8 -2
- package/dist/utils/signatureCache.cjs.map +1 -1
- package/dist/utils/signatureCache.d.ts +49 -8
- package/dist/utils/signatureCache.js +8 -2
- package/dist/utils/signatureCache.js.map +1 -1
- package/dist/utils/transactionHelpers.cjs.map +1 -1
- package/dist/utils/transactionHelpers.d.ts +12 -12
- package/dist/utils/transactionHelpers.js.map +1 -1
- package/dist/utils/typedDataConverter.cjs.map +1 -1
- package/dist/utils/typedDataConverter.d.ts +39 -3
- package/dist/utils/typedDataConverter.js.map +1 -1
- package/dist/utils/urlResolver.cjs +7 -0
- package/dist/utils/urlResolver.cjs.map +1 -1
- package/dist/utils/urlResolver.d.ts +22 -4
- package/dist/utils/urlResolver.js +7 -0
- package/dist/utils/urlResolver.js.map +1 -1
- package/dist/utils/wallet.cjs.map +1 -1
- package/dist/utils/wallet.d.ts +78 -16
- package/dist/utils/wallet.js.map +1 -1
- package/package.json +3 -1
- package/dist/server/handler.cjs +0 -103
- package/dist/server/handler.cjs.map +0 -1
- package/dist/server/handler.d.ts +0 -95
- package/dist/server/handler.js +0 -79
- package/dist/server/handler.js.map +0 -1
- /package/dist/tests/{server-handler.test.d.ts → permissions-transaction-options.test.d.ts} +0 -0
package/dist/server/handler.cjs
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var handler_exports = {};
|
|
20
|
-
__export(handler_exports, {
|
|
21
|
-
handleRelayerRequest: () => handleRelayerRequest
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(handler_exports);
|
|
24
|
-
var import_viem = require("viem");
|
|
25
|
-
var import_errors = require("../errors");
|
|
26
|
-
async function handleRelayerRequest(sdk, payload) {
|
|
27
|
-
const { typedData, signature, expectedUserAddress } = payload;
|
|
28
|
-
console.debug({
|
|
29
|
-
domain: typedData.domain,
|
|
30
|
-
types: typedData.types,
|
|
31
|
-
primaryType: typedData.primaryType,
|
|
32
|
-
message: typedData.message,
|
|
33
|
-
signature
|
|
34
|
-
});
|
|
35
|
-
const signerAddress = await (0, import_viem.recoverTypedDataAddress)({
|
|
36
|
-
domain: typedData.domain,
|
|
37
|
-
types: typedData.types,
|
|
38
|
-
primaryType: typedData.primaryType,
|
|
39
|
-
message: typedData.message,
|
|
40
|
-
signature
|
|
41
|
-
});
|
|
42
|
-
if (!signerAddress) {
|
|
43
|
-
throw new import_errors.SignatureError(
|
|
44
|
-
"Invalid signature - could not recover signer address"
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
if (expectedUserAddress) {
|
|
48
|
-
const normalizedSigner = (0, import_viem.getAddress)(signerAddress);
|
|
49
|
-
const normalizedExpected = (0, import_viem.getAddress)(expectedUserAddress);
|
|
50
|
-
if (normalizedSigner !== normalizedExpected) {
|
|
51
|
-
throw new import_errors.SignatureError(
|
|
52
|
-
`Security verification failed: Recovered signer address (${normalizedSigner}) does not match expected user address (${normalizedExpected}). This may be due to incorrect EIP-712 domain configuration.`
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const primaryType = typedData.primaryType;
|
|
57
|
-
switch (primaryType) {
|
|
58
|
-
case "Permission":
|
|
59
|
-
return sdk.permissions.submitSignedGrant(
|
|
60
|
-
typedData,
|
|
61
|
-
signature
|
|
62
|
-
);
|
|
63
|
-
case "RevokePermission":
|
|
64
|
-
return sdk.permissions.submitSignedRevoke(
|
|
65
|
-
typedData,
|
|
66
|
-
signature
|
|
67
|
-
);
|
|
68
|
-
case "TrustServer":
|
|
69
|
-
return sdk.permissions.submitSignedTrustServer(
|
|
70
|
-
typedData,
|
|
71
|
-
signature
|
|
72
|
-
);
|
|
73
|
-
case "AddServer":
|
|
74
|
-
return sdk.permissions.submitSignedAddAndTrustServer(
|
|
75
|
-
typedData,
|
|
76
|
-
signature
|
|
77
|
-
);
|
|
78
|
-
case "UntrustServer":
|
|
79
|
-
return sdk.permissions.submitSignedUntrustServer(
|
|
80
|
-
typedData,
|
|
81
|
-
signature
|
|
82
|
-
);
|
|
83
|
-
// TODO: RegisterGrantee with signature is not supported until
|
|
84
|
-
// DataPortabilityGrantees contract adds registerGranteeWithSignature function
|
|
85
|
-
// case "RegisterGrantee":
|
|
86
|
-
// return sdk.permissions.submitSignedRegisterGrantee(
|
|
87
|
-
// typedData as unknown as RegisterGranteeTypedData,
|
|
88
|
-
// signature,
|
|
89
|
-
// );
|
|
90
|
-
case "ServerFilesAndPermission":
|
|
91
|
-
return sdk.permissions.submitSignedAddServerFilesAndPermissions(
|
|
92
|
-
typedData,
|
|
93
|
-
signature
|
|
94
|
-
);
|
|
95
|
-
default:
|
|
96
|
-
throw new Error(`Unsupported operation type: ${typedData.primaryType}`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
100
|
-
0 && (module.exports = {
|
|
101
|
-
handleRelayerRequest
|
|
102
|
-
});
|
|
103
|
-
//# sourceMappingURL=handler.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/handler.ts"],"sourcesContent":["import type { Address, Hash } from \"viem\";\nimport { recoverTypedDataAddress, getAddress } from \"viem\";\nimport type { VanaInstance } from \"../index.node\";\nimport type {\n GenericTypedData,\n PermissionGrantTypedData,\n RevokePermissionTypedData,\n TrustServerTypedData,\n AddAndTrustServerTypedData,\n ServerFilesAndPermissionTypedData,\n TypedDataPrimaryType,\n} from \"../types\";\nimport { SignatureError } from \"../errors\";\nimport type { TransactionResult } from \"../types/operations\";\nimport type {\n PermissionGrantResult,\n PermissionRevokeResult,\n ServerTrustResult,\n ServerUntrustResult,\n GranteeRegisterResult,\n FileAddedResult,\n} from \"../types/transactionResults\";\n\n/** Union type of all possible transaction results from relayer operations */\ntype RelayerTransactionResult =\n | PermissionGrantResult\n | PermissionRevokeResult\n | ServerTrustResult\n | ServerUntrustResult\n | GranteeRegisterResult\n | FileAddedResult;\n\n/**\n * Payload structure for relayer requests.\n * Contains the EIP-712 typed data, signature, and optional expected user address for security verification.\n *\n * @category Server\n */\nexport interface RelayerRequestPayload {\n /** EIP-712 typed data containing the transaction details */\n typedData: GenericTypedData;\n /** User's signature of the typed data */\n signature: Hash;\n /** Optional expected user address for security verification */\n expectedUserAddress?: Address;\n}\n\n/**\n * @deprecated Use `handleRelayerOperation` from '../server/relayerHandler' instead.\n * This legacy handler will be removed in the next major version.\n *\n * Migration guide:\n * - Import { handleRelayerOperation } instead of { handleRelayerRequest }\n * - Use UnifiedRelayerRequest/Response types for better type safety\n * - The new handler eliminates unsafe type assertions (as unknown as)\n *\n * Legacy server-side handler for processing relayed transactions.\n *\n * This function encapsulates the complete relayer workflow:\n * 1. Verifies the signature against the typed data\n * 2. Optionally checks the signer matches the expected user address\n * 3. Routes to the appropriate SDK method based on primaryType\n * 4. Returns the transaction handle with hash and event parsing capability\n *\n * Supported transaction types:\n * - Permission: Permission grants\n * - PermissionRevoke: Permission revocations\n * - TrustServer: Trust server operations\n * - UntrustServer: Untrust server operations\n * - AddServer: Add and trust server operations\n * - RegisterGrantee: Register grantee operations\n * - ServerFilesAndPermission: Batch operation for server, files, and permissions\n *\n * @param sdk - Initialized Vana SDK instance\n * @param payload - Request payload containing typed data, signature, and optional security check\n * @returns Promise resolving to TransactionResult with hash and optional event data\n * @throws {SignatureError} When signature verification fails or signer mismatch occurs\n * @throws {Error} When primaryType is unsupported or SDK operations fail\n * @category Server\n * @example\n * ```typescript\n * import { handleRelayerRequest } from '@opendatalabs/vana-sdk';\n *\n * // In your relayer API endpoint:\n * export async function POST(request: NextRequest) {\n * try {\n * const body = await request.json();\n * const vana = await createRelayerVana();\n *\n * const tx = await handleRelayerRequest(vana, {\n * typedData: body.typedData,\n * signature: body.signature,\n * expectedUserAddress: body.expectedUserAddress\n * });\n *\n * // Option 1: Return just the hash immediately\n * return NextResponse.json({\n * success: true,\n * transactionHash: tx.hash\n * });\n *\n * // Option 2: Wait for transaction confirmation and return event data\n * const eventData = await tx.waitForEvents();\n * return NextResponse.json({\n * success: true,\n * transactionHash: tx.hash,\n * ...eventData // Include parsed event data like permissionId, fileId, etc.\n * });\n * } catch (error) {\n * return NextResponse.json({\n * success: false,\n * error: error.message\n * }, { status: 500 });\n * }\n * }\n * ```\n */\nexport async function handleRelayerRequest(\n sdk: VanaInstance,\n payload: RelayerRequestPayload,\n): Promise<TransactionResult & { eventData?: RelayerTransactionResult }> {\n const { typedData, signature, expectedUserAddress } = payload;\n\n console.debug({\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message as unknown as Record<string, unknown>,\n signature,\n });\n\n // Step 1: Verify signature and recover signer address\n const signerAddress = await recoverTypedDataAddress({\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message as unknown as Record<string, unknown>,\n signature,\n });\n\n if (!signerAddress) {\n throw new SignatureError(\n \"Invalid signature - could not recover signer address\",\n );\n }\n\n // Step 2: Security check - verify signer matches expected user address if provided\n if (expectedUserAddress) {\n const normalizedSigner = getAddress(signerAddress);\n const normalizedExpected = getAddress(expectedUserAddress);\n\n if (normalizedSigner !== normalizedExpected) {\n throw new SignatureError(\n `Security verification failed: Recovered signer address (${normalizedSigner}) does not match expected user address (${normalizedExpected}). This may be due to incorrect EIP-712 domain configuration.`,\n );\n }\n }\n\n // Step 3: Route to appropriate SDK method based on primaryType\n // Route to appropriate SDK method and return TransactionResult directly\n const primaryType = typedData.primaryType as TypedDataPrimaryType;\n\n // NOTE: The type assertions below use `as unknown as` to bypass TypeScript checking.\n // This is a known technical debt from the legacy relayer system.\n // The new unified relayer handler (relayerHandler.ts) provides stronger type safety.\n // TODO(TYPES): Migrate consumers to use the unified handler with proper type checking\n\n switch (primaryType) {\n case \"Permission\":\n return sdk.permissions.submitSignedGrant(\n typedData as unknown as PermissionGrantTypedData,\n signature,\n );\n\n case \"RevokePermission\":\n return sdk.permissions.submitSignedRevoke(\n typedData as unknown as RevokePermissionTypedData,\n signature,\n );\n\n case \"TrustServer\":\n return sdk.permissions.submitSignedTrustServer(\n typedData as unknown as TrustServerTypedData,\n signature,\n );\n\n case \"AddServer\":\n return sdk.permissions.submitSignedAddAndTrustServer(\n typedData as unknown as AddAndTrustServerTypedData,\n signature,\n );\n\n case \"UntrustServer\":\n return sdk.permissions.submitSignedUntrustServer(\n typedData as unknown as GenericTypedData,\n signature,\n );\n\n // TODO: RegisterGrantee with signature is not supported until\n // DataPortabilityGrantees contract adds registerGranteeWithSignature function\n // case \"RegisterGrantee\":\n // return sdk.permissions.submitSignedRegisterGrantee(\n // typedData as unknown as RegisterGranteeTypedData,\n // signature,\n // );\n\n case \"ServerFilesAndPermission\":\n return sdk.permissions.submitSignedAddServerFilesAndPermissions(\n typedData as unknown as ServerFilesAndPermissionTypedData,\n signature,\n );\n\n default:\n throw new Error(`Unsupported operation type: ${typedData.primaryType}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAoD;AAWpD,oBAA+B;AAyG/B,eAAsB,qBACpB,KACA,SACuE;AACvE,QAAM,EAAE,WAAW,WAAW,oBAAoB,IAAI;AAEtD,UAAQ,MAAM;AAAA,IACZ,QAAQ,UAAU;AAAA,IAClB,OAAO,UAAU;AAAA,IACjB,aAAa,UAAU;AAAA,IACvB,SAAS,UAAU;AAAA,IACnB;AAAA,EACF,CAAC;AAGD,QAAM,gBAAgB,UAAM,qCAAwB;AAAA,IAClD,QAAQ,UAAU;AAAA,IAClB,OAAO,UAAU;AAAA,IACjB,aAAa,UAAU;AAAA,IACvB,SAAS,UAAU;AAAA,IACnB;AAAA,EACF,CAAC;AAED,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAGA,MAAI,qBAAqB;AACvB,UAAM,uBAAmB,wBAAW,aAAa;AACjD,UAAM,yBAAqB,wBAAW,mBAAmB;AAEzD,QAAI,qBAAqB,oBAAoB;AAC3C,YAAM,IAAI;AAAA,QACR,2DAA2D,gBAAgB,2CAA2C,kBAAkB;AAAA,MAC1I;AAAA,IACF;AAAA,EACF;AAIA,QAAM,cAAc,UAAU;AAO9B,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF;AACE,YAAM,IAAI,MAAM,+BAA+B,UAAU,WAAW,EAAE;AAAA,EAC1E;AACF;","names":[]}
|
package/dist/server/handler.d.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import type { Address, Hash } from "viem";
|
|
2
|
-
import type { VanaInstance } from "../index.node";
|
|
3
|
-
import type { GenericTypedData } from "../types";
|
|
4
|
-
import type { TransactionResult } from "../types/operations";
|
|
5
|
-
import type { PermissionGrantResult, PermissionRevokeResult, ServerTrustResult, ServerUntrustResult, GranteeRegisterResult, FileAddedResult } from "../types/transactionResults";
|
|
6
|
-
/** Union type of all possible transaction results from relayer operations */
|
|
7
|
-
type RelayerTransactionResult = PermissionGrantResult | PermissionRevokeResult | ServerTrustResult | ServerUntrustResult | GranteeRegisterResult | FileAddedResult;
|
|
8
|
-
/**
|
|
9
|
-
* Payload structure for relayer requests.
|
|
10
|
-
* Contains the EIP-712 typed data, signature, and optional expected user address for security verification.
|
|
11
|
-
*
|
|
12
|
-
* @category Server
|
|
13
|
-
*/
|
|
14
|
-
export interface RelayerRequestPayload {
|
|
15
|
-
/** EIP-712 typed data containing the transaction details */
|
|
16
|
-
typedData: GenericTypedData;
|
|
17
|
-
/** User's signature of the typed data */
|
|
18
|
-
signature: Hash;
|
|
19
|
-
/** Optional expected user address for security verification */
|
|
20
|
-
expectedUserAddress?: Address;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* @deprecated Use `handleRelayerOperation` from '../server/relayerHandler' instead.
|
|
24
|
-
* This legacy handler will be removed in the next major version.
|
|
25
|
-
*
|
|
26
|
-
* Migration guide:
|
|
27
|
-
* - Import { handleRelayerOperation } instead of { handleRelayerRequest }
|
|
28
|
-
* - Use UnifiedRelayerRequest/Response types for better type safety
|
|
29
|
-
* - The new handler eliminates unsafe type assertions (as unknown as)
|
|
30
|
-
*
|
|
31
|
-
* Legacy server-side handler for processing relayed transactions.
|
|
32
|
-
*
|
|
33
|
-
* This function encapsulates the complete relayer workflow:
|
|
34
|
-
* 1. Verifies the signature against the typed data
|
|
35
|
-
* 2. Optionally checks the signer matches the expected user address
|
|
36
|
-
* 3. Routes to the appropriate SDK method based on primaryType
|
|
37
|
-
* 4. Returns the transaction handle with hash and event parsing capability
|
|
38
|
-
*
|
|
39
|
-
* Supported transaction types:
|
|
40
|
-
* - Permission: Permission grants
|
|
41
|
-
* - PermissionRevoke: Permission revocations
|
|
42
|
-
* - TrustServer: Trust server operations
|
|
43
|
-
* - UntrustServer: Untrust server operations
|
|
44
|
-
* - AddServer: Add and trust server operations
|
|
45
|
-
* - RegisterGrantee: Register grantee operations
|
|
46
|
-
* - ServerFilesAndPermission: Batch operation for server, files, and permissions
|
|
47
|
-
*
|
|
48
|
-
* @param sdk - Initialized Vana SDK instance
|
|
49
|
-
* @param payload - Request payload containing typed data, signature, and optional security check
|
|
50
|
-
* @returns Promise resolving to TransactionResult with hash and optional event data
|
|
51
|
-
* @throws {SignatureError} When signature verification fails or signer mismatch occurs
|
|
52
|
-
* @throws {Error} When primaryType is unsupported or SDK operations fail
|
|
53
|
-
* @category Server
|
|
54
|
-
* @example
|
|
55
|
-
* ```typescript
|
|
56
|
-
* import { handleRelayerRequest } from '@opendatalabs/vana-sdk';
|
|
57
|
-
*
|
|
58
|
-
* // In your relayer API endpoint:
|
|
59
|
-
* export async function POST(request: NextRequest) {
|
|
60
|
-
* try {
|
|
61
|
-
* const body = await request.json();
|
|
62
|
-
* const vana = await createRelayerVana();
|
|
63
|
-
*
|
|
64
|
-
* const tx = await handleRelayerRequest(vana, {
|
|
65
|
-
* typedData: body.typedData,
|
|
66
|
-
* signature: body.signature,
|
|
67
|
-
* expectedUserAddress: body.expectedUserAddress
|
|
68
|
-
* });
|
|
69
|
-
*
|
|
70
|
-
* // Option 1: Return just the hash immediately
|
|
71
|
-
* return NextResponse.json({
|
|
72
|
-
* success: true,
|
|
73
|
-
* transactionHash: tx.hash
|
|
74
|
-
* });
|
|
75
|
-
*
|
|
76
|
-
* // Option 2: Wait for transaction confirmation and return event data
|
|
77
|
-
* const eventData = await tx.waitForEvents();
|
|
78
|
-
* return NextResponse.json({
|
|
79
|
-
* success: true,
|
|
80
|
-
* transactionHash: tx.hash,
|
|
81
|
-
* ...eventData // Include parsed event data like permissionId, fileId, etc.
|
|
82
|
-
* });
|
|
83
|
-
* } catch (error) {
|
|
84
|
-
* return NextResponse.json({
|
|
85
|
-
* success: false,
|
|
86
|
-
* error: error.message
|
|
87
|
-
* }, { status: 500 });
|
|
88
|
-
* }
|
|
89
|
-
* }
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
export declare function handleRelayerRequest(sdk: VanaInstance, payload: RelayerRequestPayload): Promise<TransactionResult & {
|
|
93
|
-
eventData?: RelayerTransactionResult;
|
|
94
|
-
}>;
|
|
95
|
-
export {};
|
package/dist/server/handler.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { recoverTypedDataAddress, getAddress } from "viem";
|
|
2
|
-
import { SignatureError } from "../errors";
|
|
3
|
-
async function handleRelayerRequest(sdk, payload) {
|
|
4
|
-
const { typedData, signature, expectedUserAddress } = payload;
|
|
5
|
-
console.debug({
|
|
6
|
-
domain: typedData.domain,
|
|
7
|
-
types: typedData.types,
|
|
8
|
-
primaryType: typedData.primaryType,
|
|
9
|
-
message: typedData.message,
|
|
10
|
-
signature
|
|
11
|
-
});
|
|
12
|
-
const signerAddress = await recoverTypedDataAddress({
|
|
13
|
-
domain: typedData.domain,
|
|
14
|
-
types: typedData.types,
|
|
15
|
-
primaryType: typedData.primaryType,
|
|
16
|
-
message: typedData.message,
|
|
17
|
-
signature
|
|
18
|
-
});
|
|
19
|
-
if (!signerAddress) {
|
|
20
|
-
throw new SignatureError(
|
|
21
|
-
"Invalid signature - could not recover signer address"
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
if (expectedUserAddress) {
|
|
25
|
-
const normalizedSigner = getAddress(signerAddress);
|
|
26
|
-
const normalizedExpected = getAddress(expectedUserAddress);
|
|
27
|
-
if (normalizedSigner !== normalizedExpected) {
|
|
28
|
-
throw new SignatureError(
|
|
29
|
-
`Security verification failed: Recovered signer address (${normalizedSigner}) does not match expected user address (${normalizedExpected}). This may be due to incorrect EIP-712 domain configuration.`
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const primaryType = typedData.primaryType;
|
|
34
|
-
switch (primaryType) {
|
|
35
|
-
case "Permission":
|
|
36
|
-
return sdk.permissions.submitSignedGrant(
|
|
37
|
-
typedData,
|
|
38
|
-
signature
|
|
39
|
-
);
|
|
40
|
-
case "RevokePermission":
|
|
41
|
-
return sdk.permissions.submitSignedRevoke(
|
|
42
|
-
typedData,
|
|
43
|
-
signature
|
|
44
|
-
);
|
|
45
|
-
case "TrustServer":
|
|
46
|
-
return sdk.permissions.submitSignedTrustServer(
|
|
47
|
-
typedData,
|
|
48
|
-
signature
|
|
49
|
-
);
|
|
50
|
-
case "AddServer":
|
|
51
|
-
return sdk.permissions.submitSignedAddAndTrustServer(
|
|
52
|
-
typedData,
|
|
53
|
-
signature
|
|
54
|
-
);
|
|
55
|
-
case "UntrustServer":
|
|
56
|
-
return sdk.permissions.submitSignedUntrustServer(
|
|
57
|
-
typedData,
|
|
58
|
-
signature
|
|
59
|
-
);
|
|
60
|
-
// TODO: RegisterGrantee with signature is not supported until
|
|
61
|
-
// DataPortabilityGrantees contract adds registerGranteeWithSignature function
|
|
62
|
-
// case "RegisterGrantee":
|
|
63
|
-
// return sdk.permissions.submitSignedRegisterGrantee(
|
|
64
|
-
// typedData as unknown as RegisterGranteeTypedData,
|
|
65
|
-
// signature,
|
|
66
|
-
// );
|
|
67
|
-
case "ServerFilesAndPermission":
|
|
68
|
-
return sdk.permissions.submitSignedAddServerFilesAndPermissions(
|
|
69
|
-
typedData,
|
|
70
|
-
signature
|
|
71
|
-
);
|
|
72
|
-
default:
|
|
73
|
-
throw new Error(`Unsupported operation type: ${typedData.primaryType}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
export {
|
|
77
|
-
handleRelayerRequest
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/handler.ts"],"sourcesContent":["import type { Address, Hash } from \"viem\";\nimport { recoverTypedDataAddress, getAddress } from \"viem\";\nimport type { VanaInstance } from \"../index.node\";\nimport type {\n GenericTypedData,\n PermissionGrantTypedData,\n RevokePermissionTypedData,\n TrustServerTypedData,\n AddAndTrustServerTypedData,\n ServerFilesAndPermissionTypedData,\n TypedDataPrimaryType,\n} from \"../types\";\nimport { SignatureError } from \"../errors\";\nimport type { TransactionResult } from \"../types/operations\";\nimport type {\n PermissionGrantResult,\n PermissionRevokeResult,\n ServerTrustResult,\n ServerUntrustResult,\n GranteeRegisterResult,\n FileAddedResult,\n} from \"../types/transactionResults\";\n\n/** Union type of all possible transaction results from relayer operations */\ntype RelayerTransactionResult =\n | PermissionGrantResult\n | PermissionRevokeResult\n | ServerTrustResult\n | ServerUntrustResult\n | GranteeRegisterResult\n | FileAddedResult;\n\n/**\n * Payload structure for relayer requests.\n * Contains the EIP-712 typed data, signature, and optional expected user address for security verification.\n *\n * @category Server\n */\nexport interface RelayerRequestPayload {\n /** EIP-712 typed data containing the transaction details */\n typedData: GenericTypedData;\n /** User's signature of the typed data */\n signature: Hash;\n /** Optional expected user address for security verification */\n expectedUserAddress?: Address;\n}\n\n/**\n * @deprecated Use `handleRelayerOperation` from '../server/relayerHandler' instead.\n * This legacy handler will be removed in the next major version.\n *\n * Migration guide:\n * - Import { handleRelayerOperation } instead of { handleRelayerRequest }\n * - Use UnifiedRelayerRequest/Response types for better type safety\n * - The new handler eliminates unsafe type assertions (as unknown as)\n *\n * Legacy server-side handler for processing relayed transactions.\n *\n * This function encapsulates the complete relayer workflow:\n * 1. Verifies the signature against the typed data\n * 2. Optionally checks the signer matches the expected user address\n * 3. Routes to the appropriate SDK method based on primaryType\n * 4. Returns the transaction handle with hash and event parsing capability\n *\n * Supported transaction types:\n * - Permission: Permission grants\n * - PermissionRevoke: Permission revocations\n * - TrustServer: Trust server operations\n * - UntrustServer: Untrust server operations\n * - AddServer: Add and trust server operations\n * - RegisterGrantee: Register grantee operations\n * - ServerFilesAndPermission: Batch operation for server, files, and permissions\n *\n * @param sdk - Initialized Vana SDK instance\n * @param payload - Request payload containing typed data, signature, and optional security check\n * @returns Promise resolving to TransactionResult with hash and optional event data\n * @throws {SignatureError} When signature verification fails or signer mismatch occurs\n * @throws {Error} When primaryType is unsupported or SDK operations fail\n * @category Server\n * @example\n * ```typescript\n * import { handleRelayerRequest } from '@opendatalabs/vana-sdk';\n *\n * // In your relayer API endpoint:\n * export async function POST(request: NextRequest) {\n * try {\n * const body = await request.json();\n * const vana = await createRelayerVana();\n *\n * const tx = await handleRelayerRequest(vana, {\n * typedData: body.typedData,\n * signature: body.signature,\n * expectedUserAddress: body.expectedUserAddress\n * });\n *\n * // Option 1: Return just the hash immediately\n * return NextResponse.json({\n * success: true,\n * transactionHash: tx.hash\n * });\n *\n * // Option 2: Wait for transaction confirmation and return event data\n * const eventData = await tx.waitForEvents();\n * return NextResponse.json({\n * success: true,\n * transactionHash: tx.hash,\n * ...eventData // Include parsed event data like permissionId, fileId, etc.\n * });\n * } catch (error) {\n * return NextResponse.json({\n * success: false,\n * error: error.message\n * }, { status: 500 });\n * }\n * }\n * ```\n */\nexport async function handleRelayerRequest(\n sdk: VanaInstance,\n payload: RelayerRequestPayload,\n): Promise<TransactionResult & { eventData?: RelayerTransactionResult }> {\n const { typedData, signature, expectedUserAddress } = payload;\n\n console.debug({\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message as unknown as Record<string, unknown>,\n signature,\n });\n\n // Step 1: Verify signature and recover signer address\n const signerAddress = await recoverTypedDataAddress({\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message as unknown as Record<string, unknown>,\n signature,\n });\n\n if (!signerAddress) {\n throw new SignatureError(\n \"Invalid signature - could not recover signer address\",\n );\n }\n\n // Step 2: Security check - verify signer matches expected user address if provided\n if (expectedUserAddress) {\n const normalizedSigner = getAddress(signerAddress);\n const normalizedExpected = getAddress(expectedUserAddress);\n\n if (normalizedSigner !== normalizedExpected) {\n throw new SignatureError(\n `Security verification failed: Recovered signer address (${normalizedSigner}) does not match expected user address (${normalizedExpected}). This may be due to incorrect EIP-712 domain configuration.`,\n );\n }\n }\n\n // Step 3: Route to appropriate SDK method based on primaryType\n // Route to appropriate SDK method and return TransactionResult directly\n const primaryType = typedData.primaryType as TypedDataPrimaryType;\n\n // NOTE: The type assertions below use `as unknown as` to bypass TypeScript checking.\n // This is a known technical debt from the legacy relayer system.\n // The new unified relayer handler (relayerHandler.ts) provides stronger type safety.\n // TODO(TYPES): Migrate consumers to use the unified handler with proper type checking\n\n switch (primaryType) {\n case \"Permission\":\n return sdk.permissions.submitSignedGrant(\n typedData as unknown as PermissionGrantTypedData,\n signature,\n );\n\n case \"RevokePermission\":\n return sdk.permissions.submitSignedRevoke(\n typedData as unknown as RevokePermissionTypedData,\n signature,\n );\n\n case \"TrustServer\":\n return sdk.permissions.submitSignedTrustServer(\n typedData as unknown as TrustServerTypedData,\n signature,\n );\n\n case \"AddServer\":\n return sdk.permissions.submitSignedAddAndTrustServer(\n typedData as unknown as AddAndTrustServerTypedData,\n signature,\n );\n\n case \"UntrustServer\":\n return sdk.permissions.submitSignedUntrustServer(\n typedData as unknown as GenericTypedData,\n signature,\n );\n\n // TODO: RegisterGrantee with signature is not supported until\n // DataPortabilityGrantees contract adds registerGranteeWithSignature function\n // case \"RegisterGrantee\":\n // return sdk.permissions.submitSignedRegisterGrantee(\n // typedData as unknown as RegisterGranteeTypedData,\n // signature,\n // );\n\n case \"ServerFilesAndPermission\":\n return sdk.permissions.submitSignedAddServerFilesAndPermissions(\n typedData as unknown as ServerFilesAndPermissionTypedData,\n signature,\n );\n\n default:\n throw new Error(`Unsupported operation type: ${typedData.primaryType}`);\n }\n}\n"],"mappings":"AACA,SAAS,yBAAyB,kBAAkB;AAWpD,SAAS,sBAAsB;AAyG/B,eAAsB,qBACpB,KACA,SACuE;AACvE,QAAM,EAAE,WAAW,WAAW,oBAAoB,IAAI;AAEtD,UAAQ,MAAM;AAAA,IACZ,QAAQ,UAAU;AAAA,IAClB,OAAO,UAAU;AAAA,IACjB,aAAa,UAAU;AAAA,IACvB,SAAS,UAAU;AAAA,IACnB;AAAA,EACF,CAAC;AAGD,QAAM,gBAAgB,MAAM,wBAAwB;AAAA,IAClD,QAAQ,UAAU;AAAA,IAClB,OAAO,UAAU;AAAA,IACjB,aAAa,UAAU;AAAA,IACvB,SAAS,UAAU;AAAA,IACnB;AAAA,EACF,CAAC;AAED,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAGA,MAAI,qBAAqB;AACvB,UAAM,mBAAmB,WAAW,aAAa;AACjD,UAAM,qBAAqB,WAAW,mBAAmB;AAEzD,QAAI,qBAAqB,oBAAoB;AAC3C,YAAM,IAAI;AAAA,QACR,2DAA2D,gBAAgB,2CAA2C,kBAAkB;AAAA,MAC1I;AAAA,IACF;AAAA,EACF;AAIA,QAAM,cAAc,UAAU;AAO9B,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUF,KAAK;AACH,aAAO,IAAI,YAAY;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IAEF;AACE,YAAM,IAAI,MAAM,+BAA+B,UAAU,WAAW,EAAE;AAAA,EAC1E;AACF;","names":[]}
|
|
File without changes
|