@pyric/ui 0.1.0-alpha.14 → 0.1.0-alpha.15
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/storage/hooks/useStorageRulesGate.d.ts +9 -11
- package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -1
- package/dist/storage/hooks/useStorageRulesGate.js +6 -4
- package/dist/storage/hooks/useStorageRulesGate.js.map +1 -1
- package/package.json +4 -4
- package/src/storage/hooks/useStorageRulesGate.ts +17 -17
|
@@ -12,18 +12,17 @@ export type StorageRulesGateStatus = 'idle' | 'loading' | 'ready' | 'error';
|
|
|
12
12
|
*/
|
|
13
13
|
export type StorageRulesSource = 'option' | 'sandbox' | 'none';
|
|
14
14
|
/**
|
|
15
|
-
* Per-path verdict.
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* governs create, overwrite, AND delete.
|
|
15
|
+
* Per-path verdict. Upload and delete are evaluated with their granular
|
|
16
|
+
* Storage request methods so `request.method` policies and missing incoming
|
|
17
|
+
* payload semantics remain truthful. `write` retains its historical upload
|
|
18
|
+
* meaning; callers use `delete` for delete affordances.
|
|
20
19
|
*/
|
|
21
20
|
export interface StorageGateVerdict {
|
|
22
21
|
read: boolean;
|
|
23
22
|
write: boolean;
|
|
24
|
-
/**
|
|
23
|
+
/** Granular delete verdict (`request.method == 'delete'`). */
|
|
25
24
|
delete: boolean;
|
|
26
|
-
/**
|
|
25
|
+
/** Granular create/upload verdict (`request.method == 'create'`). */
|
|
27
26
|
upload: boolean;
|
|
28
27
|
/**
|
|
29
28
|
* Evaluator reason traces for DENIED verbs (`"no rule matches…"` /
|
|
@@ -56,12 +55,11 @@ export interface UseStorageRulesGateOptions {
|
|
|
56
55
|
identity?: StorageAuth | null;
|
|
57
56
|
/**
|
|
58
57
|
* The about-to-write payload bound to `request.resource` for the
|
|
59
|
-
*
|
|
58
|
+
* CREATE evaluation — pass `{ size, contentType }` when gating a
|
|
60
59
|
* specific upload so size/contentType-conditioned rules evaluate
|
|
61
60
|
* truthfully. When omitted, `request.resource` is unset, which is
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* conservative answer for uploads.
|
|
61
|
+
* absent, `upload`/`write` remain a conservative deny for payload-dependent
|
|
62
|
+
* policies. Delete is evaluated independently and never receives this value.
|
|
65
63
|
*/
|
|
66
64
|
writeResource?: {
|
|
67
65
|
size: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageRulesGate.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,WAAW,EAEhB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D
|
|
1
|
+
{"version":3,"file":"useStorageRulesGate.d.ts","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,WAAW,EAEhB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAGvB,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC9C;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,MAAM,WAAW,yBAAyB;IACxC,sDAAsD;IACtD,MAAM,EAAE,sBAAsB,CAAC;IAC/B,0CAA0C;IAC1C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7C;;;;;;;OAOG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,CAAC;IACjD,kEAAkE;IAClE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CAC1B;AAqBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CA6H3B"}
|
|
@@ -107,19 +107,21 @@ export function useStorageRulesGate(storage, options = {}) {
|
|
|
107
107
|
auth: identity,
|
|
108
108
|
method,
|
|
109
109
|
path: rulesPath,
|
|
110
|
-
...(method === '
|
|
110
|
+
...(method === 'create' && writeSize !== undefined
|
|
111
111
|
? { resource: { size: writeSize, contentType: writeContentType } }
|
|
112
112
|
: {}),
|
|
113
113
|
},
|
|
114
114
|
resource: null,
|
|
115
115
|
});
|
|
116
116
|
const read = evaluate('read');
|
|
117
|
-
const
|
|
117
|
+
const upload = evaluate('create');
|
|
118
|
+
const deletion = evaluate('delete');
|
|
119
|
+
const write = upload;
|
|
118
120
|
return {
|
|
119
121
|
read: read.allowed,
|
|
120
122
|
write: write.allowed,
|
|
121
|
-
delete:
|
|
122
|
-
upload:
|
|
123
|
+
delete: deletion.allowed,
|
|
124
|
+
upload: upload.allowed,
|
|
123
125
|
reasons: {
|
|
124
126
|
read: read.allowed ? [] : read.reasons,
|
|
125
127
|
write: write.allowed ? [] : write.reasons,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStorageRulesGate.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,oBAAoB,GAKrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"useStorageRulesGate.js","sourceRoot":"","sources":["../../../src/storage/hooks/useStorageRulesGate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pyric/ui",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.15",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"homepage": "https://pyric.dev",
|
|
6
6
|
"repository": {
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"react": ">=19",
|
|
94
94
|
"react-dom": ">=19",
|
|
95
95
|
"firebase": ">=12",
|
|
96
|
-
"pyric": "^0.1.0-alpha.
|
|
96
|
+
"pyric": "^0.1.0-alpha.15"
|
|
97
97
|
},
|
|
98
98
|
"peerDependenciesMeta": {
|
|
99
99
|
"@inbrowser/agent": {
|
|
@@ -109,8 +109,8 @@
|
|
|
109
109
|
"fake-indexeddb": "^6.0.0",
|
|
110
110
|
"firebase": "^12.12.0",
|
|
111
111
|
"jsdom": "^29.1.1",
|
|
112
|
-
"pyric": "^0.1.0-alpha.
|
|
113
|
-
"pyric-admin": "^0.1.0-alpha.
|
|
112
|
+
"pyric": "^0.1.0-alpha.15",
|
|
113
|
+
"pyric-admin": "^0.1.0-alpha.15",
|
|
114
114
|
"react": "^19.0.0",
|
|
115
115
|
"react-dom": "^19.0.0",
|
|
116
116
|
"react-test-renderer": "^19.2.6",
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
evaluateStorageRules,
|
|
6
6
|
type FirebaseStorage,
|
|
7
7
|
type StorageAuth,
|
|
8
|
-
type
|
|
8
|
+
type StorageRequestMethod,
|
|
9
9
|
type StorageRules,
|
|
10
10
|
} from 'pyric/storage';
|
|
11
11
|
import { normalizeStoragePath } from './usePathState.js';
|
|
@@ -25,18 +25,17 @@ export type StorageRulesGateStatus = 'idle' | 'loading' | 'ready' | 'error';
|
|
|
25
25
|
export type StorageRulesSource = 'option' | 'sandbox' | 'none';
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
|
-
* Per-path verdict.
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* governs create, overwrite, AND delete.
|
|
28
|
+
* Per-path verdict. Upload and delete are evaluated with their granular
|
|
29
|
+
* Storage request methods so `request.method` policies and missing incoming
|
|
30
|
+
* payload semantics remain truthful. `write` retains its historical upload
|
|
31
|
+
* meaning; callers use `delete` for delete affordances.
|
|
33
32
|
*/
|
|
34
33
|
export interface StorageGateVerdict {
|
|
35
34
|
read: boolean;
|
|
36
35
|
write: boolean;
|
|
37
|
-
/**
|
|
36
|
+
/** Granular delete verdict (`request.method == 'delete'`). */
|
|
38
37
|
delete: boolean;
|
|
39
|
-
/**
|
|
38
|
+
/** Granular create/upload verdict (`request.method == 'create'`). */
|
|
40
39
|
upload: boolean;
|
|
41
40
|
/**
|
|
42
41
|
* Evaluator reason traces for DENIED verbs (`"no rule matches…"` /
|
|
@@ -67,12 +66,11 @@ export interface UseStorageRulesGateOptions {
|
|
|
67
66
|
identity?: StorageAuth | null;
|
|
68
67
|
/**
|
|
69
68
|
* The about-to-write payload bound to `request.resource` for the
|
|
70
|
-
*
|
|
69
|
+
* CREATE evaluation — pass `{ size, contentType }` when gating a
|
|
71
70
|
* specific upload so size/contentType-conditioned rules evaluate
|
|
72
71
|
* truthfully. When omitted, `request.resource` is unset, which is
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* conservative answer for uploads.
|
|
72
|
+
* absent, `upload`/`write` remain a conservative deny for payload-dependent
|
|
73
|
+
* policies. Delete is evaluated independently and never receives this value.
|
|
76
74
|
*/
|
|
77
75
|
writeResource?: { size: number; contentType?: string };
|
|
78
76
|
}
|
|
@@ -218,25 +216,27 @@ export function useStorageRulesGate(
|
|
|
218
216
|
const objectPath = normalizeStoragePath(path);
|
|
219
217
|
const bucket = target?.bucket ?? 'pyric-default';
|
|
220
218
|
const rulesPath = objectPath === '' ? `b/${bucket}/o` : `b/${bucket}/o/${objectPath}`;
|
|
221
|
-
const evaluate = (method:
|
|
219
|
+
const evaluate = (method: StorageRequestMethod) =>
|
|
222
220
|
evaluateStorageRules(rules, {
|
|
223
221
|
request: {
|
|
224
222
|
auth: identity,
|
|
225
223
|
method,
|
|
226
224
|
path: rulesPath,
|
|
227
|
-
...(method === '
|
|
225
|
+
...(method === 'create' && writeSize !== undefined
|
|
228
226
|
? { resource: { size: writeSize, contentType: writeContentType } }
|
|
229
227
|
: {}),
|
|
230
228
|
},
|
|
231
229
|
resource: null,
|
|
232
230
|
});
|
|
233
231
|
const read = evaluate('read');
|
|
234
|
-
const
|
|
232
|
+
const upload = evaluate('create');
|
|
233
|
+
const deletion = evaluate('delete');
|
|
234
|
+
const write = upload;
|
|
235
235
|
return {
|
|
236
236
|
read: read.allowed,
|
|
237
237
|
write: write.allowed,
|
|
238
|
-
delete:
|
|
239
|
-
upload:
|
|
238
|
+
delete: deletion.allowed,
|
|
239
|
+
upload: upload.allowed,
|
|
240
240
|
reasons: {
|
|
241
241
|
read: read.allowed ? [] : read.reasons,
|
|
242
242
|
write: write.allowed ? [] : write.reasons,
|