@atproto/oauth-scopes 0.0.2 → 0.2.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/CHANGELOG.md +38 -0
- package/dist/atproto-oauth-scope.d.ts +17 -0
- package/dist/atproto-oauth-scope.d.ts.map +1 -0
- package/dist/atproto-oauth-scope.js +67 -0
- package/dist/atproto-oauth-scope.js.map +1 -0
- package/dist/index.d.ts +9 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -13
- package/dist/index.js.map +1 -1
- package/dist/lib/lexicon.d.ts +2 -0
- package/dist/lib/lexicon.d.ts.map +1 -0
- package/dist/lib/lexicon.js +3 -0
- package/dist/lib/lexicon.js.map +1 -0
- package/dist/lib/mime.d.ts +1 -1
- package/dist/lib/mime.d.ts.map +1 -1
- package/dist/lib/mime.js +2 -0
- package/dist/lib/mime.js.map +1 -1
- package/dist/lib/nsid.d.ts +2 -2
- package/dist/lib/nsid.d.ts.map +1 -1
- package/dist/lib/nsid.js +4 -6
- package/dist/lib/nsid.js.map +1 -1
- package/dist/lib/parser.d.ts +29 -0
- package/dist/lib/parser.d.ts.map +1 -0
- package/dist/lib/parser.js +152 -0
- package/dist/lib/parser.js.map +1 -0
- package/dist/lib/resource-permission.d.ts +10 -0
- package/dist/lib/resource-permission.d.ts.map +1 -0
- package/dist/lib/resource-permission.js +3 -0
- package/dist/lib/resource-permission.js.map +1 -0
- package/dist/lib/syntax-lexicon.d.ts +26 -0
- package/dist/lib/syntax-lexicon.d.ts.map +1 -0
- package/dist/lib/syntax-lexicon.js +58 -0
- package/dist/lib/syntax-lexicon.js.map +1 -0
- package/dist/lib/syntax-string.d.ts +16 -0
- package/dist/lib/syntax-string.d.ts.map +1 -0
- package/dist/lib/syntax-string.js +121 -0
- package/dist/lib/syntax-string.js.map +1 -0
- package/dist/lib/syntax.d.ts +23 -0
- package/dist/lib/syntax.d.ts.map +1 -0
- package/dist/lib/syntax.js +22 -0
- package/dist/lib/syntax.js.map +1 -0
- package/dist/lib/util.d.ts +5 -1
- package/dist/lib/util.d.ts.map +1 -1
- package/dist/lib/util.js +8 -12
- package/dist/lib/util.js.map +1 -1
- package/dist/scope-permissions-transition.d.ts +15 -0
- package/dist/scope-permissions-transition.d.ts.map +1 -0
- package/dist/{permission-set-transition.js → scope-permissions-transition.js} +5 -5
- package/dist/scope-permissions-transition.js.map +1 -0
- package/dist/scope-permissions.d.ts +22 -0
- package/dist/scope-permissions.d.ts.map +1 -0
- package/dist/{permission-set.js → scope-permissions.js} +20 -16
- package/dist/scope-permissions.js.map +1 -0
- package/dist/scopes/account-permission.d.ts +35 -0
- package/dist/scopes/account-permission.d.ts.map +1 -0
- package/dist/scopes/account-permission.js +71 -0
- package/dist/scopes/account-permission.js.map +1 -0
- package/dist/scopes/blob-permission.d.ts +27 -0
- package/dist/scopes/blob-permission.d.ts.map +1 -0
- package/dist/scopes/blob-permission.js +86 -0
- package/dist/scopes/blob-permission.js.map +1 -0
- package/dist/scopes/identity-permission.d.ts +25 -0
- package/dist/scopes/identity-permission.d.ts.map +1 -0
- package/dist/scopes/identity-permission.js +53 -0
- package/dist/scopes/identity-permission.js.map +1 -0
- package/dist/scopes/include-scope.d.ts +54 -0
- package/dist/scopes/include-scope.d.ts.map +1 -0
- package/dist/scopes/include-scope.js +156 -0
- package/dist/scopes/include-scope.js.map +1 -0
- package/dist/scopes/repo-permission.d.ts +40 -0
- package/dist/scopes/repo-permission.d.ts.map +1 -0
- package/dist/scopes/repo-permission.js +101 -0
- package/dist/scopes/repo-permission.js.map +1 -0
- package/dist/scopes/rpc-permission.d.ts +38 -0
- package/dist/scopes/rpc-permission.d.ts.map +1 -0
- package/dist/scopes/rpc-permission.js +81 -0
- package/dist/scopes/rpc-permission.js.map +1 -0
- package/dist/scopes-set.d.ts +12 -1
- package/dist/scopes-set.d.ts.map +1 -1
- package/dist/scopes-set.js +49 -3
- package/dist/scopes-set.js.map +1 -1
- package/package.json +7 -3
- package/src/atproto-oauth-scope.ts +79 -0
- package/src/index.ts +10 -14
- package/src/lib/lexicon.ts +1 -0
- package/src/lib/mime.ts +2 -1
- package/src/lib/nsid.ts +5 -6
- package/src/lib/parser.ts +176 -0
- package/src/lib/resource-permission.ts +10 -0
- package/src/lib/syntax-lexicon.ts +55 -0
- package/src/lib/syntax-string.test.ts +130 -0
- package/src/lib/syntax-string.ts +132 -0
- package/src/lib/syntax.test.ts +43 -0
- package/src/lib/syntax.ts +47 -0
- package/src/lib/util.ts +11 -12
- package/src/{permission-set-transition.test.ts → scope-permissions-transition.test.ts} +33 -20
- package/src/{permission-set-transition.ts → scope-permissions-transition.ts} +11 -11
- package/src/{permission-set.test.ts → scope-permissions.test.ts} +77 -35
- package/src/scope-permissions.ts +91 -0
- package/src/{resources/account-scope.test.ts → scopes/account-permission.test.ts} +45 -33
- package/src/scopes/account-permission.ts +75 -0
- package/src/{resources/blob-scope.test.ts → scopes/blob-permission.test.ts} +31 -23
- package/src/scopes/blob-permission.ts +105 -0
- package/src/{resources/identity-scope.test.ts → scopes/identity-permission.test.ts} +13 -13
- package/src/scopes/identity-permission.ts +54 -0
- package/src/scopes/include-scope.test.ts +626 -0
- package/src/scopes/include-scope.ts +168 -0
- package/src/{resources/repo-scope.test.ts → scopes/repo-permission.test.ts} +77 -65
- package/src/scopes/repo-permission.ts +111 -0
- package/src/scopes/rpc-permission.test.ts +323 -0
- package/src/scopes/rpc-permission.ts +85 -0
- package/src/scopes-set.test.ts +5 -5
- package/src/scopes-set.ts +79 -5
- package/tsconfig.build.tsbuildinfo +1 -1
- package/tsconfig.tests.tsbuildinfo +1 -1
- package/dist/lib/did.d.ts +0 -3
- package/dist/lib/did.d.ts.map +0 -1
- package/dist/lib/did.js +0 -6
- package/dist/lib/did.js.map +0 -1
- package/dist/parser.d.ts +0 -31
- package/dist/parser.d.ts.map +0 -1
- package/dist/parser.js +0 -118
- package/dist/parser.js.map +0 -1
- package/dist/permission-set-transition.d.ts +0 -15
- package/dist/permission-set-transition.d.ts.map +0 -1
- package/dist/permission-set-transition.js.map +0 -1
- package/dist/permission-set.d.ts +0 -22
- package/dist/permission-set.d.ts.map +0 -1
- package/dist/permission-set.js.map +0 -1
- package/dist/resources/account-scope.d.ts +0 -35
- package/dist/resources/account-scope.d.ts.map +0 -1
- package/dist/resources/account-scope.js +0 -60
- package/dist/resources/account-scope.js.map +0 -1
- package/dist/resources/blob-scope.d.ts +0 -25
- package/dist/resources/blob-scope.d.ts.map +0 -1
- package/dist/resources/blob-scope.js +0 -74
- package/dist/resources/blob-scope.js.map +0 -1
- package/dist/resources/identity-scope.d.ts +0 -25
- package/dist/resources/identity-scope.d.ts.map +0 -1
- package/dist/resources/identity-scope.js +0 -46
- package/dist/resources/identity-scope.js.map +0 -1
- package/dist/resources/repo-scope.d.ts +0 -37
- package/dist/resources/repo-scope.d.ts.map +0 -1
- package/dist/resources/repo-scope.js +0 -92
- package/dist/resources/repo-scope.js.map +0 -1
- package/dist/resources/rpc-scope.d.ts +0 -31
- package/dist/resources/rpc-scope.d.ts.map +0 -1
- package/dist/resources/rpc-scope.js +0 -74
- package/dist/resources/rpc-scope.js.map +0 -1
- package/dist/syntax.d.ts +0 -76
- package/dist/syntax.d.ts.map +0 -1
- package/dist/syntax.js +0 -249
- package/dist/syntax.js.map +0 -1
- package/dist/utilities.d.ts +0 -17
- package/dist/utilities.d.ts.map +0 -1
- package/dist/utilities.js +0 -108
- package/dist/utilities.js.map +0 -1
- package/src/lib/did.ts +0 -3
- package/src/parser.ts +0 -150
- package/src/permission-set.ts +0 -78
- package/src/resources/account-scope.ts +0 -66
- package/src/resources/blob-scope.ts +0 -86
- package/src/resources/identity-scope.ts +0 -49
- package/src/resources/repo-scope.ts +0 -101
- package/src/resources/rpc-scope.test.ts +0 -280
- package/src/resources/rpc-scope.ts +0 -77
- package/src/syntax.test.ts +0 -203
- package/src/syntax.ts +0 -325
- package/src/utilities.ts +0 -109
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ScopeStringFor, ScopeSyntax } from './syntax.js';
|
|
2
|
+
/**
|
|
3
|
+
* Translates a scope string into a {@link ScopeSyntax}.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ScopeStringSyntax<P extends string> implements ScopeSyntax<P> {
|
|
6
|
+
readonly prefix: P;
|
|
7
|
+
readonly positional?: string | undefined;
|
|
8
|
+
readonly params?: Readonly<URLSearchParams> | undefined;
|
|
9
|
+
constructor(prefix: P, positional?: string | undefined, params?: Readonly<URLSearchParams> | undefined);
|
|
10
|
+
keys(): Generator<string, void, unknown>;
|
|
11
|
+
getSingle(key: string): string | null | undefined;
|
|
12
|
+
getMulti(key: string): string[] | undefined;
|
|
13
|
+
toString(): ScopeStringFor<P>;
|
|
14
|
+
static fromString<P extends string>(scopeValue: ScopeStringFor<P>): ScopeStringSyntax<P>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=syntax-string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-string.d.ts","sourceRoot":"","sources":["../../src/lib/syntax-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGzD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAEtE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;gBAFlC,MAAM,EAAE,CAAC,EACT,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,MAAM,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,YAAA;IAG5C,IAAI;IAIL,SAAS,CAAC,GAAG,EAAE,MAAM;IAOrB,QAAQ,CAAC,GAAG,EAAE,MAAM;IAKpB,QAAQ,IAWU,cAAc,CAAC,CAAC,CAAC;IAGnC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,MAAM,EAChC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,GAC5B,iBAAiB,CAAC,CAAC,CAAC;CA8BxB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScopeStringSyntax = void 0;
|
|
4
|
+
const util_js_1 = require("./util.js");
|
|
5
|
+
/**
|
|
6
|
+
* Translates a scope string into a {@link ScopeSyntax}.
|
|
7
|
+
*/
|
|
8
|
+
class ScopeStringSyntax {
|
|
9
|
+
constructor(prefix, positional, params) {
|
|
10
|
+
Object.defineProperty(this, "prefix", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: prefix
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "positional", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: positional
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "params", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: params
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
*keys() {
|
|
30
|
+
if (this.params)
|
|
31
|
+
yield* this.params.keys();
|
|
32
|
+
}
|
|
33
|
+
getSingle(key) {
|
|
34
|
+
if (!this.params?.has(key))
|
|
35
|
+
return undefined;
|
|
36
|
+
const value = this.params.getAll(key);
|
|
37
|
+
if (value.length > 1)
|
|
38
|
+
return null;
|
|
39
|
+
return value[0];
|
|
40
|
+
}
|
|
41
|
+
getMulti(key) {
|
|
42
|
+
if (!this.params?.has(key))
|
|
43
|
+
return undefined;
|
|
44
|
+
return this.params.getAll(key);
|
|
45
|
+
}
|
|
46
|
+
toString() {
|
|
47
|
+
let scope = this.prefix;
|
|
48
|
+
if (this.positional !== undefined) {
|
|
49
|
+
scope += `:${normalizeURIComponent(encodeURIComponent(this.positional))}`;
|
|
50
|
+
}
|
|
51
|
+
if (this.params?.size) {
|
|
52
|
+
scope += `?${normalizeURIComponent(this.params.toString())}`;
|
|
53
|
+
}
|
|
54
|
+
return scope;
|
|
55
|
+
}
|
|
56
|
+
static fromString(scopeValue) {
|
|
57
|
+
const paramIdx = scopeValue.indexOf('?');
|
|
58
|
+
const colonIdx = scopeValue.indexOf(':');
|
|
59
|
+
const prefixEnd = (0, util_js_1.minIdx)(paramIdx, colonIdx);
|
|
60
|
+
// No param or positional
|
|
61
|
+
if (prefixEnd === -1) {
|
|
62
|
+
return new ScopeStringSyntax(scopeValue);
|
|
63
|
+
}
|
|
64
|
+
const prefix = scopeValue.slice(0, prefixEnd);
|
|
65
|
+
// Parse the positional parameter if present
|
|
66
|
+
const positional = colonIdx !== -1
|
|
67
|
+
? paramIdx === -1
|
|
68
|
+
? decodeURIComponent(scopeValue.slice(colonIdx + 1))
|
|
69
|
+
: colonIdx < paramIdx
|
|
70
|
+
? decodeURIComponent(scopeValue.slice(colonIdx + 1, paramIdx))
|
|
71
|
+
: undefined
|
|
72
|
+
: undefined;
|
|
73
|
+
// Parse the query string if present and non empty
|
|
74
|
+
const params = paramIdx !== -1 && paramIdx < scopeValue.length - 1
|
|
75
|
+
? new URLSearchParams(scopeValue.slice(paramIdx + 1))
|
|
76
|
+
: undefined;
|
|
77
|
+
return new ScopeStringSyntax(prefix, positional, params);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.ScopeStringSyntax = ScopeStringSyntax;
|
|
81
|
+
/**
|
|
82
|
+
* Set of characters that are allowed in scope components without encoding. This
|
|
83
|
+
* is used to normalize scope components.
|
|
84
|
+
*/
|
|
85
|
+
const ALLOWED_SCOPE_CHARS = new Set(
|
|
86
|
+
// @NOTE This list must not contain "?" or "&" as it would interfere with
|
|
87
|
+
// query string parsing.
|
|
88
|
+
[':', '/', '+', ',', '@', '%']);
|
|
89
|
+
const NORMALIZABLE_CHARS_MAP = new Map(Array.from(ALLOWED_SCOPE_CHARS, (c) => [encodeURIComponent(c), c]).filter(([encoded, c]) =>
|
|
90
|
+
// Make sure that any char added to ALLOWED_SCOPE_CHARS that is a char
|
|
91
|
+
// that indeed needs encoding. Also, the normalizeURIComponent only
|
|
92
|
+
// supports three-character percent-encoded sequences.
|
|
93
|
+
encoded !== c && encoded.length === 3 && encoded.startsWith('%')));
|
|
94
|
+
/**
|
|
95
|
+
* Assumes a properly url-encoded string.
|
|
96
|
+
*/
|
|
97
|
+
function normalizeURIComponent(value) {
|
|
98
|
+
// No need to read the last two characters since percent encoded characters
|
|
99
|
+
// are always three characters long.
|
|
100
|
+
let end = value.length - 2;
|
|
101
|
+
for (let i = 0; i < end; i++) {
|
|
102
|
+
// Check if the character is a percent-encoded character
|
|
103
|
+
if (value.charCodeAt(i) === 0x25 /* % */) {
|
|
104
|
+
// Read the next encoded char. Current version only supports
|
|
105
|
+
// three-character percent-encoded sequences.
|
|
106
|
+
const encodedChar = value.slice(i, i + 3);
|
|
107
|
+
// Check if the encoded character is in the normalization map
|
|
108
|
+
const normalizedChar = NORMALIZABLE_CHARS_MAP.get(encodedChar);
|
|
109
|
+
if (normalizedChar) {
|
|
110
|
+
// Replace the encoded character with its normalized version
|
|
111
|
+
value = `${value.slice(0, i)}${normalizedChar}${value.slice(i + encodedChar.length)}`;
|
|
112
|
+
// Adjust index to account for the length change
|
|
113
|
+
i += normalizedChar.length - 1;
|
|
114
|
+
// Adjust end index since we replaced encoded char with normalized char
|
|
115
|
+
end -= encodedChar.length - normalizedChar.length;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return value;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=syntax-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-string.js","sourceRoot":"","sources":["../../src/lib/syntax-string.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type ParamValue = string | number | boolean;
|
|
2
|
+
export type NeArray<T> = [T, ...T[]];
|
|
3
|
+
/**
|
|
4
|
+
* Non-empty readonly array
|
|
5
|
+
*/
|
|
6
|
+
export type NeRoArray<T> = readonly [T, ...T[]];
|
|
7
|
+
export type ScopeStringFor<P extends string> = P | `${P}:${string}` | `${P}?${string}`;
|
|
8
|
+
/**
|
|
9
|
+
* Allows to quickly check if a scope is for a specific resource.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isScopeStringFor<P extends string>(value: string, prefix: P): value is ScopeStringFor<P>;
|
|
12
|
+
/**
|
|
13
|
+
* Abstract interface that allows parsing various syntaxes into permission
|
|
14
|
+
* representations.
|
|
15
|
+
*/
|
|
16
|
+
export interface ScopeSyntax<P extends string> {
|
|
17
|
+
readonly prefix: P;
|
|
18
|
+
readonly positional?: ParamValue;
|
|
19
|
+
keys(): Iterable<string, void, unknown>;
|
|
20
|
+
getSingle(key: string): ParamValue | null | undefined;
|
|
21
|
+
getMulti(key: string): ParamValue[] | null | undefined;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=syntax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../src/lib/syntax.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAElD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;AAEpC;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;AAE/C,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,IACvC,CAAC,GACD,GAAG,CAAC,IAAI,MAAM,EAAE,GAChB,GAAG,CAAC,IAAI,MAAM,EAAE,CAAA;AAEpB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAC/C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,GACR,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,CAc5B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM;IAC3C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IAClB,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC,IAAI,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,GAAG,SAAS,CAAA;CACvD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isScopeStringFor = isScopeStringFor;
|
|
4
|
+
/**
|
|
5
|
+
* Allows to quickly check if a scope is for a specific resource.
|
|
6
|
+
*/
|
|
7
|
+
function isScopeStringFor(value, prefix) {
|
|
8
|
+
if (value.length > prefix.length) {
|
|
9
|
+
// First, check the next char is either : or ?
|
|
10
|
+
const nextChar = value.charCodeAt(prefix.length);
|
|
11
|
+
if (nextChar !== 0x3a /* : */ && nextChar !== 0x3f /* ? */) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
// Then check the full prefix
|
|
15
|
+
return value.startsWith(prefix);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
// value and prefix must be equal
|
|
19
|
+
return value === prefix;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=syntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../src/lib/syntax.ts"],"names":[],"mappings":";;AAiBA,4CAiBC;AApBD;;GAEG;AACH,SAAgB,gBAAgB,CAC9B,KAAa,EACb,MAAS;IAET,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAChD,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3D,OAAO,KAAK,CAAA;QACd,CAAC;QAED,6BAA6B;QAC7B,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;SAAM,CAAC;QACN,iCAAiC;QACjC,OAAO,KAAK,KAAK,MAAM,CAAA;IACzB,CAAC;AACH,CAAC"}
|
package/dist/lib/util.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export interface Matchable<T> {
|
|
2
|
+
matches(options: T): boolean;
|
|
3
|
+
}
|
|
1
4
|
export declare function minIdx(a: number, b: number): number;
|
|
2
|
-
export declare function
|
|
5
|
+
export declare function knownValuesValidator<T>(values: Iterable<T>): (value: unknown) => value is T;
|
|
6
|
+
export declare function isNonNullable<T>(value: T): value is NonNullable<T>;
|
|
3
7
|
//# sourceMappingURL=util.d.ts.map
|
package/dist/lib/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/lib/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/lib/util.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAA;CAC7B;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAInD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAEjD,OAAO,OAAO,KAAG,KAAK,IAAI,CAAC,CACpC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAElE"}
|
package/dist/lib/util.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.minIdx = minIdx;
|
|
4
|
-
exports.
|
|
4
|
+
exports.knownValuesValidator = knownValuesValidator;
|
|
5
|
+
exports.isNonNullable = isNonNullable;
|
|
5
6
|
function minIdx(a, b) {
|
|
6
7
|
if (a === -1)
|
|
7
8
|
return b;
|
|
@@ -9,16 +10,11 @@ function minIdx(a, b) {
|
|
|
9
10
|
return a;
|
|
10
11
|
return Math.min(a, b);
|
|
11
12
|
}
|
|
12
|
-
function
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
else {
|
|
19
|
-
record[key] = [value];
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return record;
|
|
13
|
+
function knownValuesValidator(values) {
|
|
14
|
+
const set = new Set(values);
|
|
15
|
+
return (value) => set.has(value);
|
|
16
|
+
}
|
|
17
|
+
function isNonNullable(value) {
|
|
18
|
+
return value != null;
|
|
23
19
|
}
|
|
24
20
|
//# sourceMappingURL=util.js.map
|
package/dist/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/lib/util.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/lib/util.ts"],"names":[],"mappings":";;AAIA,wBAIC;AAED,oDAGC;AAED,sCAEC;AAbD,SAAgB,MAAM,CAAC,CAAS,EAAE,CAAS;IACzC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IACtB,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IACtB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACvB,CAAC;AAED,SAAgB,oBAAoB,CAAI,MAAmB;IACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAU,MAAM,CAAC,CAAA;IACpC,OAAO,CAAC,KAAc,EAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACvD,CAAC;AAED,SAAgB,aAAa,CAAI,KAAQ;IACvC,OAAO,KAAK,IAAI,IAAI,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AccountPermissionMatch, BlobPermissionMatch, RepoPermissionMatch, RpcPermissionMatch, ScopePermissions } from './scope-permissions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Overrides the default permission set to allow transitional scopes to be used
|
|
4
|
+
* in place of the generic scopes.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ScopePermissionsTransition extends ScopePermissions {
|
|
7
|
+
get hasTransitionGeneric(): boolean;
|
|
8
|
+
get hasTransitionEmail(): boolean;
|
|
9
|
+
get hasTransitionChatBsky(): boolean;
|
|
10
|
+
allowsAccount(options: AccountPermissionMatch): boolean;
|
|
11
|
+
allowsBlob(options: BlobPermissionMatch): boolean;
|
|
12
|
+
allowsRepo(options: RepoPermissionMatch): boolean;
|
|
13
|
+
allowsRpc(options: RpcPermissionMatch): boolean;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=scope-permissions-transition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-permissions-transition.d.ts","sourceRoot":"","sources":["../src/scope-permissions-transition.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,wBAAwB,CAAA;AAE/B;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,IAAI,oBAAoB,IAAI,OAAO,CAElC;IAED,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAED,IAAI,qBAAqB,IAAI,OAAO,CAEnC;IAEQ,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO;IAYvD,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAQjD,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAQjD,SAAS,CAAC,OAAO,EAAE,kBAAkB;CAiB/C"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
3
|
+
exports.ScopePermissionsTransition = void 0;
|
|
4
|
+
const scope_permissions_js_1 = require("./scope-permissions.js");
|
|
5
5
|
/**
|
|
6
6
|
* Overrides the default permission set to allow transitional scopes to be used
|
|
7
7
|
* in place of the generic scopes.
|
|
8
8
|
*/
|
|
9
|
-
class
|
|
9
|
+
class ScopePermissionsTransition extends scope_permissions_js_1.ScopePermissions {
|
|
10
10
|
get hasTransitionGeneric() {
|
|
11
11
|
return this.scopes.has('transition:generic');
|
|
12
12
|
}
|
|
@@ -50,5 +50,5 @@ class PermissionSetTransition extends permission_set_js_1.PermissionSet {
|
|
|
50
50
|
return super.allowsRpc(options);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
-
exports.
|
|
54
|
-
//# sourceMappingURL=
|
|
53
|
+
exports.ScopePermissionsTransition = ScopePermissionsTransition;
|
|
54
|
+
//# sourceMappingURL=scope-permissions-transition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-permissions-transition.js","sourceRoot":"","sources":["../src/scope-permissions-transition.ts"],"names":[],"mappings":";;;AAAA,iEAM+B;AAE/B;;;GAGG;AACH,MAAa,0BAA2B,SAAQ,uCAAgB;IAC9D,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,qBAAqB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAChD,CAAC;IAEQ,aAAa,CAAC,OAA+B;QACpD,IACE,OAAO,CAAC,IAAI,KAAK,OAAO;YACxB,OAAO,CAAC,MAAM,KAAK,MAAM;YACzB,IAAI,CAAC,kBAAkB,EACvB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAEQ,UAAU,CAAC,OAA4B;QAC9C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAEQ,UAAU,CAAC,OAA4B;QAC9C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAEQ,SAAS,CAAC,OAA2B;QAC5C,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;QAEvB,IAAI,IAAI,CAAC,oBAAoB,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;CACF;AA1DD,gEA0DC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AccountPermissionMatch } from './scopes/account-permission.js';
|
|
2
|
+
import { BlobPermissionMatch } from './scopes/blob-permission.js';
|
|
3
|
+
import { IdentityPermissionMatch } from './scopes/identity-permission.js';
|
|
4
|
+
import { RepoPermissionMatch } from './scopes/repo-permission.js';
|
|
5
|
+
import { RpcPermissionMatch } from './scopes/rpc-permission.js';
|
|
6
|
+
import { ScopesSet } from './scopes-set.js';
|
|
7
|
+
export type { AccountPermissionMatch, BlobPermissionMatch, IdentityPermissionMatch, RepoPermissionMatch, RpcPermissionMatch, };
|
|
8
|
+
export declare class ScopePermissions {
|
|
9
|
+
readonly scopes: ScopesSet;
|
|
10
|
+
constructor(scope?: null | string | Iterable<string>);
|
|
11
|
+
allowsAccount(options: AccountPermissionMatch): boolean;
|
|
12
|
+
assertAccount(options: AccountPermissionMatch): void;
|
|
13
|
+
allowsIdentity(options: IdentityPermissionMatch): boolean;
|
|
14
|
+
assertIdentity(options: IdentityPermissionMatch): void;
|
|
15
|
+
allowsBlob(options: BlobPermissionMatch): boolean;
|
|
16
|
+
assertBlob(options: BlobPermissionMatch): void;
|
|
17
|
+
allowsRepo(options: RepoPermissionMatch): boolean;
|
|
18
|
+
assertRepo(options: RepoPermissionMatch): void;
|
|
19
|
+
allowsRpc(options: RpcPermissionMatch): boolean;
|
|
20
|
+
assertRpc(options: RpcPermissionMatch): void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=scope-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-permissions.d.ts","sourceRoot":"","sources":["../src/scope-permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,sBAAsB,EACvB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,mBAAmB,EACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAEL,uBAAuB,EACxB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAEL,mBAAmB,EACpB,MAAM,6BAA6B,CAAA;AACpC,OAAO,EAAiB,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,CAAA;AAED,qBAAa,gBAAgB;IAC3B,SAAgB,MAAM,EAAE,SAAS,CAAA;gBAErB,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAU7C,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO;IAGvD,aAAa,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAOpD,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;IAGzD,cAAc,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAOtD,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAGjD,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAO9C,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO;IAGjD,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAO9C,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAG/C,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;CAMpD"}
|
|
@@ -1,29 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const account_scope_js_1 = require("./resources/account-scope.js");
|
|
5
|
-
const blob_scope_js_1 = require("./resources/blob-scope.js");
|
|
6
|
-
const identity_scope_js_1 = require("./resources/identity-scope.js");
|
|
7
|
-
const repo_scope_js_1 = require("./resources/repo-scope.js");
|
|
8
|
-
const rpc_scope_js_1 = require("./resources/rpc-scope.js");
|
|
3
|
+
exports.ScopePermissions = void 0;
|
|
9
4
|
const scope_missing_error_js_1 = require("./scope-missing-error.js");
|
|
5
|
+
const account_permission_js_1 = require("./scopes/account-permission.js");
|
|
6
|
+
const blob_permission_js_1 = require("./scopes/blob-permission.js");
|
|
7
|
+
const identity_permission_js_1 = require("./scopes/identity-permission.js");
|
|
8
|
+
const repo_permission_js_1 = require("./scopes/repo-permission.js");
|
|
9
|
+
const rpc_permission_js_1 = require("./scopes/rpc-permission.js");
|
|
10
10
|
const scopes_set_js_1 = require("./scopes-set.js");
|
|
11
|
-
class
|
|
12
|
-
constructor(
|
|
11
|
+
class ScopePermissions {
|
|
12
|
+
constructor(scope) {
|
|
13
13
|
Object.defineProperty(this, "scopes", {
|
|
14
14
|
enumerable: true,
|
|
15
15
|
configurable: true,
|
|
16
16
|
writable: true,
|
|
17
17
|
value: void 0
|
|
18
18
|
});
|
|
19
|
-
this.scopes = new scopes_set_js_1.ScopesSet(
|
|
19
|
+
this.scopes = new scopes_set_js_1.ScopesSet(!scope // "" | null | undefined
|
|
20
|
+
? undefined
|
|
21
|
+
: typeof scope === 'string'
|
|
22
|
+
? scope.split(' ')
|
|
23
|
+
: scope);
|
|
20
24
|
}
|
|
21
25
|
allowsAccount(options) {
|
|
22
26
|
return this.scopes.matches('account', options);
|
|
23
27
|
}
|
|
24
28
|
assertAccount(options) {
|
|
25
29
|
if (!this.allowsAccount(options)) {
|
|
26
|
-
const scope =
|
|
30
|
+
const scope = account_permission_js_1.AccountPermission.scopeNeededFor(options);
|
|
27
31
|
throw new scope_missing_error_js_1.ScopeMissingError(scope);
|
|
28
32
|
}
|
|
29
33
|
}
|
|
@@ -32,7 +36,7 @@ class PermissionSet {
|
|
|
32
36
|
}
|
|
33
37
|
assertIdentity(options) {
|
|
34
38
|
if (!this.allowsIdentity(options)) {
|
|
35
|
-
const scope =
|
|
39
|
+
const scope = identity_permission_js_1.IdentityPermission.scopeNeededFor(options);
|
|
36
40
|
throw new scope_missing_error_js_1.ScopeMissingError(scope);
|
|
37
41
|
}
|
|
38
42
|
}
|
|
@@ -41,7 +45,7 @@ class PermissionSet {
|
|
|
41
45
|
}
|
|
42
46
|
assertBlob(options) {
|
|
43
47
|
if (!this.allowsBlob(options)) {
|
|
44
|
-
const scope =
|
|
48
|
+
const scope = blob_permission_js_1.BlobPermission.scopeNeededFor(options);
|
|
45
49
|
throw new scope_missing_error_js_1.ScopeMissingError(scope);
|
|
46
50
|
}
|
|
47
51
|
}
|
|
@@ -50,7 +54,7 @@ class PermissionSet {
|
|
|
50
54
|
}
|
|
51
55
|
assertRepo(options) {
|
|
52
56
|
if (!this.allowsRepo(options)) {
|
|
53
|
-
const scope =
|
|
57
|
+
const scope = repo_permission_js_1.RepoPermission.scopeNeededFor(options);
|
|
54
58
|
throw new scope_missing_error_js_1.ScopeMissingError(scope);
|
|
55
59
|
}
|
|
56
60
|
}
|
|
@@ -59,10 +63,10 @@ class PermissionSet {
|
|
|
59
63
|
}
|
|
60
64
|
assertRpc(options) {
|
|
61
65
|
if (!this.allowsRpc(options)) {
|
|
62
|
-
const scope =
|
|
66
|
+
const scope = rpc_permission_js_1.RpcPermission.scopeNeededFor(options);
|
|
63
67
|
throw new scope_missing_error_js_1.ScopeMissingError(scope);
|
|
64
68
|
}
|
|
65
69
|
}
|
|
66
70
|
}
|
|
67
|
-
exports.
|
|
68
|
-
//# sourceMappingURL=
|
|
71
|
+
exports.ScopePermissions = ScopePermissions;
|
|
72
|
+
//# sourceMappingURL=scope-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-permissions.js","sourceRoot":"","sources":["../src/scope-permissions.ts"],"names":[],"mappings":";;;AAAA,qEAA4D;AAC5D,0EAGuC;AACvC,oEAGoC;AACpC,4EAGwC;AACxC,oEAGoC;AACpC,kEAA8E;AAC9E,mDAA2C;AAU3C,MAAa,gBAAgB;IAG3B,YAAY,KAAwC;QAFpC;;;;;WAAiB;QAG/B,IAAI,CAAC,MAAM,GAAG,IAAI,yBAAS,CACzB,CAAC,KAAK,CAAC,wBAAwB;YAC7B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;gBACzB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;gBAClB,CAAC,CAAC,KAAK,CACZ,CAAA;IACH,CAAC;IAEM,aAAa,CAAC,OAA+B;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;IACM,aAAa,CAAC,OAA+B;QAClD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,yCAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACvD,MAAM,IAAI,0CAAiB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAEM,cAAc,CAAC,OAAgC;QACpD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC;IACM,cAAc,CAAC,OAAgC;QACpD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,2CAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACxD,MAAM,IAAI,0CAAiB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAEM,UAAU,CAAC,OAA4B;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IACM,UAAU,CAAC,OAA4B;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,mCAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACpD,MAAM,IAAI,0CAAiB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAEM,UAAU,CAAC,OAA4B;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7C,CAAC;IACM,UAAU,CAAC,OAA4B;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,mCAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACpD,MAAM,IAAI,0CAAiB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAEM,SAAS,CAAC,OAA2B;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IACM,SAAS,CAAC,OAA2B;QAC1C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,iCAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACnD,MAAM,IAAI,0CAAiB,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;CACF;AA9DD,4CA8DC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Parser } from '../lib/parser.js';
|
|
2
|
+
import { ResourcePermission } from '../lib/resource-permission.js';
|
|
3
|
+
import { ScopeSyntax } from '../lib/syntax.js';
|
|
4
|
+
export declare const ACCOUNT_ATTRIBUTES: readonly ["email", "repo", "status"];
|
|
5
|
+
export type AccountAttribute = (typeof ACCOUNT_ATTRIBUTES)[number];
|
|
6
|
+
export declare const ACCOUNT_ACTIONS: readonly ["read", "manage"];
|
|
7
|
+
export type AccountAction = (typeof ACCOUNT_ACTIONS)[number];
|
|
8
|
+
export type AccountPermissionMatch = {
|
|
9
|
+
attr: AccountAttribute;
|
|
10
|
+
action: AccountAction;
|
|
11
|
+
};
|
|
12
|
+
export declare class AccountPermission implements ResourcePermission<'account', AccountPermissionMatch> {
|
|
13
|
+
readonly attr: AccountAttribute;
|
|
14
|
+
readonly action: AccountAction;
|
|
15
|
+
constructor(attr: AccountAttribute, action: AccountAction);
|
|
16
|
+
matches(options: AccountPermissionMatch): boolean;
|
|
17
|
+
toString(): import("../lib/syntax.js").ScopeStringFor<"account">;
|
|
18
|
+
protected static readonly parser: Parser<"account", {
|
|
19
|
+
attr: {
|
|
20
|
+
multiple: false;
|
|
21
|
+
required: true;
|
|
22
|
+
validate: (value: unknown) => value is "email" | "repo" | "status";
|
|
23
|
+
};
|
|
24
|
+
action: {
|
|
25
|
+
multiple: false;
|
|
26
|
+
required: false;
|
|
27
|
+
validate: (value: unknown) => value is "read" | "manage";
|
|
28
|
+
default: "read";
|
|
29
|
+
};
|
|
30
|
+
}>;
|
|
31
|
+
static fromString(scope: string): AccountPermission | null;
|
|
32
|
+
static fromSyntax(syntax: ScopeSyntax<'account'>): AccountPermission | null;
|
|
33
|
+
static scopeNeededFor(options: AccountPermissionMatch): import("../lib/syntax.js").ScopeStringFor<"account">;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=account-permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-permission.d.ts","sourceRoot":"","sources":["../../src/scopes/account-permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,WAAW,EAAoB,MAAM,kBAAkB,CAAA;AAGhE,eAAO,MAAM,kBAAkB,sCAIpB,CAAA;AACX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAElE,eAAO,MAAM,eAAe,6BAA6C,CAAA;AACzE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AAE5D,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,gBAAgB,CAAA;IACtB,MAAM,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,qBAAa,iBACX,YAAW,kBAAkB,CAAC,SAAS,EAAE,sBAAsB,CAAC;aAG9C,IAAI,EAAE,gBAAgB;aACtB,MAAM,EAAE,aAAa;gBADrB,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,aAAa;IAGvC,OAAO,CAAC,OAAO,EAAE,sBAAsB;IAOvC,QAAQ;IAIR,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;;;;;;OAgB/B;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM;IAM/B,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC;IAOhD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,sBAAsB;CAGtD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AccountPermission = exports.ACCOUNT_ACTIONS = exports.ACCOUNT_ATTRIBUTES = void 0;
|
|
4
|
+
const parser_js_1 = require("../lib/parser.js");
|
|
5
|
+
const syntax_string_js_1 = require("../lib/syntax-string.js");
|
|
6
|
+
const syntax_js_1 = require("../lib/syntax.js");
|
|
7
|
+
const util_js_1 = require("../lib/util.js");
|
|
8
|
+
exports.ACCOUNT_ATTRIBUTES = Object.freeze([
|
|
9
|
+
'email',
|
|
10
|
+
'repo',
|
|
11
|
+
'status',
|
|
12
|
+
]);
|
|
13
|
+
exports.ACCOUNT_ACTIONS = Object.freeze(['read', 'manage']);
|
|
14
|
+
class AccountPermission {
|
|
15
|
+
constructor(attr, action) {
|
|
16
|
+
Object.defineProperty(this, "attr", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: attr
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "action", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: action
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
matches(options) {
|
|
30
|
+
return (this.attr === options.attr &&
|
|
31
|
+
(this.action === 'manage' || this.action === options.action));
|
|
32
|
+
}
|
|
33
|
+
toString() {
|
|
34
|
+
return AccountPermission.parser.format(this);
|
|
35
|
+
}
|
|
36
|
+
static fromString(scope) {
|
|
37
|
+
if (!(0, syntax_js_1.isScopeStringFor)(scope, 'account'))
|
|
38
|
+
return null;
|
|
39
|
+
const syntax = syntax_string_js_1.ScopeStringSyntax.fromString(scope);
|
|
40
|
+
return AccountPermission.fromSyntax(syntax);
|
|
41
|
+
}
|
|
42
|
+
static fromSyntax(syntax) {
|
|
43
|
+
const result = AccountPermission.parser.parse(syntax);
|
|
44
|
+
if (!result)
|
|
45
|
+
return null;
|
|
46
|
+
return new AccountPermission(result.attr, result.action);
|
|
47
|
+
}
|
|
48
|
+
static scopeNeededFor(options) {
|
|
49
|
+
return AccountPermission.parser.format(options);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.AccountPermission = AccountPermission;
|
|
53
|
+
Object.defineProperty(AccountPermission, "parser", {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
configurable: true,
|
|
56
|
+
writable: true,
|
|
57
|
+
value: new parser_js_1.Parser('account', {
|
|
58
|
+
attr: {
|
|
59
|
+
multiple: false,
|
|
60
|
+
required: true,
|
|
61
|
+
validate: (0, util_js_1.knownValuesValidator)(exports.ACCOUNT_ATTRIBUTES),
|
|
62
|
+
},
|
|
63
|
+
action: {
|
|
64
|
+
multiple: false,
|
|
65
|
+
required: false,
|
|
66
|
+
validate: (0, util_js_1.knownValuesValidator)(exports.ACCOUNT_ACTIONS),
|
|
67
|
+
default: 'read',
|
|
68
|
+
},
|
|
69
|
+
}, 'attr')
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=account-permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-permission.js","sourceRoot":"","sources":["../../src/scopes/account-permission.ts"],"names":[],"mappings":";;;AAAA,gDAAyC;AAEzC,8DAA2D;AAC3D,gDAAgE;AAChE,4CAAqD;AAExC,QAAA,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,OAAO;IACP,MAAM;IACN,QAAQ;CACA,CAAC,CAAA;AAGE,QAAA,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAU,CAAC,CAAA;AAQzE,MAAa,iBAAiB;IAG5B,YACkB,IAAsB,EACtB,MAAqB;QADrC;;;;mBAAgB,IAAI;WAAkB;QACtC;;;;mBAAgB,MAAM;WAAe;IACpC,CAAC;IAEJ,OAAO,CAAC,OAA+B;QACrC,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;YAC1B,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAC7D,CAAA;IACH,CAAC;IAED,QAAQ;QACN,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC;IAoBD,MAAM,CAAC,UAAU,CAAC,KAAa;QAC7B,IAAI,CAAC,IAAA,4BAAgB,EAAC,KAAK,EAAE,SAAS,CAAC;YAAE,OAAO,IAAI,CAAA;QACpD,MAAM,MAAM,GAAG,oCAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QAClD,OAAO,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAA8B;QAC9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACrD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAExB,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,OAA+B;QACnD,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjD,CAAC;;AApDH,8CAqDC;AAlC2B;;;;WAAS,IAAI,kBAAM,CAC3C,SAAS,EACT;QACE,IAAI,EAAE;YACJ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAkB,CAAC;SACnD;QACD,MAAM,EAAE;YACN,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,IAAA,8BAAoB,EAAC,uBAAe,CAAC;YAC/C,OAAO,EAAE,MAAe;SACzB;KACF,EACD,MAAM,CACP;EAhB+B,CAgB/B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Accept, isAccept } from '../lib/mime.js';
|
|
2
|
+
import { Parser } from '../lib/parser.js';
|
|
3
|
+
import { ResourcePermission } from '../lib/resource-permission.js';
|
|
4
|
+
import { NeArray, NeRoArray, ParamValue, ScopeSyntax } from '../lib/syntax.js';
|
|
5
|
+
export { type Accept };
|
|
6
|
+
export declare const DEFAULT_ACCEPT: readonly ["*/*"];
|
|
7
|
+
export type BlobPermissionMatch = {
|
|
8
|
+
mime: string;
|
|
9
|
+
};
|
|
10
|
+
export declare class BlobPermission implements ResourcePermission<'blob', BlobPermissionMatch> {
|
|
11
|
+
readonly accept: NeRoArray<Accept>;
|
|
12
|
+
constructor(accept: NeRoArray<Accept>);
|
|
13
|
+
matches(options: BlobPermissionMatch): boolean;
|
|
14
|
+
toString(): import("../lib/syntax.js").ScopeStringFor<"blob">;
|
|
15
|
+
protected static readonly parser: Parser<"blob", {
|
|
16
|
+
accept: {
|
|
17
|
+
multiple: true;
|
|
18
|
+
required: true;
|
|
19
|
+
validate: typeof isAccept;
|
|
20
|
+
normalize: (value: NeRoArray<ParamValue>) => readonly ["*/*"] | NeArray<Accept>;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
static fromString(scope: string): BlobPermission | null;
|
|
24
|
+
static fromSyntax(syntax: ScopeSyntax<'blob'>): BlobPermission | null;
|
|
25
|
+
static scopeNeededFor(options: BlobPermissionMatch): import("../lib/syntax.js").ScopeStringFor<"blob">;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=blob-permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-permission.d.ts","sourceRoot":"","sources":["../../src/scopes/blob-permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAoB,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EACL,OAAO,EACP,SAAS,EACT,UAAU,EACV,WAAW,EAEZ,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;AAEtB,eAAO,MAAM,cAAc,kBAAkC,CAAA;AAE7D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,qBAAa,cACX,YAAW,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC;aAE9B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;gBAAzB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;IAErD,OAAO,CAAC,OAAO,EAAE,mBAAmB;IAIpC,QAAQ;IAIR,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;;;;;;;OAmB/B;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM;IAM/B,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAO7C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB;CAKnD"}
|