Skip to content

Commit 2d35b52

Browse files
authored
Remove development constants from production artifacts (#148)
* move constants to env * snap manifest * update github workflow with new env
1 parent 9216243 commit 2d35b52

File tree

12 files changed

+81
-40
lines changed

12 files changed

+81
-40
lines changed

.github/workflows/build-lint-test.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ env:
99
STORE_PERMISSIONS_ENABLED: ${{ vars.STORE_PERMISSIONS_ENABLED }}
1010
ACCOUNT_API_BASE_URL: ${{ vars.ACCOUNT_API_BASE_URL }}
1111
SUPPORTED_CHAINS: ${{ vars.SUPPORTED_CHAINS }}
12+
GATOR_PERMISSIONS_PROVIDER_SNAP_ID: ${{ vars.GATOR_PERMISSIONS_PROVIDER_SNAP_ID }}
13+
MESSAGE_SIGNING_SNAP_ID: ${{ vars.MESSAGE_SIGNING_SNAP_ID }}
14+
KERNEL_SNAP_ID: ${{ vars.KERNEL_SNAP_ID }}
1215

1316
jobs:
1417
prepare:

.github/workflows/publish-release.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ jobs:
1919
PRICE_API_BASE_URL: ${{ vars.PRICE_API_BASE_URL }}
2020
STORE_PERMISSIONS_ENABLED: ${{ vars.STORE_PERMISSIONS_ENABLED }}
2121
SUPPORTED_CHAINS: ${{ vars.SUPPORTED_CHAINS }}
22+
GATOR_PERMISSIONS_PROVIDER_SNAP_ID: ${{ vars.GATOR_PERMISSIONS_PROVIDER_SNAP_ID }}
23+
MESSAGE_SIGNING_SNAP_ID: ${{ vars.MESSAGE_SIGNING_SNAP_ID }}
24+
KERNEL_SNAP_ID: ${{ vars.KERNEL_SNAP_ID }}
2225
steps:
2326
- name: Checkout and setup environment
2427
uses: MetaMask/action-checkout-and-setup@v1

packages/gator-permissions-snap/.env.example

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,15 @@ STORE_PERMISSIONS_ENABLED=false
1212
# Set `SUPPORTED_CHAINS` to comma separated values to support multiple chains.
1313
SUPPORTED_CHAINS=11155111
1414

15+
# Snap Ids
16+
KERNEL_SNAP_ID=local:http://localhost:8081
17+
MESSAGE_SIGNING_SNAP_ID=local:http://localhost:8080
18+
19+
1520
# Prod
1621
SNAP_ENV=production
1722
STORE_PERMISSIONS_ENABLED=false
1823
PRICE_API_BASE_URL=https://price.api.cx.metamask.io
19-
ACCOUNT_API_BASE_URL=https://account.api.cx.metamask.io
24+
ACCOUNT_API_BASE_URL=https://account.api.cx.metamask.io
25+
KERNEL_SNAP_ID=npm:@metamask/permissions-kernel-snap
26+
MESSAGE_SIGNING_SNAP_ID=npm:@metamask/message-signing-snap

packages/gator-permissions-snap/snap.config.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,26 @@ const {
1212
STORE_PERMISSIONS_ENABLED,
1313
ACCOUNT_API_BASE_URL,
1414
SUPPORTED_CHAINS,
15+
KERNEL_SNAP_ID,
16+
MESSAGE_SIGNING_SNAP_ID,
1517
} = process.env;
1618

1719
if (!SNAP_ENV) {
1820
throw new InternalError('SNAP_ENV must be set as an environment variable.');
1921
}
2022

23+
if (!KERNEL_SNAP_ID) {
24+
throw new InternalError(
25+
'KERNEL_SNAP_ID must be set as an environment variable.',
26+
);
27+
}
28+
29+
if (!MESSAGE_SIGNING_SNAP_ID) {
30+
throw new InternalError(
31+
'MESSAGE_SIGNING_SNAP_ID must be set as an environment variable.',
32+
);
33+
}
34+
2135
if (!PRICE_API_BASE_URL) {
2236
throw new InternalError(
2337
'PRICE_API_BASE_URL must be set as an environment variable.',
@@ -66,6 +80,8 @@ const config: SnapConfig = {
6680
STORE_PERMISSIONS_ENABLED,
6781
ACCOUNT_API_BASE_URL,
6882
SUPPORTED_CHAINS,
83+
KERNEL_SNAP_ID,
84+
MESSAGE_SIGNING_SNAP_ID,
6985
},
7086
};
7187

packages/gator-permissions-snap/src/index.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
/* eslint-disable no-restricted-globals */
2-
import { MESSAGE_SIGNING_SNAP_ID } from '@metamask/7715-permissions-shared/constants';
32
import type { GetSnapsResponse } from '@metamask/7715-permissions-shared/types';
43
import { logger } from '@metamask/7715-permissions-shared/utils';
54
import {
@@ -64,6 +63,11 @@ if (!supportedChainsString) {
6463
throw new InternalError('SUPPORTED_CHAINS is not set');
6564
}
6665

66+
const messageSigningSnapId = process.env.MESSAGE_SIGNING_SNAP_ID;
67+
if (!messageSigningSnapId) {
68+
throw new InternalError('MESSAGE_SIGNING_SNAP_ID is not set');
69+
}
70+
6771
const supportedChains = supportedChainsString.split(',').map(Number);
6872

6973
// set up dependencies
@@ -99,7 +103,7 @@ const stateManager = createStateManager(snap);
99103
const profileSyncOptions = createProfileSyncOptions(
100104
stateManager,
101105
snap,
102-
MESSAGE_SIGNING_SNAP_ID,
106+
messageSigningSnapId,
103107
);
104108

105109
const profileSyncSdkEnv = getProfileSyncSdkEnv(snapEnv);
@@ -247,12 +251,12 @@ export const onInstall: OnInstallHandler = async () => {
247251
const installedSnaps = (await snap.request({
248252
method: 'wallet_getSnaps',
249253
})) as unknown as GetSnapsResponse;
250-
if (!installedSnaps[MESSAGE_SIGNING_SNAP_ID]) {
254+
if (!installedSnaps[messageSigningSnapId]) {
251255
logger.debug('Installing local message signing snap');
252256
await snap.request({
253257
method: 'wallet_requestSnaps',
254258
params: {
255-
[MESSAGE_SIGNING_SNAP_ID]: {},
259+
[messageSigningSnapId]: {},
256260
},
257261
});
258262
}

packages/gator-permissions-snap/src/rpc/permissions.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
import { KERNEL_SNAP_ID } from '@metamask/7715-permissions-shared/constants';
2-
31
import { RpcMethod } from './rpcMethod';
42

53
const allowedPermissionsByOrigin: { [origin: string]: string[] } = {
6-
[KERNEL_SNAP_ID]: [
7-
RpcMethod.PermissionProviderGrantPermissions,
8-
RpcMethod.PermissionProviderGetPermissionOffers,
9-
],
4+
// eslint-disable-next-line no-restricted-globals
5+
...(process.env.KERNEL_SNAP_ID && {
6+
// eslint-disable-next-line no-restricted-globals
7+
[process.env.KERNEL_SNAP_ID]: [
8+
RpcMethod.PermissionProviderGrantPermissions,
9+
RpcMethod.PermissionProviderGetPermissionOffers,
10+
],
11+
}),
1012
metamask: [RpcMethod.PermissionProviderGetGrantedPermissions],
1113
};
1214

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
# Local dev
22

3-
# The snap uses `SNAP_ENV` to dynamically map permission provider snapId to registered offers in the `PermissionOfferRegistry`. Please make use `SNAP_ENV=local` before building the snap.
3+
# Env
44
SNAP_ENV=local
5+
# Permissions snap id
6+
GATOR_PERMISSIONS_PROVIDER_SNAP_ID=local:http://localhost:8082
57

68

79
# Prod
8-
SNAP_ENV=production
10+
SNAP_ENV=production
11+
GATOR_PERMISSIONS_PROVIDER_SNAP_ID=npm:@metamask/gator-permissions-snap

packages/permissions-kernel-snap/snap.config.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,18 @@ import { resolve } from 'path';
66
dotenv.config();
77

88
// eslint-disable-next-line n/no-process-env
9-
if (!process.env.SNAP_ENV) {
9+
const { SNAP_ENV, GATOR_PERMISSIONS_PROVIDER_SNAP_ID } = process.env;
10+
11+
if (!SNAP_ENV) {
1012
throw new InternalError('SNAP_ENV must be set as an environment variable.');
1113
}
1214

15+
if (!GATOR_PERMISSIONS_PROVIDER_SNAP_ID) {
16+
throw new InternalError(
17+
'GATOR_PERMISSIONS_PROVIDER_SNAP_ID must be set as an environment variable.',
18+
);
19+
}
20+
1321
const config: SnapConfig = {
1422
input: resolve(__dirname, 'src/index.ts'),
1523
server: {
@@ -20,8 +28,8 @@ const config: SnapConfig = {
2028
crypto: true,
2129
},
2230
environment: {
23-
// eslint-disable-next-line n/no-process-env
24-
SNAP_ENV: process.env.SNAP_ENV,
31+
SNAP_ENV,
32+
GATOR_PERMISSIONS_PROVIDER_SNAP_ID,
2533
},
2634
};
2735

packages/permissions-kernel-snap/src/rpc/rpcHandler.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { GATOR_PERMISSIONS_PROVIDER_SNAP_ID } from '@metamask/7715-permissions-shared/constants';
21
import { logger } from '@metamask/7715-permissions-shared/utils';
32
import {
3+
InternalError,
44
InvalidInputError,
55
type Json,
66
type SnapsProvider,
@@ -62,10 +62,20 @@ export function createRpcHandler(config: {
6262
options.params,
6363
);
6464

65+
const gatorPermissionsProviderSnapId =
66+
// eslint-disable-next-line no-restricted-globals
67+
process.env.GATOR_PERMISSIONS_PROVIDER_SNAP_ID;
68+
69+
if (!gatorPermissionsProviderSnapId) {
70+
throw new InternalError(
71+
'GATOR_PERMISSIONS_PROVIDER_SNAP_ID must be set as an environment variable.',
72+
);
73+
}
74+
6575
// We only want gator-permissions-snap for now but we will use more snaps in the future
6676
const permissionOfferRegistry =
6777
await permissionOfferRegistryManager.buildPermissionOffersRegistry(
68-
GATOR_PERMISSIONS_PROVIDER_SNAP_ID,
78+
gatorPermissionsProviderSnapId,
6979
);
7080

7181
// Find the relevant permissions to grant by filtering against the registered offers
@@ -85,7 +95,7 @@ export function createRpcHandler(config: {
8595
const grantedPermissions = await snapsProvider.request({
8696
method: 'wallet_invokeSnap',
8797
params: {
88-
snapId: GATOR_PERMISSIONS_PROVIDER_SNAP_ID, // We only want gator-permissions-snap for now but we will use more snaps in the future
98+
snapId: gatorPermissionsProviderSnapId, // We only want gator-permissions-snap for now but we will use more snaps in the future
8999
request: {
90100
method: ExternalMethod.PermissionProviderGrantPermissions,
91101
params: {

packages/permissions-kernel-snap/test/registryManager.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { GATOR_PERMISSIONS_PROVIDER_SNAP_ID } from '@metamask/7715-permissions-shared/constants';
21
import { createMockSnapsProvider } from '@metamask/7715-permissions-shared/testing';
32
import type { PermissionsRequest } from '@metamask/7715-permissions-shared/types';
43
import { logger } from '@metamask/7715-permissions-shared/utils';
@@ -12,7 +11,10 @@ import { ExternalMethod } from '../src/rpc/rpcMethod';
1211
describe('PermissionOfferRegistryManager', () => {
1312
let permissionOfferRegistryManager: PermissionOfferRegistryManager;
1413
const mockSnapsProvider = createMockSnapsProvider();
15-
const mockSnapId = GATOR_PERMISSIONS_PROVIDER_SNAP_ID;
14+
const mockSnapId =
15+
// eslint-disable-next-line no-restricted-globals
16+
process.env.GATOR_PERMISSIONS_PROVIDER_SNAP_ID ??
17+
'local:http://localhost:8082';
1618

1719
beforeEach(() => {
1820
mockSnapsProvider.request.mockReset();

0 commit comments

Comments
 (0)