permdock 0.3.1 → 0.5.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/README.md +37 -35
- package/dist/{openapi-schema--ARjyfQr.js → 2020-C9VN-x8c.js} +5 -132
- package/dist/a2a/index.d.ts +8 -6
- package/dist/a2a/index.js +21 -31
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-B4R5fnMU.js +107 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +1 -0
- package/dist/ai-sdk/index.d.ts +18 -23
- package/dist/ai-sdk/index.js +38 -21
- package/dist/app-data-MuyzVqX8.js +60 -0
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-Djo_PyZc.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-DJ6Yd5z1.js +995 -0
- package/dist/{approvers-DT4AVyIg.js → approvers-CqPOLD-o.js} +1 -1
- package/dist/arazzo-B6lebmiQ.js +36 -0
- package/dist/{arazzo-BAgw9ap6.js → arazzo-BWhNF-k0.js} +24 -17
- package/dist/args-IIolxxKA.js +197 -0
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.js +27 -0
- package/dist/audience-Dg8XsRaO.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +228 -75
- package/dist/automation-BMZPIVUM.d.ts +114 -0
- package/dist/automation-DVjOckjV.js +157 -0
- package/dist/better-auth/index.d.ts +8 -6
- package/dist/better-auth/index.js +11 -23
- package/dist/better-supabase/index.d.ts +438 -86
- package/dist/better-supabase/index.js +1027 -184
- package/dist/bind--9EFVYWF.d.ts +38 -0
- package/dist/{bind-CuzGytRf.js → bind-CZzhx-Vj.js} +22 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/build-instance-BMnAudHn.js +52 -0
- package/dist/{canonical-json-DemiK4Vp.js → canonical-json-BC8_nMTw.js} +6 -6
- package/dist/{capability-2kYTMWDv.d.ts → capability-BSslw1QV.d.ts} +44 -25
- package/dist/{capability-4qPdO9gk.js → capability-N1K9IpqS.js} +69 -42
- package/dist/casbin-Cr7RLtA3.js +30 -0
- package/dist/casbin-Dyu2gnUD.js +234 -0
- package/dist/casl-64gpT-8x.js +24 -0
- package/dist/casl-DjEDhTCP.js +299 -0
- package/dist/catalog/index.d.ts +74 -2
- package/dist/catalog/index.js +51 -2
- package/dist/catalog-BECMPrwc.js +100 -0
- package/dist/catalog-DjhMYYCq.js +1 -0
- package/dist/catalog-R_A__RsH.js +52 -0
- package/dist/{catalog-doc-DdGm82XT.js → catalog-doc-C9wjsfNY.js} +54 -25
- package/dist/catalog-fingerprint-CCP0-yQS.js +153 -0
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.js +224 -0
- package/dist/chat-sdk/index.d.ts +87 -0
- package/dist/chat-sdk/index.js +197 -0
- package/dist/claims-map-7oQ3ue4X.js +13 -0
- package/dist/claims-map-Ca-QX8C6.d.ts +32 -0
- package/dist/claude-agent/index.d.ts +7 -14
- package/dist/claude-agent/index.js +26 -30
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +15 -45
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +20 -6
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +240 -347
- package/dist/cloud-CIoHNevm.js +87 -0
- package/dist/codemod-Bmj9dWMH.js +37 -0
- package/dist/codemod-Cxvvc70T.js +2084 -0
- package/dist/{collect-DSTE3ml9.js → collect-CrZJJnEF.js} +79 -17
- package/dist/collect-DloHbDVa.js +55 -0
- package/dist/collect-FlXJlhus.js +1 -0
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/{compact-y6vfu2_f.js → compact-CAf557ZB.js} +11 -1
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-Ba4blROR.js → compile-CMqMx_IN.js} +13 -9
- package/dist/{compile-BkRyBDBw.d.ts → compile-Ckm2HqBZ.d.ts} +5 -3
- package/dist/completion-BqhRBJD8.js +143 -0
- package/dist/config-B46rm9sc.js +26 -0
- package/dist/{config-BJiM-xAm.js → config-bs_kZeYq.js} +15 -10
- package/dist/{config-report-CdCgbRnV.js → config-report-DUgj62Ai.js} +17 -8
- package/dist/{connection-CU8MQxRi.js → connection-DjhIJSs2.js} +8 -6
- package/dist/constants-DcJABbLW.js +20 -0
- package/dist/{context-Bcy85rGi.js → context-bbFHR-0D.js} +16 -5
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +18 -18
- package/dist/create-0VZ7Pdiu.d.ts +107 -0
- package/dist/create-BDS7wc3y.d.ts +138 -0
- package/dist/create-BFfm17UA.d.ts +110 -0
- package/dist/create-BWRSXgOF.js +403 -0
- package/dist/create-C3b4B5eF.js +130 -0
- package/dist/create-DnrmLnLW.js +323 -0
- package/dist/{credential-8P81ff4u.js → credential-DM2um3ha.js} +153 -32
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/deciding-columns-Sq12mEA6.js +123 -0
- package/dist/delegation-DaXVdDhM.js +286 -0
- package/dist/delegation-input-FTxMK3ji.js +19 -0
- package/dist/delivery/index.d.ts +5 -0
- package/dist/delivery/index.js +5 -0
- package/dist/delivery-DCAgNyCn.js +499 -0
- package/dist/delivery-event-xX4obB8F.js +40 -0
- package/dist/denied-text-D8jDHgsl.d.ts +19 -0
- package/dist/{describe-DMYiCjJV.d.ts → describe-BZUsixiL.d.ts} +11 -2
- package/dist/{describe-B_gVZEVi.js → describe-BybMRY7A.js} +10 -5
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/diff-CxZo9pTq.js +37 -0
- package/dist/{diff-2VaeChzX.js → diff-DCePiN6M.js} +61 -55
- package/dist/doctor-CxiwSfqH.js +44 -0
- package/dist/doctor-DFjUxf2f.js +2361 -0
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +6 -14
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +14 -13
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-Cz5zn0mW.js → errors-BKy0EfhN.js} +6 -10
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/{errors-DPdqI50v.d.ts → errors-C2PXIv4c.d.ts} +2 -2
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/evaluate-_R8QkWaf.js +1732 -0
- package/dist/evaluations-16UqqQ6W.d.ts +32 -0
- package/dist/{evaluations-tz6D9A2G.js → evaluations-DZ2CbV5k.js} +181 -32
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +23 -29
- package/dist/event-time-CsegxXxB.js +23 -0
- package/dist/expiry-D4_YKRKD.js +52 -0
- package/dist/express/index.d.ts +13 -10
- package/dist/express/index.js +14 -12
- package/dist/fastify/index.d.ts +26 -13
- package/dist/fastify/index.js +17 -36
- package/dist/fetch-adapter-g0ypLkID.js +120 -0
- package/dist/fetch-adapter-qKJBuRqy.d.ts +31 -0
- package/dist/fields-D9tPVUUS.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{files-DWUN9PzI.js → files-D_JIzUrP.js} +12 -3
- package/dist/{fixtures-ht28Cplr.js → fixtures-B7XrLeY7.js} +12 -12
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-CTLijvdm.js → from-snapshot-D2lZt4Dd.js} +78 -65
- package/dist/{generate-CH7ThJ14.js → generate-CNU1pIOo.js} +1 -3
- package/dist/grantee-Cn1HyUsI.js +254 -0
- package/dist/grantee-conditions-CcXf8hMM.js +271 -0
- package/dist/grantee-match-DHArqY82.js +142 -0
- package/dist/h3/index.d.ts +37 -0
- package/dist/h3/index.js +35 -0
- package/dist/headers-BIjfMaoC.js +8 -0
- package/dist/headers-CIbDTUTK.d.ts +7 -0
- package/dist/{helpers-H_KARDVC.js → helpers-DTcZOzhF.js} +47 -39
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +14 -13
- package/dist/{hosted-DJQw46hn.js → hosted-BZIAYvon.js} +64 -15
- package/dist/hosted-DBDX0M-P.d.ts +78 -0
- package/dist/{http-SO7qGttf.js → http-BBoKefeS.js} +35 -2
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BIhmLfCc.js → http-ujKm0JXE.js} +3 -26
- package/dist/{openapi-import-cmwetbzw.js → import-CNV7I2Dw.js} +30 -26
- package/dist/{rls-import-4lLW_pbb.js → import-DMmOG27O.js} +271 -128
- package/dist/index-BcHcPyIo.d.ts +110 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-Chrs5fQ-.d.ts +210 -0
- package/dist/index-CxGUswIC.d.ts +431 -0
- package/dist/index-D8EovfsP.d.ts +91 -0
- package/dist/index-DOVf7RJv.d.ts +900 -0
- package/dist/{index-C8z4RjQV.d.ts → index-SGdIQyzc.d.ts} +34 -16
- package/dist/index.d.ts +20 -14
- package/dist/index.js +33 -23
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-jARdwfPN.d.ts → instance-options-Omfd793B.d.ts} +2 -2
- package/dist/instance-snapshot-Cxq4ygFc.js +600 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-BsAflUGW.js → json-schema-B-vAwlde.js} +46 -9
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +166 -145
- package/dist/{kernel-_RRHmnMY.js → kernel-5JatXyND.js} +120 -43
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +6 -14
- package/dist/{live-options-H2eG8dfJ.js → live-options-BaAFCIiu.js} +16 -3
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-DhWEB9P1.js → load-DFS_ry0W.js} +31 -7
- package/dist/{load-jose-BL6LH4bL.js → load-jose-DZ4dnjri.js} +1 -4
- package/dist/login-Dfe5RlYk.js +68 -0
- package/dist/login-imhuwvn3.js +254 -0
- package/dist/manifest-C8IzW3Do.js +42 -0
- package/dist/manifest-CtKR3GXL.js +370 -0
- package/dist/manifest-json-CAGzls-C.js +9 -0
- package/dist/{manifest-uDS9y5de.d.ts → manifest-mx5ghSFM.d.ts} +9 -2
- package/dist/manifest-schema-C0kK_8V0.js +399 -0
- package/dist/{map-claims-Z4QZOiFF.js → map-claims-D3oRmTk0.js} +19 -25
- package/dist/{map-error-pgUWNNtG.js → map-error-TCAdw-eW.js} +5 -5
- package/dist/{markers-B0hYLvMD.js → markers-C6joDI3o.js} +8 -3
- package/dist/mcp/index.d.ts +36 -9
- package/dist/mcp/index.js +476 -448
- package/dist/{rls-migrate-CN4TlJTO.js → migrate-BShP7Vf4.js} +119 -20
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +20 -20
- package/dist/next/index.d.ts +40 -20
- package/dist/next/index.js +37 -39
- package/dist/next/plugin.d.ts +1 -1
- package/dist/next/plugin.js +2 -2
- package/dist/node/index.d.ts +10 -10
- package/dist/node/index.js +7 -9
- package/dist/ocsf-BFp-PZZA.js +126 -0
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +18 -25
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-BqRBvAng.js → openapi-B7HZ0f-r.js} +9 -12
- package/dist/{openapi-CqqEbHsL.js → openapi-DTaEmTSW.js} +23 -26
- package/dist/openapi-ahr8rHu3.js +138 -0
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-CxybZErY.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +23 -20
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +53 -27
- package/dist/output-Dyw8fyPF.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/output-files-DhRBBE4n.js +138 -0
- package/dist/{rls-fields-CZOMlwHl.js → ownership-BatFgAA4.js} +2393 -2349
- package/dist/{package-root-zGkxO3oN.js → package-root-Dk_ETdkp.js} +4 -3
- package/dist/{parse-BuyjxhZV.js → parse-Cxq0WxrA.js} +3 -3
- package/dist/{parse-local-manifest-BrMozJCo.js → parse-local-manifest-CVSs6J9I.js} +2 -4
- package/dist/{parse-local-manifest-JLnaBH0S.d.ts → parse-local-manifest-DgqtruPn.d.ts} +1 -1
- package/dist/parse-request-D_tUXG6M.js +26 -0
- package/dist/paths-DXSHAMIa.js +42 -0
- package/dist/pdp/index.d.ts +7 -3
- package/dist/pdp/index.js +47 -29
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-B9JxkBwC.js +868 -0
- package/dist/permdock-D7eeLJER.d.ts +502 -0
- package/dist/permission-registry-Br4jSNVi.js +385 -0
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-RJrovw98.js → permissions-CZKiUfFM.js} +4 -3
- package/dist/{permissions-CDgvKG5L.d.ts → permissions-oEWfl-kl.d.ts} +1 -2
- package/dist/policies-CO1oOymN.js +295 -0
- package/dist/{policy-D2W7uv19.d.ts → policy-Czo4n3Hs.d.ts} +2 -2
- package/dist/policy-DLZJ5gAp.js +399 -0
- package/dist/policy-from-catalog-DzhEc3Y9.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-IB6yxpC3.d.ts → policy-types-DzwivBgR.d.ts} +939 -1057
- package/dist/postgrest-CW0IqC-U.js +566 -0
- package/dist/postgrest-NUqZT-RB.d.ts +100 -0
- package/dist/powersync-BHfuehf3.js +62 -0
- package/dist/powersync-CbzkqL_M.js +1 -0
- package/dist/{powersync-Dv1_aWF7.js → powersync-bYUDLOAO.js} +30 -32
- package/dist/preset/index.d.ts +146 -0
- package/dist/preset/index.js +1 -0
- package/dist/preset-DZdU0tne.js +1768 -0
- package/dist/principal-source-pHneukrx.js +103 -0
- package/dist/prisma/index.d.ts +6 -3
- package/dist/prisma/index.js +6 -12
- package/dist/{problem-B43ztKIm.js → problem-CTviyH5L.js} +18 -27
- package/dist/{problem-details-DX075l9V.d.ts → problem-details-DXlt-vks.d.ts} +1 -1
- package/dist/{problem-details-_AMOYz-w.js → problem-details-cn5X30gZ.js} +45 -42
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/protected-DEPHc2xV.d.ts +38 -0
- package/dist/{protected-utU-SLuy.js → protected-DfjY5mLA.js} +37 -8
- package/dist/{provider-CSQd7m92.js → provider-CC-u3bYP.js} +23 -10
- package/dist/{provider-DZY281jO.d.ts → provider-DMVt6yYn.d.ts} +1 -1
- package/dist/{provider-store-Cfbvo4DE.js → provider-store-B5Yrkhzr.js} +6 -3
- package/dist/pull-BgIfno6w.js +256 -0
- package/dist/pull-ByOks_Tg.js +1 -0
- package/dist/push-CmFVBOeI.js +116 -0
- package/dist/pushed-policy-BImMTTIM.d.ts +57 -0
- package/dist/pushed-policy-DobP7AHI.js +238 -0
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +6 -6
- package/dist/react/provider-client.d.ts +1 -1
- package/dist/react/provider-client.js +1 -2
- package/dist/react-native/index.d.ts +24 -63
- package/dist/react-native/index.js +45 -27
- package/dist/{refs-KYb4ntaz.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/relation-walk-3OyDBF0S.js +186 -0
- package/dist/relations-BnCWnJGI.js +163 -0
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-CYyiLiwO.d.ts → replay-D7iKcLFe.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/request-context-BTRTG7OT.js +71 -0
- package/dist/request-context-C2_1lchh.d.ts +5 -0
- package/dist/request-schema-CMreVuFM.js +148 -0
- package/dist/resend/index.d.ts +126 -0
- package/dist/resend/index.js +379 -0
- package/dist/resource-relations-D_jw0BFx.js +243 -0
- package/dist/retire-CALjIQ7e.js +240 -0
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BA8an5Ap.js +336 -0
- package/dist/{rls-DiinlRML.js → rls-j6t43t7n.js} +1066 -1068
- package/dist/role-builder-CXbis5-X.js +623 -0
- package/dist/{rpc-DL9Sqvb1.js → rpc-aPyNi6tA.js} +18 -8
- package/dist/run-CNsApDpd.js +1 -0
- package/dist/run-DOfMtc9V.js +723 -0
- package/dist/run-ticket-BjhTOi6u.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-CB8gQFvS.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DhpJjnBA.js → saas-FO-Q8oj0.js} +18 -15
- package/dist/scan-BOI5tJ-6.js +29 -0
- package/dist/{schema-D3MnDMxa.js → schema-B4v0Qrac.js} +106 -10
- package/dist/schema-yLuBWWsh.js +130 -0
- package/dist/scim/index.d.ts +2 -2
- package/dist/scim/index.js +1 -2
- package/dist/{scim-BFGBBAqR.js → scim-ClHtpyV3.js} +213 -87
- package/dist/{scopes-CVdPrWN-.js → scopes-CUPSjo9q.js} +20 -7
- package/dist/server/index.d.ts +13 -134
- package/dist/server/index.js +13 -10
- package/dist/server-DqCT4CgZ.js +453 -0
- package/dist/{create-B1d519XK.d.ts → server-types-BLd4MnBX.d.ts} +89 -70
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/shared-CD11nBbC.js +304 -0
- package/dist/{shared-DRu8VFVM.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/sink-Bj_lDUDq.d.ts +225 -0
- package/dist/{skills-Biq5uup3.js → skills-B6lVdD_W.js} +16 -8
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-CXUWfsNy.js +269 -0
- package/dist/{snapshot-cache-D6jLelln.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-B-LxUahj.d.ts → snapshot-cache-DqK9eDmM.d.ts} +7 -5
- package/dist/solid/index.d.ts +24 -25
- package/dist/solid/index.js +41 -11
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-BdOYLw9j.d.ts → sources-BV9j0DeZ.d.ts} +11 -13
- package/dist/{sources-4p0-4xQm.js → sources-vs5dGOsS.js} +147 -142
- package/dist/sql-B5T1IL83.js +55 -0
- package/dist/src-DLfUWFAI.js +1851 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +440 -106
- package/dist/standard-webhooks-6lg8v_is.d.ts +88 -0
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-DMAWwAJV.js → store-4u_hxjWa.js} +42 -55
- package/dist/{store-options-ByhZq1jV.js → store-options-BqEakYRa.js} +38 -24
- package/dist/{stores-BT2pSCub.js → stores-BbsD4fAR.js} +7 -3
- package/dist/stores-ClZUgeoP.d.ts +30 -0
- package/dist/{stream-D1RXubw2.d.ts → stream-7-xmnf3U.d.ts} +2 -2
- package/dist/{stream-DDpvynSB.js → stream-CvdUS9V1.js} +10 -2
- package/dist/style-DiKWnAvn.js +1 -0
- package/dist/{style-CTm1AXDT.js → style-Uao76wO7.js} +3 -2
- package/dist/subject-BGoM5o8B.js +17 -0
- package/dist/{subject-settings-BwBmCdTR.js → subject-settings-CkEwrw3W.js} +23 -5
- package/dist/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +13 -6
- package/dist/supabase/middleware.js +16 -11
- package/dist/supabase-9pqI57pW.js +92 -0
- package/dist/{supabase-C0qESOa-.js → supabase-Dxlp8A94.js} +124 -247
- package/dist/supabase-hook-CXcGpHqq.js +1 -0
- package/dist/{supabase-hook-ntETYCQu.js → supabase-hook-DdDQhMlw.js} +1659 -819
- package/dist/{supautils-u8jXTGrt.js → supautils-B6HYL9eL.js} +2 -2
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +11 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +26 -12
- package/dist/svelte/runtime.d.ts +10 -3
- package/dist/svelte/runtime.js +4 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +5 -5
- package/dist/sveltekit/index.d.ts +51 -0
- package/dist/sveltekit/index.js +27 -0
- package/dist/tanstack-start/index.d.ts +51 -0
- package/dist/tanstack-start/index.js +40 -0
- package/dist/target-Bw37TFNA.js +51 -0
- package/dist/{validity-uOp8UpYn.js → tenancy-DN2QAx9z.js} +6 -42
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +36 -316
- package/dist/testing/index.d.ts +391 -106
- package/dist/testing/index.js +4574 -1286
- package/dist/testing/saas/index.d.ts +9 -8
- package/dist/testing/saas/index.js +2 -2
- package/dist/testing/saas/permissions.d.ts +1 -1
- package/dist/testing/saas/permissions.js +1 -2
- package/dist/text-BMFRfBqc.js +8 -0
- package/dist/{text-diff-BdkkYSbi.js → text-diff-BQcUapOb.js} +1 -1
- package/dist/thenable-yD7SabqG.js +31 -0
- package/dist/time-DkWjdL98.js +71 -0
- package/dist/{token-CIWxJOCh.js → token-BLZcjQgt.js} +15 -6
- package/dist/tool-refusal-CMLN5xhn.js +41 -0
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +18 -17
- package/dist/{types-DbjRN55U.d.ts → types-5Ut_pbKy.d.ts} +141 -13
- package/dist/types-BNORmDM8.d.ts +172 -0
- package/dist/types-BjV-fqcA.d.ts +57 -0
- package/dist/{types-QCuYJh4q.d.ts → types-BqAKcRNW.d.ts} +2 -1
- package/dist/types-C8-KNsFf.d.ts +107 -0
- package/dist/{types-aqOHTHcp.d.ts → types-CCpc2Dcv.d.ts} +77 -17
- package/dist/{types-Dnemwd77.d.ts → types-CZTnPFzM.d.ts} +50 -11
- package/dist/{types-C97IskBw.d.ts → types-CdlxsYQh.d.ts} +23 -11
- package/dist/{types-DxiCGmmd.d.ts → types-ClZaWzfb.d.ts} +9 -6
- package/dist/types-DX0LaKTb.d.ts +157 -0
- package/dist/types-DiQjupG2.d.ts +332 -0
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/types-_sHy8BQf.d.ts +65 -0
- package/dist/types-fbZ7JEXr.d.ts +89 -0
- package/dist/types-tIgIeIKJ.d.ts +66 -0
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CHOtwL19.js +1 -0
- package/dist/usage-DHtE8j4E.js +32 -0
- package/dist/{usage-ItS7nLcl.js → usage-T5mXq98v.js} +56 -13
- package/dist/{validation-error-Ba264OaJ.d.ts → validation-error-Bg5Tpluk.d.ts} +1 -1
- package/dist/{validation-error-CnjZ4t92.js → validation-error-ZfUHbKvf.js} +1 -1
- package/dist/validity-CZ7-y0Cj.js +79 -0
- package/dist/{verifier-BxBo6I44.js → verifier-DHuh-okk.js} +68 -21
- package/dist/verify-DbCL9bnB.js +1770 -0
- package/dist/{version-BvacVTZR.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-Soe7bGSC.js → views-DTIIO-oQ.js} +41 -2
- package/dist/{permissions-DttnqqxC.d.ts → vocabulary-D6lPdb4Z.d.ts} +120 -29
- package/dist/vue/index.d.ts +25 -21
- package/dist/vue/index.js +25 -9
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/waiter-CKy4MQSY.d.ts +36 -0
- package/dist/watch-Cb-NcaUw.js +1 -0
- package/dist/{watch-DVBJ9cBq.js → watch-CszoTJMq.js} +47 -8
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +13 -37
- package/dist/where-scope-Dv-WTP-w.js +306 -0
- package/dist/who-can-D0QoYbEb.js +364 -0
- package/dist/wire-delegation-Cv3W2eaM.js +36 -0
- package/dist/wire-denial-C7PaVYEM.js +27 -0
- package/dist/workflow/index.d.ts +5 -0
- package/dist/workflow/index.js +223 -0
- package/dist/workflow-sdk/index.d.ts +56 -0
- package/dist/workflow-sdk/index.js +78 -0
- package/dist/wrap-Bd1Tejur.d.ts +15 -0
- package/dist/wrap-gX61EtpB.js +27 -0
- package/package.json +140 -41
- package/schemas/access-event-v1.json +118 -0
- package/schemas/approval-request-v1.json +34 -1
- package/schemas/approval-signature-v1.json +94 -0
- package/schemas/automation-event-v1.json +113 -0
- package/schemas/capability-v1.json +84 -0
- package/schemas/catalog-event-v1.json +87 -0
- package/schemas/catalog-v1.json +129 -12
- package/schemas/cli-commands-v1.json +164 -0
- package/schemas/cli-result-v1.json +96 -0
- package/schemas/cloud-api-v1.json +5407 -0
- package/schemas/connector-v1.json +408 -0
- package/schemas/credential-event-v1.json +81 -0
- package/schemas/credential-v1.json +134 -0
- package/schemas/decision-event-v1.json +288 -0
- package/schemas/delivery-event-v1.json +117 -0
- package/schemas/directory-event-v1.json +85 -0
- package/schemas/evidence-export-v1.json +54 -0
- package/schemas/membership-event-v1.json +93 -0
- package/schemas/policy-v1.json +68 -0
- package/schemas/pushed-policy-v1.json +236 -0
- package/schemas/run-v1.json +162 -0
- package/schemas/snapshot-v1.json +138 -0
- package/schemas/supabase-claims-v1.json +4 -4
- package/schemas/supabase-manifest-v1.json +5 -1
- package/schemas/support-session-v1.json +111 -0
- package/skills/permdock/SKILL.md +16 -12
- package/skills/permdock-agents/SKILL.md +40 -23
- package/skills/permdock-agents/references/operations-automations-chat.md +221 -0
- package/skills/permdock-agents/references/runtimes.md +22 -18
- package/skills/permdock-approvals/SKILL.md +29 -13
- package/skills/permdock-approvals/references/delivery-and-waiters.md +172 -0
- package/skills/permdock-approvals/references/stores-and-resume.md +21 -7
- package/skills/permdock-audit/SKILL.md +3 -3
- package/skills/permdock-credentials/SKILL.md +5 -5
- package/skills/permdock-credentials/references/tokens-keys-links.md +19 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +13 -8
- package/skills/permdock-data/references/relationships.md +3 -3
- package/skills/permdock-tenancy/SKILL.md +20 -7
- package/skills/permdock-tenancy/references/contacts-and-support-sessions.md +122 -0
- package/skills/permdock-tenancy/references/ownership-and-custom-roles.md +6 -4
- package/skills/permdock-wire/SKILL.md +18 -12
- package/skills/permdock-wire/references/adapters.md +146 -50
- package/skills/permdock-wire/references/policy-options.md +15 -6
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DbYAuNkG.js +0 -224
- package/dist/arazzo-C9chp3ST.js +0 -54
- package/dist/bind-C_ob3LKa.d.ts +0 -25
- package/dist/catalog-CRW5Mx_B.js +0 -2
- package/dist/catalog-CYj-mX2O.js +0 -48
- package/dist/catalog-DWF5cYqB.js +0 -55
- package/dist/cloud-CfwZ39Rl.js +0 -50
- package/dist/cloud-DWLXO2af.js +0 -118
- package/dist/collect-CHB22Sx4.js +0 -83
- package/dist/collect-DSWOk19R.js +0 -2
- package/dist/commands-BeaGNj_o.js +0 -97
- package/dist/config-ir40y8m0.js +0 -36
- package/dist/create-CMwIl-w2.js +0 -253
- package/dist/delegation-D8pUEuce.js +0 -103
- package/dist/diff-C9RDjjhs.js +0 -48
- package/dist/doctor-Djh6JDEk.js +0 -53
- package/dist/doctor-DvH0IQff.js +0 -1194
- package/dist/doctor-collect-CjdO0wQX.js +0 -665
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/evaluation-items-CfCCejQd.js +0 -40
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-BMl1RxoX.js +0 -26
- package/dist/grantee-Cv5Sogfv.js +0 -602
- package/dist/headers-BZSDieNT.js +0 -6
- package/dist/headers-Cf-zWvsO.d.ts +0 -6
- package/dist/ids-DC4V4CFu.js +0 -18
- package/dist/index-0nNqHspG.d.ts +0 -6
- package/dist/index-BNc7Wer_.d.ts +0 -483
- package/dist/index-C7Tw7MaW.d.ts +0 -201
- package/dist/instance-options-Dhhcnm3y.js +0 -22
- package/dist/load-DwJUafYN.js +0 -2
- package/dist/manifest-iaoBXHKc.js +0 -783
- package/dist/map-AcxK9o_D.js +0 -147
- package/dist/may-use-DndQ5tQ-.js +0 -77
- package/dist/openapi-CQTsgKoB.js +0 -164
- package/dist/permdock-CbgvLnuo.js +0 -3479
- package/dist/permissions-DVoF6dMt.js +0 -662
- package/dist/policy-xyWg7QdR.js +0 -1122
- package/dist/powersync-CrBX8hY6.js +0 -2
- package/dist/powersync-DE19b9dT.js +0 -62
- package/dist/protected-BdnIEFkY.d.ts +0 -27
- package/dist/protected-xAr24FEC.d.ts +0 -40
- package/dist/relations-cjOL01hZ.js +0 -505
- package/dist/rls-P-BeBx0n.js +0 -238
- package/dist/rls-graph-CHwx0V8q.js +0 -435
- package/dist/rls-ownership-DcYlZ09B.js +0 -843
- package/dist/rls-shared-Cewd_-zI.js +0 -495
- package/dist/rls-verify-CMv9H3wV.js +0 -746
- package/dist/run-BWc9qqvE.js +0 -174
- package/dist/server-DlZ28Oz5.js +0 -268
- package/dist/sink-B1fZzIMf.d.ts +0 -104
- package/dist/sink-Bd9PSyfq.js +0 -141
- package/dist/skills-C5CbhhpG.js +0 -56
- package/dist/snapshot-Enxd0n-s.js +0 -975
- package/dist/sql-xdg5f4Fi.js +0 -27
- package/dist/src-BDwEZWrZ.js +0 -568
- package/dist/store-jOBYpiXC.d.ts +0 -36
- package/dist/stores-C0IMQrGI.d.ts +0 -52
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-config-Bj3iDH2I.js +0 -472
- package/dist/supabase-hook-gd3s8bxB.js +0 -2
- package/dist/supabase-s4o9s1O1.js +0 -83
- package/dist/thenable-okc2xDsj.js +0 -10
- package/dist/types-BnIEz1sU.d.ts +0 -48
- package/dist/types-Bvc4oWT6.d.ts +0 -9
- package/dist/types-CKNSyIf_.d.ts +0 -52
- package/dist/types-Cq_H8N_X.d.ts +0 -197
- package/dist/usage-B0YuTQRO.js +0 -42
- package/dist/usage-DorAJiU_.js +0 -2
- package/dist/vocabulary-DA8a8zif.d.ts +0 -56
- package/dist/watch-BwxLTYMZ.js +0 -2
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { h as secondsAt, i as dateAt, s as instantAt } from "./time-DkWjdL98.js";
|
|
2
|
+
import { n as CliError } from "./errors-CWTY6uih.js";
|
|
3
|
+
import { i as postForm, r as parseToken, s as runDeviceFlow } from "./device-BARQ8eYG.js";
|
|
4
|
+
import { i as writeCredentials, n as deleteCredentials, r as readCredentials, t as credentialsPath } from "./storage-C2bWdvJH.js";
|
|
5
|
+
import { n as httpRequest } from "./http-DXJ37RDA.js";
|
|
6
|
+
import { c as READ_SCOPES, d as issuerMetadata, i as credentialsInsideRepository, l as cloudUrl, n as cliRuntime, r as credentialStorage, s as CLI_CLIENT_ID, t as CREDENTIAL_SERVICE } from "./auth-DRLEizbL.js";
|
|
7
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
8
|
+
import { spawn } from "node:child_process";
|
|
9
|
+
import { createServer } from "node:http";
|
|
10
|
+
//#region src/cli/cloud/loopback.ts
|
|
11
|
+
/** How long the loopback listener waits for the browser to come back. */
|
|
12
|
+
const LOOPBACK_TIMEOUT_MS = 3e5;
|
|
13
|
+
function base64url(bytes) {
|
|
14
|
+
return bytes.toString("base64url");
|
|
15
|
+
}
|
|
16
|
+
function listen(server) {
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
server.once("error", reject);
|
|
19
|
+
server.listen(0, "127.0.0.1", () => {
|
|
20
|
+
const address = server.address();
|
|
21
|
+
resolve(typeof address === "object" && address !== null ? address.port : 0);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* RFC 8252 native-app login: an authorization code delivered to a listener on
|
|
27
|
+
* `127.0.0.1` with an ephemeral port, bound by PKCE S256 (RFC 7636) and a
|
|
28
|
+
* `state` that the callback must echo.
|
|
29
|
+
*/
|
|
30
|
+
async function runLoopbackFlow(options, runtime) {
|
|
31
|
+
const verifier = base64url(randomBytes(32));
|
|
32
|
+
const challenge = base64url(createHash("sha256").update(verifier).digest());
|
|
33
|
+
const state = base64url(randomBytes(16));
|
|
34
|
+
const { promise: callback, resolve: settle } = Promise.withResolvers();
|
|
35
|
+
const server = createServer((request, response) => {
|
|
36
|
+
const url = new URL(request.url ?? "/", "http://127.0.0.1");
|
|
37
|
+
if (url.pathname !== "/callback") {
|
|
38
|
+
response.writeHead(404).end();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const code = url.searchParams.get("code");
|
|
42
|
+
const error = url.searchParams.get("error");
|
|
43
|
+
const ok = url.searchParams.get("state") === state && code !== null;
|
|
44
|
+
response.writeHead(ok ? 200 : 400, { "content-type": "text/plain; charset=utf-8" }).end(ok ? "PermDock login complete. You can close this tab.\n" : "PermDock login failed. Return to the terminal.\n");
|
|
45
|
+
settle(ok ? {
|
|
46
|
+
ok: true,
|
|
47
|
+
code
|
|
48
|
+
} : {
|
|
49
|
+
ok: false,
|
|
50
|
+
error: error ?? "state-mismatch"
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
let port;
|
|
54
|
+
try {
|
|
55
|
+
port = await listen(server);
|
|
56
|
+
} catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const redirectUri = `http://127.0.0.1:${String(port)}/callback`;
|
|
60
|
+
const authorize = new URL(options.authorizationEndpoint);
|
|
61
|
+
authorize.searchParams.set("response_type", "code");
|
|
62
|
+
authorize.searchParams.set("client_id", options.clientId);
|
|
63
|
+
authorize.searchParams.set("redirect_uri", redirectUri);
|
|
64
|
+
authorize.searchParams.set("scope", options.scope);
|
|
65
|
+
authorize.searchParams.set("state", state);
|
|
66
|
+
authorize.searchParams.set("code_challenge", challenge);
|
|
67
|
+
authorize.searchParams.set("code_challenge_method", "S256");
|
|
68
|
+
options.write(`Open ${authorize.href} to log in\n`);
|
|
69
|
+
options.open?.(authorize.href);
|
|
70
|
+
let timer;
|
|
71
|
+
const timeout = new Promise((resolve) => {
|
|
72
|
+
timer = setTimeout(() => {
|
|
73
|
+
resolve({
|
|
74
|
+
ok: false,
|
|
75
|
+
error: "timeout"
|
|
76
|
+
});
|
|
77
|
+
}, options.timeoutMs ?? LOOPBACK_TIMEOUT_MS);
|
|
78
|
+
});
|
|
79
|
+
const result = await Promise.race([callback, timeout]);
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
server.closeAllConnections();
|
|
82
|
+
server.close();
|
|
83
|
+
if (!result.ok) return null;
|
|
84
|
+
const body = await postForm(runtime, options.tokenEndpoint, {
|
|
85
|
+
grant_type: "authorization_code",
|
|
86
|
+
code: result.code,
|
|
87
|
+
redirect_uri: redirectUri,
|
|
88
|
+
client_id: options.clientId,
|
|
89
|
+
code_verifier: verifier
|
|
90
|
+
});
|
|
91
|
+
if (body === null) return null;
|
|
92
|
+
const token = parseToken(body, secondsAt(runtime.now?.()));
|
|
93
|
+
return token.ok ? token.credential : null;
|
|
94
|
+
}
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region src/cli/cloud/login.ts
|
|
97
|
+
/** Opens `url` in the default browser; a failure leaves the printed URL to the user. */
|
|
98
|
+
function openBrowser(url) {
|
|
99
|
+
const [command, args] = process.platform === "darwin" ? ["open", [url]] : process.platform === "win32" ? ["cmd", [
|
|
100
|
+
"/c",
|
|
101
|
+
"start",
|
|
102
|
+
"",
|
|
103
|
+
url
|
|
104
|
+
]] : ["xdg-open", [url]];
|
|
105
|
+
try {
|
|
106
|
+
const child = spawn(command, args, {
|
|
107
|
+
stdio: "ignore",
|
|
108
|
+
detached: true
|
|
109
|
+
});
|
|
110
|
+
child.on("error", () => void 0);
|
|
111
|
+
child.unref();
|
|
112
|
+
} catch {}
|
|
113
|
+
}
|
|
114
|
+
/** RFC 7009 answers 200 with an empty body, also for a token it does not know. */
|
|
115
|
+
async function revoke(runtime, endpoint, fields) {
|
|
116
|
+
try {
|
|
117
|
+
return (await httpRequest(runtime.fetch === void 0 ? {} : { fetch: runtime.fetch }, {
|
|
118
|
+
url: endpoint,
|
|
119
|
+
method: "POST",
|
|
120
|
+
service: endpoint,
|
|
121
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
122
|
+
body: new URLSearchParams(fields)
|
|
123
|
+
})).ok;
|
|
124
|
+
} catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function failed(code, output) {
|
|
129
|
+
return {
|
|
130
|
+
code,
|
|
131
|
+
output
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async function runLogin(input) {
|
|
135
|
+
const issuer = cloudUrl(input.url, input.env);
|
|
136
|
+
const runtime = cliRuntime(input.io, input.env);
|
|
137
|
+
const inside = credentialsInsideRepository(input.cwd, runtime);
|
|
138
|
+
if (inside !== null) return failed(2, `permdock login refuses to store credentials inside the repository (${inside}); point XDG_CONFIG_HOME outside it`);
|
|
139
|
+
const metadata = await issuerMetadata(issuer, runtime);
|
|
140
|
+
if (metadata === null) return failed(1, `permdock login: ${issuer} publishes no RFC 8414 metadata for that issuer`);
|
|
141
|
+
const scope = [.../* @__PURE__ */ new Set([...READ_SCOPES, ...input.scopes])].join(" ");
|
|
142
|
+
const open = input.open ? openBrowser : void 0;
|
|
143
|
+
const say = (text) => {
|
|
144
|
+
input.io.stderr(text.replace(/\n$/u, ""));
|
|
145
|
+
};
|
|
146
|
+
let credential = null;
|
|
147
|
+
if (!input.loopback && metadata.deviceAuthorizationEndpoint !== void 0 && metadata.tokenEndpoint !== void 0) credential = await runDeviceFlow({
|
|
148
|
+
clientId: CLI_CLIENT_ID,
|
|
149
|
+
scope,
|
|
150
|
+
authorizationEndpoint: metadata.deviceAuthorizationEndpoint,
|
|
151
|
+
tokenEndpoint: metadata.tokenEndpoint,
|
|
152
|
+
...open === void 0 ? {} : { open }
|
|
153
|
+
}, runtime, say);
|
|
154
|
+
else if (metadata.authorizationEndpoint !== void 0 && metadata.tokenEndpoint !== void 0) credential = await runLoopbackFlow({
|
|
155
|
+
authorizationEndpoint: metadata.authorizationEndpoint,
|
|
156
|
+
tokenEndpoint: metadata.tokenEndpoint,
|
|
157
|
+
clientId: CLI_CLIENT_ID,
|
|
158
|
+
scope,
|
|
159
|
+
write: say,
|
|
160
|
+
...open === void 0 ? {} : { open }
|
|
161
|
+
}, runtime);
|
|
162
|
+
else return failed(1, `permdock login: ${issuer} offers neither the device flow nor an authorization endpoint`);
|
|
163
|
+
if (credential === null) return failed(1, `permdock login: ${issuer} did not issue a token`);
|
|
164
|
+
const granted = credential.scope === void 0 ? {
|
|
165
|
+
...credential,
|
|
166
|
+
scope
|
|
167
|
+
} : credential;
|
|
168
|
+
const storage = await credentialStorage();
|
|
169
|
+
const where = writeCredentials(storage, issuer, granted, runtime) === "keychain" ? "the OS keychain" : credentialsPath(CREDENTIAL_SERVICE, runtime);
|
|
170
|
+
return {
|
|
171
|
+
code: 0,
|
|
172
|
+
output: input.json ? JSON.stringify({
|
|
173
|
+
issuer,
|
|
174
|
+
scope: granted.scope,
|
|
175
|
+
storage: where
|
|
176
|
+
}) : `logged in to ${issuer} (${granted.scope ?? scope}); credentials in ${where}`
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/** Revokes the stored login (RFC 7009) and deletes it; a revocation failure still deletes it. */
|
|
180
|
+
async function runLogout(input) {
|
|
181
|
+
const issuer = cloudUrl(input.url, input.env);
|
|
182
|
+
const runtime = cliRuntime(input.io, input.env);
|
|
183
|
+
const storage = await credentialStorage();
|
|
184
|
+
const credential = readCredentials(storage, issuer, runtime);
|
|
185
|
+
if (credential === null) return {
|
|
186
|
+
code: 0,
|
|
187
|
+
output: input.json ? JSON.stringify({
|
|
188
|
+
issuer,
|
|
189
|
+
status: "not logged in"
|
|
190
|
+
}) : `not logged in to ${issuer}`
|
|
191
|
+
};
|
|
192
|
+
const metadata = await issuerMetadata(issuer, runtime);
|
|
193
|
+
let revoked = false;
|
|
194
|
+
if (metadata?.revocationEndpoint !== void 0) {
|
|
195
|
+
const refresh = credential.refresh_token;
|
|
196
|
+
revoked = await revoke(runtime, metadata.revocationEndpoint, {
|
|
197
|
+
token: refresh ?? credential.access_token,
|
|
198
|
+
token_type_hint: refresh === void 0 ? "access_token" : "refresh_token",
|
|
199
|
+
client_id: CLI_CLIENT_ID
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
deleteCredentials(storage, issuer, runtime);
|
|
203
|
+
const status = revoked ? "revoked" : "deleted";
|
|
204
|
+
return {
|
|
205
|
+
code: 0,
|
|
206
|
+
output: input.json ? JSON.stringify({
|
|
207
|
+
issuer,
|
|
208
|
+
status
|
|
209
|
+
}) : `logged out of ${issuer} (${revoked ? "token revoked" : "credentials deleted; the token was not revoked"})`
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/** The credential the next Cloud call sends, without sending it. */
|
|
213
|
+
async function runWhoami(input) {
|
|
214
|
+
const issuer = cloudUrl(input.url, input.env);
|
|
215
|
+
for (const name of ["PERMDOCK_CLOUD_KEY", "PERMDOCK_CLOUD_TOKEN"]) {
|
|
216
|
+
const value = input.env[name];
|
|
217
|
+
if (value !== void 0 && value !== "") {
|
|
218
|
+
const data = {
|
|
219
|
+
issuer,
|
|
220
|
+
source: name
|
|
221
|
+
};
|
|
222
|
+
return {
|
|
223
|
+
code: 0,
|
|
224
|
+
output: input.json ? JSON.stringify(data) : `${issuer}: ${name} from the environment`,
|
|
225
|
+
data
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const runtime = cliRuntime(input.io, input.env);
|
|
230
|
+
const credential = readCredentials(await credentialStorage(), issuer, runtime);
|
|
231
|
+
if (credential === null) throw new CliError("action", `not logged in to ${issuer}`, {
|
|
232
|
+
code: "auth_required",
|
|
233
|
+
next: [{
|
|
234
|
+
command: "permdock login",
|
|
235
|
+
when: "to log in"
|
|
236
|
+
}]
|
|
237
|
+
});
|
|
238
|
+
const scopes = (credential.scope ?? "").split(" ").filter((scope) => scope !== "");
|
|
239
|
+
const expired = credential.expires_at !== void 0 && credential.expires_at <= secondsAt(runtime.now?.()) && credential.refresh_token === void 0;
|
|
240
|
+
const data = {
|
|
241
|
+
issuer,
|
|
242
|
+
source: "login",
|
|
243
|
+
scopes,
|
|
244
|
+
...credential.expires_at === void 0 ? {} : { expiresAt: dateAt(instantAt(credential.expires_at)).toISOString() },
|
|
245
|
+
expired
|
|
246
|
+
};
|
|
247
|
+
return {
|
|
248
|
+
code: 0,
|
|
249
|
+
output: input.json ? JSON.stringify(data) : `${issuer}: logged in (${scopes.join(" ") || "no scopes"})${expired ? "; the login has expired, run permdock login" : ""}`,
|
|
250
|
+
data
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//#endregion
|
|
254
|
+
export { runLogin, runLogout, runWhoami };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
2
|
+
import { n as PermDockValidationError } from "./validation-error-ZfUHbKvf.js";
|
|
3
|
+
import { n as copyJson, t as checkSchema } from "./json-schema-B-vAwlde.js";
|
|
4
|
+
import { t as supabaseManifestSchema } from "./manifest-schema-C0kK_8V0.js";
|
|
5
|
+
//#region src/supabase/manifest.ts
|
|
6
|
+
/**
|
|
7
|
+
* Reads a `permdock.manifest.json` document (parsed, or the JSON text) and
|
|
8
|
+
* validates it against `schemas/supabase-manifest-v1.json`. Returns a
|
|
9
|
+
* deep-frozen copy built from own keys; throws `PermDockValidationError`
|
|
10
|
+
* with every issue, so a manifest of another major is refused.
|
|
11
|
+
*/
|
|
12
|
+
function parseSupabaseManifest(json) {
|
|
13
|
+
const issues = [];
|
|
14
|
+
let input = json;
|
|
15
|
+
if (typeof json === "string") try {
|
|
16
|
+
input = JSON.parse(json);
|
|
17
|
+
} catch (error) {
|
|
18
|
+
invalidManifest([{
|
|
19
|
+
message: `Expected JSON text: ${error instanceof Error ? error.message : String(error)}`,
|
|
20
|
+
path: []
|
|
21
|
+
}]);
|
|
22
|
+
}
|
|
23
|
+
const copy = copyJson(input, [], issues, /* @__PURE__ */ new Set());
|
|
24
|
+
if (issues.length === 0) checkSchema(supabaseManifestSchema, copy, [], issues);
|
|
25
|
+
if (issues.length > 0) invalidManifest(issues);
|
|
26
|
+
return freezeDeep(copy);
|
|
27
|
+
}
|
|
28
|
+
function invalidManifest(issues) {
|
|
29
|
+
const [first] = issues;
|
|
30
|
+
const where = first?.path === void 0 || first.path.length === 0 ? "" : ` at ${first.path.map(String).join(".")}`;
|
|
31
|
+
const more = issues.length > 1 ? ` (and ${String(issues.length - 1)} more)` : "";
|
|
32
|
+
throw new PermDockValidationError({
|
|
33
|
+
code: "invalid-data",
|
|
34
|
+
permission: "",
|
|
35
|
+
resource: "",
|
|
36
|
+
boundary: "supabase-manifest",
|
|
37
|
+
issues,
|
|
38
|
+
message: `PermDock: invalid Supabase manifest${where}: ${first?.message ?? "unknown"}${more}`
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { parseSupabaseManifest as t };
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
//#region src/cli/core/manifest.ts
|
|
2
|
+
const DOCS_BASE = "https://permdock.com/docs/cli";
|
|
3
|
+
function leaf(name, summary, options) {
|
|
4
|
+
return {
|
|
5
|
+
kind: "leaf",
|
|
6
|
+
name,
|
|
7
|
+
summary,
|
|
8
|
+
...options
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function group(name, summary, docs, children) {
|
|
12
|
+
return {
|
|
13
|
+
kind: "group",
|
|
14
|
+
name,
|
|
15
|
+
summary,
|
|
16
|
+
docs,
|
|
17
|
+
children
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const SECTIONS = [
|
|
21
|
+
{
|
|
22
|
+
title: "Get started",
|
|
23
|
+
entries: [
|
|
24
|
+
leaf("init", "Write a preset's permissions, policy, app and wiring into the project", {
|
|
25
|
+
examples: [
|
|
26
|
+
"permdock init --preset p1AQIDBAc",
|
|
27
|
+
"permdock init --archetype b2b --framework hono --integration mcp",
|
|
28
|
+
"permdock init --archetype api --auth supabase --backend drizzle --service cloud-decision-log"
|
|
29
|
+
],
|
|
30
|
+
docs: "init",
|
|
31
|
+
effects: ["files"],
|
|
32
|
+
config: false,
|
|
33
|
+
load: async () => (await import("./init-GG6Jh8HD.js")).init
|
|
34
|
+
}),
|
|
35
|
+
group("preset", "Decode a preset code, or print its permdock.com/create link", "preset", [leaf("decode", "Print what a preset code holds", {
|
|
36
|
+
examples: ["permdock preset decode p1AQIDBAc"],
|
|
37
|
+
docs: "preset",
|
|
38
|
+
effects: [],
|
|
39
|
+
config: false,
|
|
40
|
+
load: async () => (await import("./init-GG6Jh8HD.js")).presetDecode
|
|
41
|
+
}), leaf("url", "Print the permdock.com/create link that opens a code", {
|
|
42
|
+
examples: ["permdock preset url p1AQIDBAc"],
|
|
43
|
+
docs: "preset",
|
|
44
|
+
effects: [],
|
|
45
|
+
config: false,
|
|
46
|
+
load: async () => (await import("./init-GG6Jh8HD.js")).presetUrl
|
|
47
|
+
})]),
|
|
48
|
+
group("skills", "Install, update or list the PermDock Agent Skills", "skills", [
|
|
49
|
+
leaf("install", "Copy the Agent Skills into the agent folders", {
|
|
50
|
+
examples: [
|
|
51
|
+
"permdock skills install",
|
|
52
|
+
"permdock skills install --for cursor --for claude",
|
|
53
|
+
"permdock skills install --check"
|
|
54
|
+
],
|
|
55
|
+
docs: "skills",
|
|
56
|
+
effects: ["files"],
|
|
57
|
+
config: false,
|
|
58
|
+
load: async () => (await import("./skills-CTYwkl44.js")).install
|
|
59
|
+
}),
|
|
60
|
+
leaf("update", "Replace installed skills with this version's", {
|
|
61
|
+
examples: ["permdock skills update"],
|
|
62
|
+
docs: "skills",
|
|
63
|
+
effects: ["files"],
|
|
64
|
+
config: false,
|
|
65
|
+
load: async () => (await import("./skills-CTYwkl44.js")).update
|
|
66
|
+
}),
|
|
67
|
+
leaf("list", "List the skills and where each is installed", {
|
|
68
|
+
examples: ["permdock skills list"],
|
|
69
|
+
docs: "skills",
|
|
70
|
+
effects: [],
|
|
71
|
+
config: false,
|
|
72
|
+
load: async () => (await import("./skills-CTYwkl44.js")).list
|
|
73
|
+
})
|
|
74
|
+
]),
|
|
75
|
+
leaf("doctor", "Check a PermDock installation and print a fix for each finding", {
|
|
76
|
+
examples: [
|
|
77
|
+
"permdock doctor",
|
|
78
|
+
"permdock doctor --only imports,references",
|
|
79
|
+
"permdock doctor --format github"
|
|
80
|
+
],
|
|
81
|
+
docs: "doctor",
|
|
82
|
+
effects: ["files"],
|
|
83
|
+
config: true,
|
|
84
|
+
findings: true,
|
|
85
|
+
load: async () => (await import("./doctor-CxiwSfqH.js")).doctor
|
|
86
|
+
}),
|
|
87
|
+
leaf("completion", "Print the shell completion script for bash, zsh or fish", {
|
|
88
|
+
examples: ["permdock completion zsh > ~/.zfunc/_permdock", "eval \"$(permdock completion bash)\""],
|
|
89
|
+
docs: "completion",
|
|
90
|
+
effects: [],
|
|
91
|
+
config: false,
|
|
92
|
+
shellOutput: true,
|
|
93
|
+
load: async () => (await import("./completion-BqhRBJD8.js")).completion
|
|
94
|
+
})
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
title: "Permissions",
|
|
99
|
+
entries: [
|
|
100
|
+
leaf("collect", "Scan the sources for definePermissions() and references; write the catalog and barrel", {
|
|
101
|
+
examples: [
|
|
102
|
+
"permdock collect",
|
|
103
|
+
"permdock collect --check",
|
|
104
|
+
"permdock collect --watch"
|
|
105
|
+
],
|
|
106
|
+
docs: "collect",
|
|
107
|
+
effects: ["files"],
|
|
108
|
+
config: true,
|
|
109
|
+
load: async () => (await import("./collect-DloHbDVa.js")).collect
|
|
110
|
+
}),
|
|
111
|
+
leaf("catalog", "Export the catalog as catalog JSON, JSON Schema or Markdown", {
|
|
112
|
+
examples: ["permdock catalog --out permissions.catalog.json", "permdock catalog --kind markdown"],
|
|
113
|
+
docs: "catalog",
|
|
114
|
+
effects: ["files"],
|
|
115
|
+
config: true,
|
|
116
|
+
load: async () => (await import("./catalog-R_A__RsH.js")).catalog
|
|
117
|
+
}),
|
|
118
|
+
leaf("usage", "Report unused, ungranted and role-less permissions and conditions on undeclared fields", {
|
|
119
|
+
examples: ["permdock usage", "permdock usage --fail-on warning"],
|
|
120
|
+
docs: "usage",
|
|
121
|
+
effects: [],
|
|
122
|
+
config: true,
|
|
123
|
+
findings: true,
|
|
124
|
+
load: async () => (await import("./usage-DHtE8j4E.js")).usage
|
|
125
|
+
}),
|
|
126
|
+
leaf("diff", "Compare two policies or catalogs; exit 1 on a breaking change", {
|
|
127
|
+
examples: ["permdock diff main.catalog.json permissions.catalog.json", "permdock diff ./old-policy.ts ./src/policy.ts --impact"],
|
|
128
|
+
docs: "diff",
|
|
129
|
+
effects: [],
|
|
130
|
+
config: true,
|
|
131
|
+
load: async () => (await import("./diff-CxZo9pTq.js")).diff
|
|
132
|
+
}),
|
|
133
|
+
leaf("config", "Check permdock.config.ts for unknown keys, or print the effective config", {
|
|
134
|
+
examples: ["permdock config", "permdock config --print"],
|
|
135
|
+
docs: "config",
|
|
136
|
+
effects: [],
|
|
137
|
+
config: true,
|
|
138
|
+
findings: true,
|
|
139
|
+
load: async () => (await import("./config-B46rm9sc.js")).config
|
|
140
|
+
})
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
title: "Database",
|
|
145
|
+
entries: [
|
|
146
|
+
group("rls", "Generate, import, verify or migrate Postgres RLS policies", "rls", [
|
|
147
|
+
leaf("generate", "Compile the policy into RLS policies and helpers", {
|
|
148
|
+
examples: ["permdock rls generate --target sql --out supabase/schemas/permdock.sql", "permdock rls generate --check"],
|
|
149
|
+
docs: "rls",
|
|
150
|
+
effects: [
|
|
151
|
+
"files",
|
|
152
|
+
"database:read",
|
|
153
|
+
"network"
|
|
154
|
+
],
|
|
155
|
+
config: true,
|
|
156
|
+
load: async () => (await import("./rls-BA8an5Ap.js")).generate
|
|
157
|
+
}),
|
|
158
|
+
leaf("import", "Turn existing RLS policies into a generated definition", {
|
|
159
|
+
examples: ["permdock rls import --sql schema.sql --out src/permissions.generated.ts", "permdock rls import --db-url-stdin --out src/permissions.generated.ts"],
|
|
160
|
+
docs: "rls",
|
|
161
|
+
effects: ["files", "database:read"],
|
|
162
|
+
config: true,
|
|
163
|
+
load: async () => (await import("./rls-BA8an5Ap.js")).importPolicies
|
|
164
|
+
}),
|
|
165
|
+
leaf("verify", "Run the fixtures against the policies, or compare a live database", {
|
|
166
|
+
examples: [
|
|
167
|
+
"permdock rls verify",
|
|
168
|
+
"permdock rls verify --kind pgtap",
|
|
169
|
+
"permdock rls verify --introspect --db-url-stdin"
|
|
170
|
+
],
|
|
171
|
+
docs: "rls",
|
|
172
|
+
effects: ["database:read"],
|
|
173
|
+
config: true,
|
|
174
|
+
load: async () => (await import("./rls-BA8an5Ap.js")).verify
|
|
175
|
+
}),
|
|
176
|
+
leaf("migrate", "Rewrite hand-written policies onto the generated helpers", {
|
|
177
|
+
examples: ["permdock rls migrate --sql supabase/migrations --dry-run", "permdock rls migrate --sql supabase/migrations"],
|
|
178
|
+
docs: "rls",
|
|
179
|
+
effects: ["rewrite", "files"],
|
|
180
|
+
config: true,
|
|
181
|
+
load: async () => (await import("./rls-BA8an5Ap.js")).migrate
|
|
182
|
+
})
|
|
183
|
+
]),
|
|
184
|
+
group("supabase", "Generate the Supabase Custom Access Token Hook, or inspect its manifest", "supabase", [group("hook", "The Custom Access Token Hook", "supabase", [leaf("generate", "Compile the membership sources into the hook migration", {
|
|
185
|
+
examples: ["permdock supabase hook generate --out supabase/schemas/permdock_hook.sql", "permdock supabase hook generate --check"],
|
|
186
|
+
docs: "supabase",
|
|
187
|
+
effects: ["files", "database:read"],
|
|
188
|
+
config: true,
|
|
189
|
+
load: async () => (await import("./supabase-9pqI57pW.js")).hookGenerate
|
|
190
|
+
})]), leaf("inspect", "Print or write the hook and helper manifest", {
|
|
191
|
+
examples: ["permdock supabase inspect", "permdock supabase inspect --out"],
|
|
192
|
+
docs: "supabase",
|
|
193
|
+
effects: ["files"],
|
|
194
|
+
config: true,
|
|
195
|
+
load: async () => (await import("./supabase-9pqI57pW.js")).inspect
|
|
196
|
+
})]),
|
|
197
|
+
group("powersync", "Generate PowerSync Sync Streams from the policy, or verify them", "powersync", [leaf("generate", "Compile the read grants into sync-config.yaml", {
|
|
198
|
+
examples: ["permdock powersync generate", "permdock powersync generate --check"],
|
|
199
|
+
docs: "powersync",
|
|
200
|
+
effects: ["files"],
|
|
201
|
+
config: true,
|
|
202
|
+
load: async () => (await import("./powersync-BHfuehf3.js")).generate
|
|
203
|
+
}), leaf("verify", "Fail on stale streams or a stream that syncs a denied row", {
|
|
204
|
+
examples: ["permdock powersync verify", "permdock powersync verify --db-url-stdin"],
|
|
205
|
+
docs: "powersync",
|
|
206
|
+
effects: ["database:read"],
|
|
207
|
+
config: true,
|
|
208
|
+
load: async () => (await import("./powersync-BHfuehf3.js")).verify
|
|
209
|
+
})])
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
title: "Interop",
|
|
214
|
+
entries: [
|
|
215
|
+
group("openapi", "Emit security into an OpenAPI document, or import one into a definition", "openapi", [leaf("emit", "Write security and securitySchemes into an OpenAPI document", {
|
|
216
|
+
examples: ["permdock openapi emit --doc openapi.json --out openapi.secured.json", "permdock openapi emit --doc openapi.json --kind overlay --out overlay.json"],
|
|
217
|
+
docs: "openapi",
|
|
218
|
+
effects: ["files"],
|
|
219
|
+
config: true,
|
|
220
|
+
load: async () => (await import("./openapi-ahr8rHu3.js")).emit
|
|
221
|
+
}), leaf("import", "Turn an OpenAPI document into a generated definition", {
|
|
222
|
+
examples: ["permdock openapi import --doc openapi.yaml --out src/permissions.generated.ts"],
|
|
223
|
+
docs: "openapi",
|
|
224
|
+
effects: ["files", "network"],
|
|
225
|
+
config: false,
|
|
226
|
+
load: async () => (await import("./openapi-ahr8rHu3.js")).importDocument
|
|
227
|
+
})]),
|
|
228
|
+
group("arazzo", "Check Arazzo workflows against the permissions", "arazzo", [leaf("check", "Resolve every Arazzo step to x-permdock-permissions", {
|
|
229
|
+
examples: ["permdock arazzo check --doc arazzo.json --openapi openapi.json"],
|
|
230
|
+
docs: "arazzo",
|
|
231
|
+
effects: [],
|
|
232
|
+
config: true,
|
|
233
|
+
findings: true,
|
|
234
|
+
load: async () => (await import("./arazzo-B6lebmiQ.js")).check
|
|
235
|
+
})]),
|
|
236
|
+
leaf("scan", "List authorization checks written without PermDock, to adopt it in an existing app", {
|
|
237
|
+
examples: ["permdock scan", "permdock scan --src app,lib --pattern isBeta"],
|
|
238
|
+
docs: "scan",
|
|
239
|
+
effects: [],
|
|
240
|
+
config: true,
|
|
241
|
+
findings: true,
|
|
242
|
+
load: async () => (await import("./scan-BOI5tJ-6.js")).scan
|
|
243
|
+
}),
|
|
244
|
+
group("casl", "Import CASL rules into a generated module", "casl", [leaf("import", "Turn CASL rules per role into a permissions and policy module", {
|
|
245
|
+
examples: ["permdock casl import --rules rules.json --out src/permissions.generated.ts"],
|
|
246
|
+
docs: "casl",
|
|
247
|
+
effects: ["files"],
|
|
248
|
+
config: false,
|
|
249
|
+
load: async () => (await import("./casl-64gpT-8x.js")).caslImport
|
|
250
|
+
})]),
|
|
251
|
+
group("casbin", "Import a Casbin model and policy into a generated module", "casbin", [leaf("import", "Turn a Casbin RBAC model and policy into a permissions and policy module", {
|
|
252
|
+
examples: ["permdock casbin import --model model.conf --policy policy.csv --out src/permissions.generated.ts"],
|
|
253
|
+
docs: "casbin",
|
|
254
|
+
effects: ["files"],
|
|
255
|
+
config: false,
|
|
256
|
+
load: async () => (await import("./casbin-Cr7RLtA3.js")).casbinImport
|
|
257
|
+
})])
|
|
258
|
+
]
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
title: "Account and Cloud",
|
|
262
|
+
entries: [
|
|
263
|
+
leaf("login", "Log in to PermDock Cloud with the device flow (RFC 8628) or a loopback redirect (RFC 8252)", {
|
|
264
|
+
examples: ["permdock login", "permdock login --scope catalog:write"],
|
|
265
|
+
docs: "login",
|
|
266
|
+
effects: ["network", "files"],
|
|
267
|
+
config: false,
|
|
268
|
+
load: async () => (await import("./login-Dfe5RlYk.js")).login
|
|
269
|
+
}),
|
|
270
|
+
leaf("logout", "Revoke and delete the stored PermDock Cloud login", {
|
|
271
|
+
examples: ["permdock logout"],
|
|
272
|
+
docs: "login",
|
|
273
|
+
effects: ["network", "files"],
|
|
274
|
+
config: false,
|
|
275
|
+
load: async () => (await import("./login-Dfe5RlYk.js")).logout
|
|
276
|
+
}),
|
|
277
|
+
leaf("whoami", "Print the PermDock Cloud identity the CLI acts as", {
|
|
278
|
+
examples: ["permdock whoami", "permdock whoami --json"],
|
|
279
|
+
docs: "login",
|
|
280
|
+
effects: [],
|
|
281
|
+
config: false,
|
|
282
|
+
load: async () => (await import("./login-Dfe5RlYk.js")).whoami
|
|
283
|
+
}),
|
|
284
|
+
group("cloud", "Publish to or pull from a PermDock Cloud project", "cloud", [leaf("push", "Publish the catalog, policy and manifest to a Cloud project", {
|
|
285
|
+
examples: ["permdock cloud push --dry-run", "permdock cloud push --project prj_123"],
|
|
286
|
+
docs: "cloud",
|
|
287
|
+
effects: ["network", "cloud:write"],
|
|
288
|
+
config: true,
|
|
289
|
+
load: async () => (await import("./cloud-CIoHNevm.js")).push
|
|
290
|
+
}), leaf("pull", "Write a Cloud project's published catalog and manifest", {
|
|
291
|
+
examples: ["permdock cloud pull --project prj_123"],
|
|
292
|
+
docs: "cloud",
|
|
293
|
+
effects: ["network", "files"],
|
|
294
|
+
config: true,
|
|
295
|
+
load: async () => (await import("./cloud-CIoHNevm.js")).pull
|
|
296
|
+
})])
|
|
297
|
+
]
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
title: "Upgrade",
|
|
301
|
+
entries: [leaf("codemod", "Apply a release's renames to files that import permdock; list call sites to edit by hand", {
|
|
302
|
+
examples: ["permdock codemod 0.5 --dry-run", "permdock codemod 0.5 src"],
|
|
303
|
+
docs: "codemod",
|
|
304
|
+
effects: ["rewrite"],
|
|
305
|
+
config: false,
|
|
306
|
+
load: async () => (await import("./codemod-Bmj9dWMH.js")).codemod
|
|
307
|
+
})]
|
|
308
|
+
}
|
|
309
|
+
];
|
|
310
|
+
/** The hidden leaf shells call for dynamic completion candidates. */
|
|
311
|
+
const COMPLETE_LEAF = leaf("__complete", "Print completion candidates for a partial command line", {
|
|
312
|
+
examples: [],
|
|
313
|
+
docs: "completion",
|
|
314
|
+
effects: [],
|
|
315
|
+
config: false,
|
|
316
|
+
shellOutput: true,
|
|
317
|
+
hidden: true,
|
|
318
|
+
load: async () => (await import("./completion-BqhRBJD8.js")).complete
|
|
319
|
+
});
|
|
320
|
+
const ROOT = group("permdock", "Collect, export, diff and check the permissions a PermDock policy declares", "", [...SECTIONS.flatMap((section) => section.entries), COMPLETE_LEAF]);
|
|
321
|
+
/** Each leaf with its path from the root, in manifest order. */
|
|
322
|
+
function leaves(entry = ROOT, path = []) {
|
|
323
|
+
return entry.children.flatMap((child) => child.kind === "leaf" ? [{
|
|
324
|
+
path: [...path, child.name],
|
|
325
|
+
entry: child
|
|
326
|
+
}] : leaves(child, [...path, child.name]));
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Walks positional tokens down the tree until a leaf. Flags may sit
|
|
330
|
+
* anywhere; only bare words name a child.
|
|
331
|
+
*/
|
|
332
|
+
function resolve(argv) {
|
|
333
|
+
let node = ROOT;
|
|
334
|
+
const path = [];
|
|
335
|
+
const rest = [];
|
|
336
|
+
for (const [i, token] of argv.entries()) {
|
|
337
|
+
if (token === "--") {
|
|
338
|
+
rest.push(...argv.slice(i));
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
if (token.startsWith("-") && token !== "-") {
|
|
342
|
+
rest.push(token);
|
|
343
|
+
continue;
|
|
344
|
+
}
|
|
345
|
+
const child = node.children.find((item) => item.name === token);
|
|
346
|
+
if (child === void 0) return {
|
|
347
|
+
kind: "group",
|
|
348
|
+
path,
|
|
349
|
+
entry: node,
|
|
350
|
+
unknown: token,
|
|
351
|
+
rest: [...rest, ...argv.slice(i + 1)]
|
|
352
|
+
};
|
|
353
|
+
path.push(child.name);
|
|
354
|
+
if (child.kind === "leaf") return {
|
|
355
|
+
kind: "leaf",
|
|
356
|
+
path,
|
|
357
|
+
entry: child,
|
|
358
|
+
rest: [...rest, ...argv.slice(i + 1)]
|
|
359
|
+
};
|
|
360
|
+
node = child;
|
|
361
|
+
}
|
|
362
|
+
return {
|
|
363
|
+
kind: "group",
|
|
364
|
+
path,
|
|
365
|
+
entry: node,
|
|
366
|
+
rest
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
//#endregion
|
|
370
|
+
export { resolve as a, leaves as i, ROOT as n, SECTIONS as r, DOCS_BASE as t };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/cli/manifest-json.ts
|
|
2
|
+
/** Where `permdock supabase inspect --out` writes the manifest by default. */
|
|
3
|
+
const MANIFEST_FILE = "permdock.manifest.json";
|
|
4
|
+
/** The bytes `permdock supabase inspect --out` and `permdock cloud pull` write. */
|
|
5
|
+
function formatManifestJson(manifest) {
|
|
6
|
+
return `${JSON.stringify(manifest, null, 2)}\n`;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { formatManifestJson as n, MANIFEST_FILE as t };
|