permdock 0.4.0 → 0.6.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/{schema-Bol6gqXA.js → 2020-C9VN-x8c.js} +5 -130
- package/dist/a2a/index.d.ts +6 -6
- package/dist/a2a/index.js +14 -17
- package/dist/{adapter-context-mlWsVGGg.js → adapter-context-CRhqyzCk.js} +1 -1
- package/dist/adoption-scan-DCYe60Pi.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 -35
- package/dist/ai-sdk/index.js +37 -23
- package/dist/{app-data-CV8pqqMi.js → app-data-MuyzVqX8.js} +2 -1
- package/dist/approval-header-CJACtHkv.js +23 -0
- package/dist/approval-prompt-Dg5LeAcT.js +62 -0
- package/dist/approval-prompt-DvSSPQJX.d.ts +57 -0
- package/dist/approvals/index.d.ts +5 -3
- package/dist/approvals/index.js +8 -5
- package/dist/approvals-p1PGoVjb.js +995 -0
- package/dist/arazzo-41WuzHou.js +36 -0
- package/dist/{arazzo-C4BcskbX.js → arazzo-CaUVBn7D.js} +20 -14
- 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-DabClFLQ.js +55 -0
- package/dist/auth-DRLEizbL.js +178 -0
- package/dist/authzen/index.d.ts +26 -6
- package/dist/authzen/index.js +94 -79
- package/dist/automation-BNM3TtDo.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 +9 -8
- package/dist/better-supabase/index.d.ts +357 -30
- package/dist/better-supabase/index.js +936 -194
- package/dist/{bind-kk-uyCwH.js → bind-CAvgUuKs.js} +14 -10
- package/dist/{bind-BzqG8SMb.d.ts → bind-DOyrv6zi.d.ts} +12 -10
- package/dist/body-CH5of8Ne.js +10 -0
- package/dist/body-text-QcXok_SI.js +52 -0
- package/dist/{build-instance-DIIV9DbC.js → build-instance-Bu_eDqYw.js} +4 -3
- package/dist/{canonical-json-CFKyFOke.js → canonical-json-BC8_nMTw.js} +5 -3
- package/dist/{capability-CksyCWDH.d.ts → capability-Drg-1YhL.d.ts} +44 -25
- package/dist/{capability-txATtKV4.js → capability-N1K9IpqS.js} +68 -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-BoWglDPI.js +1 -0
- package/dist/catalog-DZVbrF-z.js +52 -0
- package/dist/{catalog-tZUyOfOv.js → catalog-HD2gf5mY.js} +51 -6
- package/dist/{catalog-doc-DWtg0gGR.js → catalog-doc-Cdn7-0pQ.js} +45 -23
- 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 +24 -27
- package/dist/clerk/index.d.ts +9 -8
- package/dist/clerk/index.js +9 -14
- package/dist/cli/bin.js +36 -17
- package/dist/cli/index.d.ts +19 -5
- package/dist/cli/index.js +164 -4
- package/dist/cloud/index.d.ts +102 -63
- package/dist/cloud/index.js +239 -340
- package/dist/cloud-ytQ3uviA.js +87 -0
- package/dist/codemod-5mpSpnUY.js +37 -0
- package/dist/codemod-ua2hHy7w.js +2084 -0
- package/dist/collect-Ci6akVwH.js +55 -0
- package/dist/collect-D7eQDffE.js +1 -0
- package/dist/{collect-2SrB7lfk.js → collect-mLTY4nwb.js} +75 -11
- package/dist/command-L8EstFNm.js +6 -0
- package/dist/compile/index.d.ts +1 -1
- package/dist/compile/index.js +1 -2
- package/dist/{compile-CtTP7eur.d.ts → compile-1bsAezL0.d.ts} +5 -3
- package/dist/{compile-CcEu2ZQ1.js → compile-CMqMx_IN.js} +11 -8
- package/dist/completion-BTFrHZhX.js +143 -0
- package/dist/config-Bj2Ixq3d.js +26 -0
- package/dist/{config-BIjREpyE.js → config-bs_kZeYq.js} +12 -7
- package/dist/{config-report--Xb9APJS.js → config-report-DSpsLpCE.js} +15 -5
- package/dist/{connection-DUsczpB5.js → connection-DjhIJSs2.js} +6 -5
- package/dist/{context-DieZVJXu.js → context-B_u3_bDJ.js} +2 -2
- package/dist/convex/index.d.ts +11 -10
- package/dist/convex/index.js +6 -4
- package/dist/create-B30OMUOJ.d.ts +107 -0
- package/dist/create-CBMmFie-.d.ts +138 -0
- package/dist/create-CGm28gyI.js +130 -0
- package/dist/create-CQWIpUG-.js +403 -0
- package/dist/{create-BBO24vj6.js → create-DCF2SvoT.js} +31 -32
- package/dist/create-D_NmPOdH.d.ts +110 -0
- package/dist/{credential-kue0qpbm.js → credential-BcoiejpY.js} +152 -31
- package/dist/credentials-DPyHmYz5.js +74 -0
- package/dist/delegation-j6-rc37o.js +286 -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-DfRk15uw.d.ts → denied-text-CiFQNuMV.d.ts} +5 -5
- package/dist/{describe-C3ldA9os.d.ts → describe-B5qgDvEW.d.ts} +2 -2
- package/dist/{describe-Cgkp7eP0.js → describe-BybMRY7A.js} +6 -2
- package/dist/device-BARQ8eYG.js +193 -0
- package/dist/{diff-rpqoe7Ag.js → diff-3jbx6Rm4.js} +60 -54
- package/dist/diff-CmuSD3vc.js +37 -0
- package/dist/doctor-3ZqNHX_G.js +44 -0
- package/dist/{doctor-owlv6ddh.js → doctor-BdZw53-k.js} +245 -50
- package/dist/drizzle/index.d.ts +5 -3
- package/dist/drizzle/index.js +2 -2
- package/dist/elysia/index.d.ts +16 -13
- package/dist/elysia/index.js +13 -12
- package/dist/env-DJZrPjRi.js +8 -0
- package/dist/errors-BDUwg2qC.js +27 -0
- package/dist/{errors-drnfxYtm.js → errors-BKy0EfhN.js} +5 -9
- package/dist/errors-BWXBMaKK.d.ts +11 -0
- package/dist/errors-CWTY6uih.js +143 -0
- package/dist/{errors-OD_4c__H.d.ts → errors-DH5QEGXh.d.ts} +2 -2
- package/dist/evaluate-CNClBvcj.js +1785 -0
- package/dist/evaluations-C_1vdSZc.d.ts +32 -0
- package/dist/{evaluations-C9YJsv3H.js → evaluations-beAooV0n.js} +145 -34
- package/dist/eve/index.d.ts +12 -16
- package/dist/eve/index.js +22 -28
- 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 +12 -11
- package/dist/fastify/index.d.ts +25 -22
- package/dist/fastify/index.js +13 -12
- package/dist/fetch-adapter-DD_gfmrC.js +120 -0
- package/dist/fetch-adapter-Dw0MTS3D.d.ts +31 -0
- package/dist/fields-OYG_JR78.js +203 -0
- package/dist/files-C5ZI27eV.js +124 -0
- package/dist/{fixtures-h2eG2OZV.js → fixtures-B7XrLeY7.js} +8 -7
- package/dist/flags-C3DktBDY.js +86 -0
- package/dist/{from-snapshot-7REQZe0H.js → from-snapshot-CTCMsFZk.js} +55 -52
- package/dist/{grantee-conditions-MQs5NIuX.js → grantee-conditions-CcXf8hMM.js} +4 -3
- package/dist/{grantee-CXY-0C87.js → grantee-hxrUsbpM.js} +16 -6
- package/dist/{grantee-match-fxYp9Nmt.js → grantee-match-DbENBHLB.js} +5 -4
- 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-C9YmyBIa.js → helpers-CBYVMjwh.js} +45 -38
- package/dist/hono/index.d.ts +12 -9
- package/dist/hono/index.js +13 -12
- package/dist/hosted-B46-5LYE.js +315 -0
- package/dist/hosted-BPk51-kX.d.ts +78 -0
- package/dist/{http-DPuDaChb.d.ts → http-B_LphE5Y.d.ts} +1 -2
- package/dist/http-DXJ37RDA.js +46 -0
- package/dist/{http-BEbdMZ05.js → http-ujKm0JXE.js} +1 -2
- package/dist/{import-UHk1N7vH.js → import-CNV7I2Dw.js} +25 -20
- package/dist/{import-BFIlhetD.js → import-wyqXUyjm.js} +190 -53
- package/dist/index-B8YjkEZ4.d.ts +210 -0
- package/dist/index-C-6Letxg.d.ts +431 -0
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/{index-BwMe94Xq.d.ts → index-Ch8LpNDp.d.ts} +34 -16
- package/dist/index-Cp_ilKi1.d.ts +91 -0
- package/dist/index-CueFnxQc.d.ts +110 -0
- package/dist/index-DuWxc5dt.d.ts +909 -0
- package/dist/index.d.ts +19 -15
- package/dist/index.js +31 -21
- package/dist/init-DeMYsnYJ.js +96 -0
- package/dist/init-GG6Jh8HD.js +95 -0
- package/dist/{instance-options-plkrsAog.d.ts → instance-options-BsVpyGIk.d.ts} +2 -2
- package/dist/instance-snapshot-BOEhcqIF.js +601 -0
- package/dist/instant-BluqDvyS.js +19 -0
- package/dist/internals-Dk8A8fX3.js +17 -0
- package/dist/{json-schema-DBkdUuCO.js → json-schema-B-vAwlde.js} +45 -6
- package/dist/json-schema-CN_iLFH2.d.ts +40 -0
- package/dist/jwt/index.d.ts +18 -11
- package/dist/jwt/index.js +156 -135
- package/dist/{kernel-CB3LrIJM.js → kernel-D0NVb1cK.js} +52 -24
- package/dist/kysely/index.d.ts +5 -3
- package/dist/kysely/index.js +2 -2
- package/dist/load-BxEtwlBS.js +1 -0
- package/dist/{load-C3_oTHyO.js → load-DFS_ry0W.js} +22 -6
- 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-dvL2XEe1.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-AVlBaJoa.js → map-claims-D3oRmTk0.js} +13 -10
- package/dist/{map-error-BE27PYkE.js → map-error-Dr70oA_3.js} +3 -3
- package/dist/{markers-CiwAOZtO.js → markers-C6joDI3o.js} +2 -1
- package/dist/mcp/index.d.ts +22 -12
- package/dist/mcp/index.js +57 -39
- package/dist/{migrate-BwlB5-Wk.js → migrate-CIq4-E9F.js} +53 -14
- package/dist/nest/index.d.ts +12 -9
- package/dist/nest/index.js +15 -14
- package/dist/next/index.d.ts +18 -21
- package/dist/next/index.js +13 -11
- 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-uYFXGVw2.js → ocsf-BFp-PZZA.js} +22 -11
- package/dist/openai/index.d.ts +9 -16
- package/dist/openai/index.js +17 -24
- package/dist/openapi/index.d.ts +3 -3
- package/dist/openapi/index.js +1 -1
- package/dist/{openapi-DBzHQbov.js → openapi-B7HZ0f-r.js} +8 -8
- package/dist/openapi-C4dDTVEd.js +138 -0
- package/dist/{openapi-BJdBmYDG.js → openapi-DD1SV-5-.js} +10 -9
- package/dist/operation-findings-DgATDpvh.js +36 -0
- package/dist/operations-X0VM7F3m.d.ts +59 -0
- package/dist/orpc/index.d.ts +13 -10
- package/dist/orpc/index.js +20 -15
- package/dist/otel/index.d.ts +3 -2
- package/dist/otel/index.js +30 -7
- package/dist/output-1im__-08.js +88 -0
- package/dist/output-files-B3IZJksC.js +1 -0
- package/dist/{output-files-CgIsvdSa.js → output-files-DhRBBE4n.js} +24 -26
- package/dist/{permission-keys-B26jeyUv.js → ownership-DqaJNJPn.js} +1045 -153
- package/dist/{package-root-DtNnpmUd.js → package-root-Dk_ETdkp.js} +1 -1
- package/dist/{parse-CVFQHk6c.js → parse-Cxq0WxrA.js} +2 -2
- package/dist/{parse-local-manifest-DvYUR0QL.d.ts → parse-local-manifest-5ODwqu8b.d.ts} +1 -1
- package/dist/{parse-local-manifest-C-q02Pal.js → parse-local-manifest-CVSs6J9I.js} +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 +45 -26
- package/dist/{peer-BOr_kJE1.js → peer-C8swJ2GH.js} +23 -4
- package/dist/peer-CRvC7Hg1.js +1 -0
- package/dist/permdock-BrAscV28.js +868 -0
- package/dist/permdock-SV8ZINYT.d.ts +502 -0
- package/dist/{permission-registry-BsblpB-z.js → permission-registry-Br4jSNVi.js} +3 -3
- package/dist/permissions-B-wCP5ZC.js +30 -0
- package/dist/{permissions-CCJ6lmxB.js → permissions-BPxlwVhN.js} +4 -3
- package/dist/{permissions-COH-KRgT.d.ts → permissions-u_KHg-sN.d.ts} +1 -2
- package/dist/policies-DP2nqRoF.js +295 -0
- package/dist/{policy-ur0BBK_e.d.ts → policy-77FSAq_V.d.ts} +2 -2
- package/dist/{hosted-CBHgkzDl.js → policy-DbM5YYtV.js} +17 -273
- package/dist/policy-from-catalog-C2gMa2Dj.js +450 -0
- package/dist/policy-module-CTlwMvLI.js +89 -0
- package/dist/{policy-types-sp9P1iIV.d.ts → policy-types-n0uRTsW8.d.ts} +460 -632
- package/dist/postgrest-CEgRbefE.d.ts +100 -0
- package/dist/postgrest-DAjUkF9w.js +575 -0
- package/dist/{powersync-cZe4kzhL.js → powersync-BkWWCS1K.js} +23 -24
- package/dist/powersync-DISt6SUe.js +62 -0
- package/dist/powersync-MMJ2mI2q.js +1 -0
- 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 +2 -2
- package/dist/{problem-CnWraVhC.js → problem-CTviyH5L.js} +13 -23
- package/dist/{problem-details-rIIo8B2C.d.ts → problem-details-B45V5d2b.d.ts} +1 -1
- package/dist/{problem-details-DECUnXAn.js → problem-details-cn5X30gZ.js} +43 -40
- package/dist/problem-types-CJ2325SZ.js +5 -0
- package/dist/{prompt-CXYhLfsS.js → prompt-DfZLJLIn.js} +2 -2
- package/dist/{protected-BN7BUdY1.js → protected-BlF0F6wL.js} +21 -4
- package/dist/{protected-B3_P7xuw.d.ts → protected-RFGpakN9.d.ts} +16 -8
- package/dist/{provider-Bi-0HNL3.js → provider-B1al-AZz.js} +2 -2
- package/dist/{provider-kwHC9CZD.d.ts → provider-DILL9oPK.d.ts} +1 -1
- package/dist/{provider-store-Ctt-81Ni.js → provider-store-DM6DNcta.js} +2 -2
- package/dist/pull-CvpINcMK.js +1 -0
- package/dist/pull-jEwbf80J.js +256 -0
- package/dist/push-BD4f15co.js +116 -0
- package/dist/pushed-policy-CqtxkV4G.js +238 -0
- package/dist/pushed-policy-DCW91KQU.d.ts +57 -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 -72
- package/dist/react-native/index.js +29 -25
- package/dist/{refs-f3imMjNW.js → refs-K6eWUJ0H.js} +1 -1
- package/dist/{relation-walk-BXnlLtg2.js → relation-walk-3OyDBF0S.js} +2 -2
- package/dist/{relations-CvmSpG67.js → relations-BnCWnJGI.js} +3 -3
- package/dist/renames-CGj7YwcQ.js +175 -0
- package/dist/{replay-COpmZUfx.d.ts → replay-Bkm-Ne4l.d.ts} +1 -1
- package/dist/{replay-BsOyTrdV.js → replay-Du1tJjG7.js} +2 -1
- package/dist/{request-context-BVM7aWNs.js → request-context-C81Pip9n.js} +3 -3
- 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-D1Un3pcz.js → resource-relations-D_jw0BFx.js} +1 -1
- package/dist/{retire-BFcxL6un.js → retire-CALjIQ7e.js} +2 -2
- package/dist/{revocations-Cy06JNx2.d.ts → revocations-R07lFBnX.d.ts} +2 -0
- package/dist/rls-BAqP4q66.js +336 -0
- package/dist/{rls-BEktUaqg.js → rls-DTvYd-lI.js} +288 -690
- package/dist/{role-builder-B4GbKM-i.js → role-builder-uWQZ4v84.js} +14 -207
- package/dist/{rpc-nYC3cR_u.js → rpc-VSl5ylaQ.js} +7 -7
- package/dist/run-CUKuz0A8.js +723 -0
- package/dist/run-DDwUaJDU.js +1 -0
- package/dist/run-ticket-DocwaTKn.d.ts +124 -0
- package/dist/run-ticket-sxFI6LAk.js +337 -0
- package/dist/{runtime-D_tMXnsq.js → runtime-D3VTAiCA.js} +1 -1
- package/dist/{saas-DtaA4JuW.js → saas-BCXRuXca.js} +16 -14
- package/dist/scan-qvOe0hS3.js +29 -0
- package/dist/{schema-DjQBcAP9.js → schema-B4v0Qrac.js} +102 -8
- 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-vFR1O5oG.js → scim-ClHtpyV3.js} +208 -76
- package/dist/{scopes-tvpa34ep.js → scopes-CUPSjo9q.js} +12 -7
- package/dist/server/index.d.ts +12 -143
- package/dist/server/index.js +12 -9
- package/dist/server-C3WXAHZj.js +453 -0
- package/dist/{server-types-DdqBwZN_.d.ts → server-types-CKQiCnON.d.ts} +51 -68
- package/dist/{sha256-BO0swRXL.js → sha256-D9ihqmvd.js} +8 -1
- package/dist/{shared-1uhI-e-b.js → shared-BAK8t4Uo.js} +20 -9
- package/dist/{shared-JhMeOsDF.js → shared-DvvFzYXe.js} +8 -9
- package/dist/signals-D3NcTKUS.js +32 -0
- package/dist/sink-4-eQIRWf.d.ts +225 -0
- package/dist/sink-BEZSlMS_.js +957 -0
- package/dist/{skills-BZdRQkxs.js → skills-B6lVdD_W.js} +13 -6
- package/dist/skills-CTYwkl44.js +51 -0
- package/dist/snapshot-B7DkYg6g.js +269 -0
- package/dist/{snapshot-cache-Cod40D-X.js → snapshot-cache-DZHQ0KF6.js} +11 -5
- package/dist/{snapshot-cache-J5T7t_vD.d.ts → snapshot-cache-PXI-vGpY.d.ts} +7 -5
- package/dist/solid/index.d.ts +11 -12
- package/dist/solid/index.js +7 -7
- package/dist/solid-start/index.d.ts +52 -0
- package/dist/solid-start/index.js +49 -0
- package/dist/{sources-Dljy06zL.d.ts → sources-Xc4zkszI.d.ts} +7 -13
- package/dist/{sources-B1-b-R0t.js → sources-vs5dGOsS.js} +125 -119
- package/dist/{sql-t8teWOfo.js → sql-B5T1IL83.js} +13 -1
- package/dist/src-Cu2m75uo.js +1860 -0
- package/dist/ssf/index.d.ts +4 -4
- package/dist/ssf/index.js +384 -47
- package/dist/standard-webhooks-DgFFD-Ga.js +228 -0
- package/dist/standard-webhooks-rbD7LS6h.d.ts +88 -0
- package/dist/storage-C2bWdvJH.js +132 -0
- package/dist/{store-ILkLUj_o.js → store-BDutJkDL.js} +40 -53
- package/dist/{store-options-CbUHDoSe.js → store-options-u0ycEe8s.js} +26 -21
- package/dist/{stores-Cxz_80g-.d.ts → stores-BUGNbJTt.d.ts} +7 -8
- package/dist/{stores-BHXdSbw9.js → stores-CGhM8BN_.js} +2 -2
- package/dist/{stream-Dwsg6WwE.d.ts → stream-CeCMJmBB.d.ts} +2 -2
- package/dist/{stream-BMui98KK.js → stream-CvdUS9V1.js} +9 -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/supabase/index.d.ts +23 -106
- package/dist/supabase/index.js +5 -4
- package/dist/supabase/middleware.d.ts +7 -6
- package/dist/supabase/middleware.js +13 -11
- package/dist/supabase-By_frk3U.js +92 -0
- package/dist/{supabase-hook-Cva3ikXz.js → supabase-hook-BMoEhZir.js} +960 -64
- package/dist/supabase-hook-CCw5m35C.js +1 -0
- package/dist/{supabase-C1TWlnYt.js → supabase-x5JtR2tc.js} +99 -206
- package/dist/support-session-C6xJQYut.js +158 -0
- package/dist/svelte/Protected.svelte +4 -4
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +10 -10
- package/dist/svelte/runtime.d.ts +3 -3
- package/dist/svelte/runtime.js +3 -3
- package/dist/svelte/source.d.ts +7 -7
- package/dist/svelte/source.js +4 -4
- 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/{tenancy-DshjqY0n.js → tenancy-DN2QAx9z.js} +5 -5
- package/dist/terminal/index.d.ts +11 -9
- package/dist/terminal/index.js +23 -287
- package/dist/testing/index.d.ts +311 -38
- package/dist/testing/index.js +3475 -201
- 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-Bx9qy30p.js → token-BLZcjQgt.js} +15 -6
- package/dist/{tool-refusal-CQ7OEia9.js → tool-refusal-CMLN5xhn.js} +2 -2
- package/dist/trpc/index.d.ts +12 -9
- package/dist/trpc/index.js +16 -14
- package/dist/types-8RnwUAvE.d.ts +107 -0
- package/dist/{store-9KO4BlkB.d.ts → types-B3_ooZgZ.d.ts} +100 -75
- package/dist/{types-Br9IXUBG.d.ts → types-BdtSDbBO.d.ts} +77 -17
- package/dist/types-BtHtcKMr.d.ts +157 -0
- package/dist/{types-CqrjB9o6.d.ts → types-BzzaHxt3.d.ts} +23 -11
- package/dist/types-C791HFu9.d.ts +332 -0
- package/dist/types-C863OQiR.d.ts +57 -0
- package/dist/{types-ByUo56un.d.ts → types-CVZSNocA.d.ts} +23 -22
- package/dist/{types-DHrmBJLH.d.ts → types-CX7AvRqP.d.ts} +7 -7
- package/dist/types-C_IiEs64.d.ts +65 -0
- package/dist/{types-7rJVLWe5.d.ts → types-Dfv0aTER.d.ts} +63 -11
- package/dist/types-DqzsnlSA.js +67 -0
- package/dist/{types-DpWfQdSh.d.ts → types-Druu9wLM.d.ts} +46 -11
- package/dist/{types-CIlTojhq.d.ts → types-_WhUP7ud.d.ts} +9 -6
- package/dist/{types-CUcFZfpU.d.ts → types-lUlG3TVd.d.ts} +2 -1
- package/dist/unplugin/index.d.ts +1 -1
- package/dist/unplugin/index.js +2 -2
- package/dist/usage-CRVl9V3t.js +32 -0
- package/dist/usage-CZpSQP6L.js +1 -0
- package/dist/{usage-CG9nOYZw.js → usage-SveTRTyr.js} +54 -11
- package/dist/{validation-error-BSSw0l_8.d.ts → validation-error-DHUrAkku.d.ts} +1 -1
- package/dist/{validity-dVrUEPJt.js → validity-CZ7-y0Cj.js} +32 -15
- package/dist/{verifier-DMr_Zmb_.js → verifier-DHuh-okk.js} +18 -7
- package/dist/{verify-BztUB3GX.js → verify-BaAKx7t6.js} +645 -50
- package/dist/{version-BEogC-rB.js → version-CEbQ5UeM.js} +4 -3
- package/dist/version-DXkYUISx.js +1 -0
- package/dist/{views-CJsrBS1f.js → views-DTIIO-oQ.js} +22 -5
- package/dist/{permission-types-Dg39z9Kv.d.ts → vocabulary-CN8H_9UF.d.ts} +67 -2
- package/dist/vue/index.d.ts +9 -10
- package/dist/vue/index.js +8 -8
- package/dist/waiter-B986w1oK.d.ts +36 -0
- package/dist/waiter-BGUtGYoU.js +67 -0
- package/dist/watch--ovlPOc0.js +1 -0
- package/dist/{watch-zeucB7eF.js → watch-vea54PRw.js} +44 -5
- package/dist/webmcp/index.d.ts +2 -2
- package/dist/webmcp/index.js +3 -3
- package/dist/where-scope-C9vfEphl.js +306 -0
- package/dist/who-can-DWBAcaCQ.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-Cr93qqdP.d.ts → wrap-C5jC6sKI.d.ts} +2 -1
- package/dist/{wrap-DWsU_5Bd.js → wrap-gX61EtpB.js} +7 -6
- package/package.json +136 -37
- 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 +123 -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 +14 -10
- package/skills/permdock-data/SKILL.md +6 -6
- package/skills/permdock-data/references/queries-and-rls.md +10 -9
- 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 +17 -11
- package/skills/permdock-wire/references/adapters.md +139 -51
- package/skills/permdock-wire/references/policy-options.md +5 -5
- package/skills/permdock-wire/references/presets-and-recipes.md +58 -0
- package/dist/approvals-DZL76lKW.js +0 -240
- package/dist/arazzo-CD8d0WLb.js +0 -54
- package/dist/catalog-6yWAX6Ps.js +0 -2
- package/dist/catalog-WHG4kBq7.js +0 -48
- package/dist/cloud-C7bSDgX4.js +0 -50
- package/dist/cloud-PeBN3IEn.js +0 -118
- package/dist/collect-Bw2Jdq1q.js +0 -2
- package/dist/collect-CQx4hX4N.js +0 -83
- package/dist/commands-Cpip4ULx.js +0 -97
- package/dist/config-DLt6BvV7.js +0 -36
- package/dist/diff-Cnghh_Ip.js +0 -48
- package/dist/doctor-CuVJvhV_.js +0 -53
- package/dist/duration-xK2jGFVc.js +0 -25
- package/dist/errors-CWfoNg9N.js +0 -47
- package/dist/errors-DRnGZHzF.js +0 -30
- package/dist/expiry-BoBJ8Tvc.js +0 -7
- package/dist/fields-fwfXN01n.js +0 -1016
- 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-DgM7w96K.d.ts +0 -6
- package/dist/index-Dz7didpC.d.ts +0 -201
- package/dist/index-UdVQgq48.d.ts +0 -550
- package/dist/load-B_shHrmd.js +0 -2
- package/dist/manifest-BngWKryL.js +0 -770
- package/dist/may-use-BOn_dR_w.js +0 -78
- package/dist/openapi-DcQ1Kg40.js +0 -164
- package/dist/ownership-BgnbOJFT.js +0 -851
- package/dist/permdock-L26udHSk.js +0 -3646
- package/dist/powersync-BFSbSElQ.js +0 -62
- package/dist/powersync-DCDgZgfZ.js +0 -2
- package/dist/rls-55DQTuf5.js +0 -250
- package/dist/run-DMcNW_8T.js +0 -174
- package/dist/server-ZYEHtNHS.js +0 -268
- package/dist/sink-BTtmfPnE.js +0 -141
- package/dist/sink-CPN4zLfs.d.ts +0 -104
- package/dist/skills-Dle4ZoLF.js +0 -56
- package/dist/snapshot-Dc9CHPME.js +0 -1078
- package/dist/src-Bb7no-hS.js +0 -639
- package/dist/subject-C6dLxqHU.js +0 -24
- package/dist/supabase-Dbqr141s.js +0 -83
- package/dist/supabase-hook-BULg7Ut_.js +0 -2
- package/dist/thenable-QSmvt-vZ.js +0 -65
- package/dist/types-C0dee0Qf.d.ts +0 -197
- package/dist/types-DvupZE0w.d.ts +0 -9
- package/dist/usage-4G6t643F.js +0 -42
- package/dist/usage-iFLJ0-rr.js +0 -2
- package/dist/vocabulary-hhEFLFoL.d.ts +0 -65
- package/dist/watch-C8TpsAl4.js +0 -2
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import { t as compact } from "./compact-CAf557ZB.js";
|
|
2
|
-
import { t as describe } from "./describe-
|
|
3
|
-
import { a as deniedMessage } from "./errors-
|
|
2
|
+
import { t as describe } from "./describe-BybMRY7A.js";
|
|
3
|
+
import { a as deniedMessage } from "./errors-BKy0EfhN.js";
|
|
4
|
+
import { t as actorMayCallTool } from "./delegation-j6-rc37o.js";
|
|
4
5
|
import { n as resourceRef } from "./resource-ref-CaS9yVPi.js";
|
|
5
|
-
import {
|
|
6
|
-
import { l as storedApprovalToken, s as resumeDecision } from "./helpers-
|
|
7
|
-
import { n as resolveOrNull } from "./build-instance-
|
|
8
|
-
import { n as tenantScope, t as actorFrom } from "./adapter-context-
|
|
9
|
-
import { n as requestContext, t as buildReportingInstance } from "./request-context-
|
|
6
|
+
import { c as withApp } from "./permdock-BrAscV28.js";
|
|
7
|
+
import { l as storedApprovalToken, s as resumeDecision } from "./helpers-CBYVMjwh.js";
|
|
8
|
+
import { n as resolveOrNull } from "./build-instance-Bu_eDqYw.js";
|
|
9
|
+
import { n as tenantScope, t as actorFrom } from "./adapter-context-CRhqyzCk.js";
|
|
10
|
+
import { n as requestContext, t as buildReportingInstance } from "./request-context-C81Pip9n.js";
|
|
10
11
|
//#region src/agent/denied-text.ts
|
|
11
12
|
/** The hook's text, or `event.text` when there is no hook or it throws or returns no string. */
|
|
12
|
-
function
|
|
13
|
+
function refusalText(hook, event, report) {
|
|
13
14
|
if (hook === void 0) return event.text;
|
|
14
15
|
try {
|
|
15
16
|
const text = hook(event);
|
|
16
17
|
if (text === void 0) return event.text;
|
|
17
|
-
if (typeof text !== "string" || text === "") throw new TypeError("PermDock:
|
|
18
|
+
if (typeof text !== "string" || text === "") throw new TypeError("PermDock: deniedText must return a non-empty string or undefined");
|
|
18
19
|
return text;
|
|
19
20
|
} catch (error) {
|
|
20
21
|
report(error);
|
|
@@ -44,7 +45,8 @@ function approvalTokenOf(context) {
|
|
|
44
45
|
function runDecide(permdock, permission, data, how) {
|
|
45
46
|
return permdock.decide(permission, data, how);
|
|
46
47
|
}
|
|
47
|
-
function createAgentKernel(policy,
|
|
48
|
+
function createAgentKernel(policy, given) {
|
|
49
|
+
const options = withApp(policy, given);
|
|
48
50
|
const cache = /* @__PURE__ */ new WeakMap();
|
|
49
51
|
const reporters = /* @__PURE__ */ new WeakMap();
|
|
50
52
|
const report = (permdock, error) => {
|
|
@@ -96,6 +98,23 @@ function createAgentKernel(policy, options) {
|
|
|
96
98
|
let permdock;
|
|
97
99
|
try {
|
|
98
100
|
permdock = await instance(context);
|
|
101
|
+
if (how.tool !== void 0 && !actorMayCallTool(permdock.subject.actor, how.tool)) {
|
|
102
|
+
const refused = {
|
|
103
|
+
outcome: "denied",
|
|
104
|
+
denials: [{
|
|
105
|
+
role: null,
|
|
106
|
+
reason: "agent-tool-not-delegated"
|
|
107
|
+
}],
|
|
108
|
+
alternatives: []
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
ok: true,
|
|
112
|
+
permdock,
|
|
113
|
+
data: void 0,
|
|
114
|
+
raw: refused,
|
|
115
|
+
decision: refused
|
|
116
|
+
};
|
|
117
|
+
}
|
|
99
118
|
let data;
|
|
100
119
|
if (binding.data !== void 0) {
|
|
101
120
|
try {
|
|
@@ -113,11 +132,16 @@ function createAgentKernel(policy, options) {
|
|
|
113
132
|
permdock
|
|
114
133
|
};
|
|
115
134
|
}
|
|
116
|
-
const raw = runDecide(permdock, binding.permission, data, {
|
|
135
|
+
const raw = runDecide(permdock, binding.permission, data, compact({
|
|
117
136
|
adapter: options.adapter,
|
|
118
137
|
boundary,
|
|
119
|
-
|
|
120
|
-
|
|
138
|
+
call: how.call,
|
|
139
|
+
args,
|
|
140
|
+
operation: binding.meta === void 0 ? void 0 : {
|
|
141
|
+
name: binding.name ?? "",
|
|
142
|
+
meta: binding.meta
|
|
143
|
+
}
|
|
144
|
+
}));
|
|
121
145
|
const decision = how.resume ? await resumeDecision({
|
|
122
146
|
decision: raw,
|
|
123
147
|
permission: binding.permission,
|
|
@@ -142,11 +166,12 @@ function createAgentKernel(policy, options) {
|
|
|
142
166
|
});
|
|
143
167
|
}
|
|
144
168
|
};
|
|
145
|
-
const check = (binding, args, context, checkOptions = {}) => run(binding, args, context, {
|
|
169
|
+
const check = (binding, args, context, checkOptions = {}) => run(binding, args, context, compact({
|
|
146
170
|
resume: checkOptions.simulate !== true,
|
|
147
|
-
|
|
148
|
-
decideOptions: checkOptions
|
|
149
|
-
|
|
171
|
+
call: checkOptions.simulate === true ? "simulate" : "adapter",
|
|
172
|
+
decideOptions: checkOptions,
|
|
173
|
+
tool: checkOptions.tool
|
|
174
|
+
}));
|
|
150
175
|
const verdictOf = (checked, binding, toolName) => {
|
|
151
176
|
if (!checked.ok) {
|
|
152
177
|
if (checked.failure !== "no-data" || checked.permdock === void 0) return {
|
|
@@ -193,18 +218,21 @@ function createAgentKernel(policy, options) {
|
|
|
193
218
|
};
|
|
194
219
|
};
|
|
195
220
|
const evaluate = async (binding, toolName, args, context, decideOptions = {}) => {
|
|
196
|
-
const checked = await check(binding, args, context,
|
|
221
|
+
const checked = await check(binding, args, context, {
|
|
222
|
+
...decideOptions,
|
|
223
|
+
tool: toolName
|
|
224
|
+
});
|
|
197
225
|
return relabel(verdictOf(checked, binding, toolName), checked.permdock);
|
|
198
226
|
};
|
|
199
227
|
const relabel = (verdict, permdock) => {
|
|
200
|
-
const hook = options.
|
|
228
|
+
const hook = options.deniedText;
|
|
201
229
|
if (hook === void 0 || verdict.outcome === "granted") return verdict;
|
|
202
230
|
const onError = (error) => {
|
|
203
231
|
report(permdock, error);
|
|
204
232
|
};
|
|
205
233
|
if (verdict.outcome === "denied") return {
|
|
206
234
|
...verdict,
|
|
207
|
-
reason:
|
|
235
|
+
reason: refusalText(hook, {
|
|
208
236
|
decision: verdict.decision,
|
|
209
237
|
permission: verdict.permission,
|
|
210
238
|
text: verdict.reason
|
|
@@ -212,7 +240,7 @@ function createAgentKernel(policy, options) {
|
|
|
212
240
|
};
|
|
213
241
|
return {
|
|
214
242
|
...verdict,
|
|
215
|
-
summary:
|
|
243
|
+
summary: refusalText(hook, {
|
|
216
244
|
decision: verdict.decision,
|
|
217
245
|
permission: verdict.permission,
|
|
218
246
|
text: verdict.summary
|
|
@@ -222,7 +250,7 @@ function createAgentKernel(policy, options) {
|
|
|
222
250
|
const tokenFor = async (binding, args, context) => {
|
|
223
251
|
const checked = await run(binding, args, context, {
|
|
224
252
|
resume: false,
|
|
225
|
-
|
|
253
|
+
call: "adapter",
|
|
226
254
|
decideOptions: {}
|
|
227
255
|
});
|
|
228
256
|
return checked.ok && checked.raw.outcome === "approval-required" ? checked.raw.token : void 0;
|
|
@@ -240,7 +268,7 @@ function createAgentKernel(policy, options) {
|
|
|
240
268
|
const allowedToolNames = async (context) => {
|
|
241
269
|
const permdock = await instance(context);
|
|
242
270
|
const allowed = /* @__PURE__ */ new Set();
|
|
243
|
-
for (const [name, binding] of Object.entries(tools)) if (
|
|
271
|
+
for (const [name, binding] of Object.entries(tools)) if (actorMayCallTool(permdock.subject.actor, name) && permdock.mayUse(binding.permission)) allowed.add(name);
|
|
244
272
|
return allowed;
|
|
245
273
|
};
|
|
246
274
|
return {
|
|
@@ -254,4 +282,4 @@ function createAgentKernel(policy, options) {
|
|
|
254
282
|
};
|
|
255
283
|
}
|
|
256
284
|
//#endregion
|
|
257
|
-
export { createAgentKernel as n,
|
|
285
|
+
export { createAgentKernel as n, refusalText as r, approvalTokenOf as t };
|
package/dist/kysely/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Rt as Instant, ar as Subject, ur as Condition } from "../policy-types-n0uRTsW8.js";
|
|
2
|
+
import { c as WhereResult } from "../permdock-SV8ZINYT.js";
|
|
2
3
|
import { r as RelationsMapping } from "../graph-sql-B-dsAT6j.js";
|
|
3
|
-
import { s as MembershipsMapping } from "../compile-
|
|
4
|
+
import { s as MembershipsMapping } from "../compile-1bsAezL0.js";
|
|
4
5
|
import { n as WithSubjectOptions, t as RowCheck } from "../row-check-Dt35czLy.js";
|
|
5
6
|
//#region src/kysely/types.d.ts
|
|
6
7
|
type KyselySelectQuery = {
|
|
@@ -33,7 +34,8 @@ type KyselyWhereOptions = {
|
|
|
33
34
|
readonly memberships?: MembershipsMapping;
|
|
34
35
|
/** Where the relation graph lives; graph grants compile to Postgres subqueries with it and are refused without. */
|
|
35
36
|
readonly relations?: RelationsMapping;
|
|
36
|
-
|
|
37
|
+
/** The clock membership expiry is read at; a `Temporal.Instant` fits. Defaults to the current time. */
|
|
38
|
+
readonly now?: Instant;
|
|
37
39
|
/** Kysely's `sql` tag, for graph subqueries on runtimes without `require`; loaded from the `kysely` peer by default. */
|
|
38
40
|
readonly sql?: KyselySql;
|
|
39
41
|
};
|
package/dist/kysely/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
-
import {
|
|
3
|
-
import { n as escapeLike, t as compileWhere } from "../compile-
|
|
2
|
+
import { t as assertSafeKey } from "../paths-DXSHAMIa.js";
|
|
3
|
+
import { n as escapeLike, t as compileWhere } from "../compile-CMqMx_IN.js";
|
|
4
4
|
import { a as rowCheckFrom, i as templateOf, r as subjectStatements, s as loadPeer, t as statementTemplate } from "../subject-settings-CkEwrw3W.js";
|
|
5
5
|
//#region src/kysely/to-where.ts
|
|
6
6
|
function ident(name) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { a as loadModule, s as pickNamed } from "./load-DFS_ry0W.js";
|
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import { c as listPermissions } from "./permission-registry-
|
|
1
|
+
import { c as listPermissions } from "./permission-registry-Br4jSNVi.js";
|
|
2
|
+
import { a as describeError, n as CliError } from "./errors-CWTY6uih.js";
|
|
2
3
|
import { dirname, resolve } from "node:path";
|
|
3
4
|
import { pathToFileURL } from "node:url";
|
|
4
5
|
import { createJiti } from "jiti";
|
|
5
|
-
//#region src/cli/load.ts
|
|
6
|
+
//#region src/cli/project/load.ts
|
|
7
|
+
/** A project module the CLI cannot use: the project's to fix, so a usage error. */
|
|
8
|
+
function invalidModule(message, cause) {
|
|
9
|
+
return new CliError("usage", message, {
|
|
10
|
+
code: "config_invalid",
|
|
11
|
+
...cause === void 0 ? {} : { cause }
|
|
12
|
+
});
|
|
13
|
+
}
|
|
6
14
|
/**
|
|
7
15
|
* Errors Node raises while resolving or parsing a module graph, before any of
|
|
8
16
|
* its code runs, so loading it again through jiti cannot repeat a side effect.
|
|
@@ -36,6 +44,14 @@ function importWithJiti(abs, fresh) {
|
|
|
36
44
|
* returned as written; `default` is not merged into the namespace.
|
|
37
45
|
*/
|
|
38
46
|
async function loadModule(abs, options) {
|
|
47
|
+
try {
|
|
48
|
+
return await importModule(abs, options);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
if (error instanceof CliError) throw error;
|
|
51
|
+
throw invalidModule(describeError(error), error);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async function importModule(abs, options) {
|
|
39
55
|
let loaded;
|
|
40
56
|
if (options?.fresh === true) loaded = await importWithJiti(abs, true);
|
|
41
57
|
else try {
|
|
@@ -44,7 +60,7 @@ async function loadModule(abs, options) {
|
|
|
44
60
|
if (!loadsWithJiti(error)) throw error;
|
|
45
61
|
loaded = await importWithJiti(abs, false);
|
|
46
62
|
}
|
|
47
|
-
if (loaded === null || typeof loaded !== "object") throw
|
|
63
|
+
if (loaded === null || typeof loaded !== "object") throw invalidModule(`PermDock CLI: module '${abs}' did not export an object`);
|
|
48
64
|
return loaded;
|
|
49
65
|
}
|
|
50
66
|
function pickNamed(mod, names) {
|
|
@@ -52,11 +68,11 @@ function pickNamed(mod, names) {
|
|
|
52
68
|
return mod["default"];
|
|
53
69
|
}
|
|
54
70
|
function asPermissionTree(value) {
|
|
55
|
-
if (value === null || typeof value !== "object") throw
|
|
71
|
+
if (value === null || typeof value !== "object") throw invalidModule("PermDock CLI: permissions export is not a permission tree");
|
|
56
72
|
return value;
|
|
57
73
|
}
|
|
58
74
|
function asPolicy(value) {
|
|
59
|
-
if (value === null || typeof value !== "object" || !("roles" in value) || !("permissions" in value)) throw
|
|
75
|
+
if (value === null || typeof value !== "object" || !("roles" in value) || !("permissions" in value)) throw invalidModule("PermDock CLI: policy export is not a Policy");
|
|
60
76
|
return value;
|
|
61
77
|
}
|
|
62
78
|
function leavesOf(tree) {
|
|
@@ -68,7 +84,7 @@ async function loadPolicyAt(cwd, path, options) {
|
|
|
68
84
|
}
|
|
69
85
|
/** The `policy` export at `path`; without one, throws `PermDock CLI: <missing>`. */
|
|
70
86
|
function requirePolicy(cwd, path, missing) {
|
|
71
|
-
return path === void 0 ? Promise.reject(
|
|
87
|
+
return path === void 0 ? Promise.reject(new CliError("usage", `PermDock CLI: ${missing}`, { code: "config_invalid" })) : loadPolicyAt(cwd, path);
|
|
72
88
|
}
|
|
73
89
|
/** The configured policy export, or `undefined` when unset or unloadable. */
|
|
74
90
|
async function loadConfiguredPolicy(cwd, path, options) {
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
//#region src/jwt/load-jose.ts
|
|
2
|
-
let cached;
|
|
3
2
|
function loadJose() {
|
|
4
|
-
|
|
5
|
-
cached = void 0;
|
|
3
|
+
return import("jose").catch((cause) => {
|
|
6
4
|
throw new Error("PermDock: permdock/jwt requires the optional peer \"jose\".", { cause });
|
|
7
5
|
});
|
|
8
|
-
return cached;
|
|
9
6
|
}
|
|
10
7
|
//#endregion
|
|
11
8
|
export { loadJose as t };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { t as defineLeaf } from "./command-L8EstFNm.js";
|
|
2
|
+
import { c as given } from "./flags-C3DktBDY.js";
|
|
3
|
+
//#region src/cli/commands/login.ts
|
|
4
|
+
const urlFlag = { url: {
|
|
5
|
+
type: "string",
|
|
6
|
+
description: "Issuer URL (default PERMDOCK_CLOUD_URL, then https://permdock.com/api)",
|
|
7
|
+
valueHint: "url"
|
|
8
|
+
} };
|
|
9
|
+
const login = defineLeaf({
|
|
10
|
+
flags: {
|
|
11
|
+
...urlFlag,
|
|
12
|
+
loopback: {
|
|
13
|
+
type: "boolean",
|
|
14
|
+
description: "Use a 127.0.0.1 redirect with PKCE instead of the device flow"
|
|
15
|
+
},
|
|
16
|
+
scope: {
|
|
17
|
+
type: "enum",
|
|
18
|
+
options: ["catalog:write"],
|
|
19
|
+
repeatable: true,
|
|
20
|
+
description: "Scopes beyond projects:read and policy:read; catalog:write for permdock cloud push"
|
|
21
|
+
},
|
|
22
|
+
open: {
|
|
23
|
+
type: "boolean",
|
|
24
|
+
default: true,
|
|
25
|
+
description: "Open the browser at the verification URL",
|
|
26
|
+
negativeDescription: "Print the URL only"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
async run(ctx, { flags }) {
|
|
30
|
+
const { runLogin } = await import("./login-imhuwvn3.js");
|
|
31
|
+
return runLogin({
|
|
32
|
+
cwd: ctx.cwd,
|
|
33
|
+
url: given(flags.url),
|
|
34
|
+
loopback: flags.loopback,
|
|
35
|
+
scopes: flags.scope,
|
|
36
|
+
open: flags.open && ctx.interactive,
|
|
37
|
+
json: ctx.json,
|
|
38
|
+
env: ctx.env,
|
|
39
|
+
io: ctx.io
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const logout = defineLeaf({
|
|
44
|
+
flags: { ...urlFlag },
|
|
45
|
+
async run(ctx, { flags }) {
|
|
46
|
+
const { runLogout } = await import("./login-imhuwvn3.js");
|
|
47
|
+
return runLogout({
|
|
48
|
+
url: given(flags.url),
|
|
49
|
+
json: ctx.json,
|
|
50
|
+
env: ctx.env,
|
|
51
|
+
io: ctx.io
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
const whoami = defineLeaf({
|
|
56
|
+
flags: { ...urlFlag },
|
|
57
|
+
async run(ctx, { flags }) {
|
|
58
|
+
const { runWhoami } = await import("./login-imhuwvn3.js");
|
|
59
|
+
return runWhoami({
|
|
60
|
+
url: given(flags.url),
|
|
61
|
+
json: ctx.json,
|
|
62
|
+
env: ctx.env,
|
|
63
|
+
io: ctx.io
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
//#endregion
|
|
68
|
+
export { login, logout, whoami };
|
|
@@ -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 };
|