|
|
@@ -16,10 +16,6 @@ type PermissionRespondFn = (input: {
|
|
|
directory?: string
|
|
|
}) => void
|
|
|
|
|
|
-function shouldAutoAccept(perm: PermissionRequest) {
|
|
|
- return perm.permission === "edit"
|
|
|
-}
|
|
|
-
|
|
|
function isNonAllowRule(rule: unknown) {
|
|
|
if (!rule) return false
|
|
|
if (typeof rule === "string") return rule !== "allow"
|
|
|
@@ -40,10 +36,7 @@ function hasPermissionPromptRules(permission: unknown) {
|
|
|
if (Array.isArray(permission)) return false
|
|
|
|
|
|
const config = permission as Record<string, unknown>
|
|
|
- if (isNonAllowRule(config.edit)) return true
|
|
|
- if (isNonAllowRule(config.write)) return true
|
|
|
-
|
|
|
- return false
|
|
|
+ return Object.values(config).some(isNonAllowRule)
|
|
|
}
|
|
|
|
|
|
export const { use: usePermission, provider: PermissionProvider } = createSimpleContext({
|
|
|
@@ -61,9 +54,25 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
|
|
|
})
|
|
|
|
|
|
const [store, setStore, _, ready] = persisted(
|
|
|
- Persist.global("permission", ["permission.v3"]),
|
|
|
+ {
|
|
|
+ ...Persist.global("permission", ["permission.v3"]),
|
|
|
+ migrate(value) {
|
|
|
+ if (!value || typeof value !== "object" || Array.isArray(value)) return value
|
|
|
+
|
|
|
+ const data = value as Record<string, unknown>
|
|
|
+ if (data.autoAccept) return value
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...data,
|
|
|
+ autoAccept:
|
|
|
+ typeof data.autoAcceptEdits === "object" && data.autoAcceptEdits && !Array.isArray(data.autoAcceptEdits)
|
|
|
+ ? data.autoAcceptEdits
|
|
|
+ : {},
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
createStore({
|
|
|
- autoAcceptEdits: {} as Record<string, boolean>,
|
|
|
+ autoAccept: {} as Record<string, boolean>,
|
|
|
}),
|
|
|
)
|
|
|
|
|
|
@@ -112,7 +121,7 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
|
|
|
|
|
|
function isAutoAccepting(sessionID: string, directory?: string) {
|
|
|
const key = acceptKey(sessionID, directory)
|
|
|
- return store.autoAcceptEdits[key] ?? store.autoAcceptEdits[sessionID] ?? false
|
|
|
+ return store.autoAccept[key] ?? store.autoAccept[sessionID] ?? false
|
|
|
}
|
|
|
|
|
|
function bumpEnableVersion(sessionID: string, directory?: string) {
|
|
|
@@ -128,7 +137,6 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
|
|
|
|
|
|
const perm = event.properties
|
|
|
if (!isAutoAccepting(perm.sessionID, e.name)) return
|
|
|
- if (!shouldAutoAccept(perm)) return
|
|
|
|
|
|
respondOnce(perm, e.name)
|
|
|
})
|
|
|
@@ -139,8 +147,8 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
|
|
|
const version = bumpEnableVersion(sessionID, directory)
|
|
|
setStore(
|
|
|
produce((draft) => {
|
|
|
- draft.autoAcceptEdits[key] = true
|
|
|
- delete draft.autoAcceptEdits[sessionID]
|
|
|
+ draft.autoAccept[key] = true
|
|
|
+ delete draft.autoAccept[sessionID]
|
|
|
}),
|
|
|
)
|
|
|
|
|
|
@@ -152,7 +160,6 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
|
|
|
for (const perm of x.data ?? []) {
|
|
|
if (!perm?.id) continue
|
|
|
if (perm.sessionID !== sessionID) continue
|
|
|
- if (!shouldAutoAccept(perm)) continue
|
|
|
respondOnce(perm, directory)
|
|
|
}
|
|
|
})
|
|
|
@@ -164,8 +171,8 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
|
|
|
const key = directory ? acceptKey(sessionID, directory) : undefined
|
|
|
setStore(
|
|
|
produce((draft) => {
|
|
|
- if (key) delete draft.autoAcceptEdits[key]
|
|
|
- delete draft.autoAcceptEdits[sessionID]
|
|
|
+ if (key) delete draft.autoAccept[key]
|
|
|
+ delete draft.autoAccept[sessionID]
|
|
|
}),
|
|
|
)
|
|
|
}
|
|
|
@@ -174,7 +181,7 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
|
|
|
ready,
|
|
|
respond,
|
|
|
autoResponds(permission: PermissionRequest, directory?: string) {
|
|
|
- return isAutoAccepting(permission.sessionID, directory) && shouldAutoAccept(permission)
|
|
|
+ return isAutoAccepting(permission.sessionID, directory)
|
|
|
},
|
|
|
isAutoAccepting,
|
|
|
toggleAutoAccept(sessionID: string, directory: string) {
|