summaryrefslogtreecommitdiff
path: root/cli/js/permissions.ts
blob: 03c7b763d10d683918e61b42dd33b8025bb825e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import * as permissionsOps from "./ops/permissions.ts";

export type PermissionName =
  | "read"
  | "write"
  | "net"
  | "env"
  | "run"
  | "plugin"
  | "hrtime";
// NOTE: Keep in sync with cli/permissions.rs

export type PermissionState = "granted" | "denied" | "prompt";

export interface RunPermissionDescriptor {
  name: "run";
}

export interface ReadPermissionDescriptor {
  name: "read";
  path?: string;
}

export interface WritePermissionDescriptor {
  name: "write";
  path?: string;
}

export interface NetPermissionDescriptor {
  name: "net";
  url?: string;
}

export interface EnvPermissionDescriptor {
  name: "env";
}

export interface PluginPermissionDescriptor {
  name: "plugin";
}

export interface HrtimePermissionDescriptor {
  name: "hrtime";
}

export type PermissionDescriptor =
  | RunPermissionDescriptor
  | ReadPermissionDescriptor
  | WritePermissionDescriptor
  | NetPermissionDescriptor
  | EnvPermissionDescriptor
  | PluginPermissionDescriptor
  | HrtimePermissionDescriptor;

export class PermissionStatus {
  constructor(public state: PermissionState) {}
  // TODO(kt3k): implement onchange handler
}

export class Permissions {
  query(desc: PermissionDescriptor): Promise<PermissionStatus> {
    const state = permissionsOps.query(desc);
    return Promise.resolve(new PermissionStatus(state));
  }

  revoke(desc: PermissionDescriptor): Promise<PermissionStatus> {
    const state = permissionsOps.revoke(desc);
    return Promise.resolve(new PermissionStatus(state));
  }

  request(desc: PermissionDescriptor): Promise<PermissionStatus> {
    const state = permissionsOps.request(desc);
    return Promise.resolve(new PermissionStatus(state));
  }
}

export const permissions = new Permissions();