@metamask/snaps-rpc-methods
Version:
MetaMask Snaps JSON-RPC method implementations
70 lines • 2.22 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getImplementation = exports.getPreferencesBuilder = exports.specificationBuilder = void 0;
const permission_controller_1 = require("@metamask/permission-controller");
const methodName = 'snap_getPreferences';
/**
* The specification builder for the `snap_getPreferences` permission.
* `snap_getPreferences` allows snaps to access user preferences.
*
* @param options - The specification builder options.
* @param options.allowedCaveats - The optional allowed caveats for the permission.
* @param options.methodHooks - The RPC method hooks needed by the method implementation.
* @returns The specification for the `snap_getPreferences` permission.
*/
const specificationBuilder = ({ allowedCaveats = null, methodHooks }) => {
return {
permissionType: permission_controller_1.PermissionType.RestrictedMethod,
targetName: methodName,
allowedCaveats,
methodImplementation: getImplementation(methodHooks),
subjectTypes: [permission_controller_1.SubjectType.Snap],
};
};
exports.specificationBuilder = specificationBuilder;
const methodHooks = {
getPreferences: true,
};
/**
* Gets the user's preferences.
*
* @example
* ```json name="Manifest"
* {
* "initialPermissions": {
* "snap_getPreferences": {}
* }
* }
* ```
* ```ts name="Usage"
* const preferences = await snap.request({
* method: 'snap_getPreferences',
* });
*
* console.log(preferences);
* // {
* // locale: 'en',
* // currency: 'usd',
* // ...
* // }
* ```
*/
exports.getPreferencesBuilder = Object.freeze({
targetName: methodName,
specificationBuilder: exports.specificationBuilder,
methodHooks,
});
/**
* Builds the method implementation for `snap_getPreferences`.
*
* @param hooks - The RPC method hooks.
* @param hooks.getPreferences - A function that returns the user selected preferences.
* @returns The user preferences.
*/
function getImplementation({ getPreferences, }) {
return async function implementation(_args) {
return getPreferences();
};
}
exports.getImplementation = getImplementation;
//# sourceMappingURL=getPreferences.cjs.map