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,58 @@
|
|
|
1
|
+
# Presets and recipes
|
|
2
|
+
|
|
3
|
+
## Presets
|
|
4
|
+
|
|
5
|
+
A preset is an archetype plus the features, auth, backend, framework, integrations and Cloud services an app needs, encoded as a code that starts with `p1` ([presets](https://permdock.com/docs/concepts/presets)). The user builds one at [permdock.com/create](https://permdock.com/create), or you pass flags.
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx permdock init --preset <code> --dry-run
|
|
9
|
+
npx permdock init --archetype b2b --framework hono --auth clerk --backend drizzle --feature approvals --dry-run
|
|
10
|
+
npx permdock preset decode <code>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
| Flag | Values |
|
|
14
|
+
| --------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
|
15
|
+
| `--archetype` | `b2b`, `agent`, `marketplace`, `api`, `internal`, `consumer` |
|
|
16
|
+
| `--framework` | `next`, `hono`, `express`, `none` |
|
|
17
|
+
| `--auth` | `custom`, `supabase`, `better-auth`, `clerk`, `jwt` |
|
|
18
|
+
| `--backend` | `memory`, `supabase`, `drizzle`, `prisma` |
|
|
19
|
+
| `--feature` | `tenancy`, `custom-roles`, `approvals`, `operations`, `decision-log`, `limits`, `plans`, `ownership`, `api-keys`, `rls` |
|
|
20
|
+
| `--integration` | `ai-sdk`, `mcp`, `shadcn`, `react-native` |
|
|
21
|
+
| `--service` | `cloud-decision-log`, `cloud-approvals`, `cloud-snapshots`, `cloud-hosted-grants` |
|
|
22
|
+
|
|
23
|
+
`permdock preset decode <code>` ends with the `init` flags that select the same preset.
|
|
24
|
+
|
|
25
|
+
`init` keeps every file that exists unless `--force` is passed, installs nothing and calls no network. It prints the `npm install` line, the `npx shadcn add` line for the recipes and the docs pages to read. Run what it prints, then `permdock doctor`.
|
|
26
|
+
|
|
27
|
+
What `init` writes is the app's own code: `src/permissions.ts`, `src/policy.ts`, `src/permdock.ts` (`defineApp` with a `profile` from `NODE_ENV`), `src/session.ts`, `src/data.ts`, the framework file and `permdock.config.ts` ([what each choice writes](https://permdock.com/docs/cli/init#generated-files)). With `--auth custom` the session returns `null` until it is wired, so every check denies; a provider's session calls its `subjectFrom*`. With `--backend memory` the loaders return demo rows: replace them, and do not add rules to them.
|
|
28
|
+
|
|
29
|
+
### Who owns what
|
|
30
|
+
|
|
31
|
+
- The `permdock` package owns every rule: evaluation, role ceilings, approval binding, limits, token checks. `npm update` reaches it.
|
|
32
|
+
- The app owns declarations (`definePermissions`, `definePolicy` data, `defineApp` options) and presentation (recipes).
|
|
33
|
+
- Never copy evaluation logic out of the package into the app, and never change a recipe so it decides on its own; it renders what `useGate` returns.
|
|
34
|
+
|
|
35
|
+
`profile: "prod"` throws at startup when a store or limits a feature needs are missing ([apps and profiles](https://permdock.com/docs/concepts/apps)). Do not switch the profile to silence it; pass the store.
|
|
36
|
+
|
|
37
|
+
## Recipes
|
|
38
|
+
|
|
39
|
+
The `@permdock` shadcn registry holds UI built from the app's own components on `useGate` ([recipes](https://permdock.com/docs/concepts/recipes)). PermDock ships no visible component besides `<Protected>`.
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx shadcn@latest add https://permdock.com/r/gated-button.json
|
|
43
|
+
npx shadcn@latest add https://permdock.com/r/preset-<code>.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
| Recipe | Use |
|
|
47
|
+
| ---------------------------------------------- | ----------------------------------------------------------------------- |
|
|
48
|
+
| `gated-button` | A button that is hidden, disabled with the reason, or asks for approval |
|
|
49
|
+
| `approval-request-dialog` | A note and a request for an `approval-required` action |
|
|
50
|
+
| `tenant-switcher` | The tenants the user is a member of |
|
|
51
|
+
| `role-picker` | Only the roles the user may hand out |
|
|
52
|
+
| `custom-role-editor` | Only the permissions the editor holds |
|
|
53
|
+
| `upgrade-prompt` | The plans that would grant the action |
|
|
54
|
+
| `gated-button-native`, `upgrade-prompt-native` | The same on React Native Reusables |
|
|
55
|
+
|
|
56
|
+
Each recipe needs `PermDockProvider` from `permdock/react` or `permdock/react-native`. A recipe hides or disables a control; the server checks the action again, so the guard from the Guard step stays.
|
|
57
|
+
|
|
58
|
+
✓ The recipe renders `useGate`'s `hidden`, `disabled`, `needsApproval` and `reason`, and the server action it calls asserts the same permission.
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { t as compact } from "./compact-y6vfu2_f.js";
|
|
2
|
-
import { t as PROBLEM_BASE } from "./validation-error-CnjZ4t92.js";
|
|
3
|
-
import { s as rootMembershipId } from "./scopes-CVdPrWN-.js";
|
|
4
|
-
import { n as isApprovalError } from "./errors-DRnGZHzF.js";
|
|
5
|
-
import { n as hasCredentials } from "./http-SO7qGttf.js";
|
|
6
|
-
import { l as unauthenticatedProblem } from "./problem-B43ztKIm.js";
|
|
7
|
-
import { n as assertApprover } from "./store-DMAWwAJV.js";
|
|
8
|
-
import { m as approverRelations, p as heldPermissions } from "./helpers-H_KARDVC.js";
|
|
9
|
-
//#region src/approvals/handler.ts
|
|
10
|
-
function problem(status, title, detail, slug) {
|
|
11
|
-
const body = {
|
|
12
|
-
type: `${PROBLEM_BASE}/${slug}`,
|
|
13
|
-
title,
|
|
14
|
-
status,
|
|
15
|
-
detail
|
|
16
|
-
};
|
|
17
|
-
return new Response(JSON.stringify(body), {
|
|
18
|
-
status,
|
|
19
|
-
headers: { "content-type": "application/problem+json" }
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
function json(status, body) {
|
|
23
|
-
return new Response(JSON.stringify(body), {
|
|
24
|
-
status,
|
|
25
|
-
headers: { "content-type": "application/json" }
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
function parseRoute(url, method) {
|
|
29
|
-
const parts = url.pathname.replace(/\/+$/u, "").split("/").filter(Boolean);
|
|
30
|
-
const last = parts.at(-1);
|
|
31
|
-
const prev = parts.at(-2);
|
|
32
|
-
if (last === void 0) return;
|
|
33
|
-
if (method === "GET" && last === "pending") return { kind: "pending" };
|
|
34
|
-
if (method === "GET" && last === "mine") return { kind: "mine" };
|
|
35
|
-
if (method === "POST" && last === "approve" && prev !== void 0) return {
|
|
36
|
-
kind: "approve",
|
|
37
|
-
token: decodeURIComponent(prev)
|
|
38
|
-
};
|
|
39
|
-
if (method === "POST" && last === "reject" && prev !== void 0) return {
|
|
40
|
-
kind: "reject",
|
|
41
|
-
token: decodeURIComponent(prev)
|
|
42
|
-
};
|
|
43
|
-
if (method === "GET" && last !== "pending" && last !== "mine") return {
|
|
44
|
-
kind: "get",
|
|
45
|
-
token: decodeURIComponent(last)
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
async function resolveSubject(request, resolve) {
|
|
49
|
-
try {
|
|
50
|
-
const subject = await resolve(request);
|
|
51
|
-
if (subject === null || subject === void 0) return null;
|
|
52
|
-
return subject;
|
|
53
|
-
} catch {
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function membershipTenants(subject) {
|
|
58
|
-
const principal = subject.principal;
|
|
59
|
-
if (principal === null) return [];
|
|
60
|
-
const tenants = /* @__PURE__ */ new Set();
|
|
61
|
-
if (principal.tenant !== void 0) tenants.add(principal.tenant);
|
|
62
|
-
for (const membership of principal.memberships ?? []) {
|
|
63
|
-
const tenant = rootMembershipId(membership);
|
|
64
|
-
if (tenant !== void 0) tenants.add(tenant);
|
|
65
|
-
}
|
|
66
|
-
return [...tenants];
|
|
67
|
-
}
|
|
68
|
-
function belongsToTenant(subject, tenant) {
|
|
69
|
-
return membershipTenants(subject).includes(tenant);
|
|
70
|
-
}
|
|
71
|
-
async function mayResolve(request, subject, requireDistinct, options) {
|
|
72
|
-
try {
|
|
73
|
-
const relations = await approverRelations(request, subject, options);
|
|
74
|
-
const permissions = await heldPermissions(request, subject, options.permdockFor);
|
|
75
|
-
assertApprover(request, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
|
|
76
|
-
return true;
|
|
77
|
-
} catch {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
function canView(request, subject) {
|
|
82
|
-
const principal = subject.principal;
|
|
83
|
-
if (principal === null) return false;
|
|
84
|
-
if (request.subject.principal?.id === principal.id) return true;
|
|
85
|
-
const tenant = request.subject.principal?.tenant;
|
|
86
|
-
if (tenant !== void 0) return belongsToTenant(subject, tenant);
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* The tenants whose pending requests the approver may list: the requested one,
|
|
91
|
-
* else the active one, else every membership tenant. Requests without a tenant
|
|
92
|
-
* are listed only when no tenant was requested or active.
|
|
93
|
-
*/
|
|
94
|
-
function pageQuery(url) {
|
|
95
|
-
const limit = url.searchParams.get("limit");
|
|
96
|
-
const cursor = url.searchParams.get("cursor");
|
|
97
|
-
return compact({
|
|
98
|
-
limit: limit === null ? void 0 : Number(limit),
|
|
99
|
-
cursor: cursor ?? void 0
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
function inboxScope(url, subject) {
|
|
103
|
-
const requested = url.searchParams.get("tenant");
|
|
104
|
-
if (requested !== null && requested !== "") {
|
|
105
|
-
if (!belongsToTenant(subject, requested)) return { ok: false };
|
|
106
|
-
return {
|
|
107
|
-
ok: true,
|
|
108
|
-
tenants: [requested],
|
|
109
|
-
tenantless: false
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
const active = subject.principal?.tenant;
|
|
113
|
-
if (active !== void 0) return {
|
|
114
|
-
ok: true,
|
|
115
|
-
tenants: [active],
|
|
116
|
-
tenantless: false
|
|
117
|
-
};
|
|
118
|
-
return {
|
|
119
|
-
ok: true,
|
|
120
|
-
tenants: membershipTenants(subject),
|
|
121
|
-
tenantless: true
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
function signedApproval(request, signer, audience) {
|
|
125
|
-
if (signer === void 0 || request.status !== "approved") return Promise.resolve(void 0);
|
|
126
|
-
const payload = { approval: {
|
|
127
|
-
token: request.token,
|
|
128
|
-
permission: request.permission,
|
|
129
|
-
resource: request.resource,
|
|
130
|
-
status: request.status
|
|
131
|
-
} };
|
|
132
|
-
if (request.subject.principal !== null) payload["sub"] = request.subject.principal.id;
|
|
133
|
-
return signer.sign(payload, compact({
|
|
134
|
-
typ: "permdock-approval+jwt",
|
|
135
|
-
audience,
|
|
136
|
-
expiresAt: Math.floor(Date.parse(request.expiresAt) / 1e3)
|
|
137
|
-
}));
|
|
138
|
-
}
|
|
139
|
-
async function readNote(request) {
|
|
140
|
-
const contentType = request.headers.get("content-type") ?? "";
|
|
141
|
-
if (request.method !== "POST" || contentType === "") return;
|
|
142
|
-
if (!contentType.includes("application/json")) return;
|
|
143
|
-
try {
|
|
144
|
-
const body = await request.json();
|
|
145
|
-
if (body !== null && typeof body === "object" && "note" in body && typeof body.note === "string") return body.note;
|
|
146
|
-
} catch {
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
function mapError(error, credentials) {
|
|
151
|
-
if (!isApprovalError(error)) return problem(500, "Internal error", "approval store failed", "internal");
|
|
152
|
-
if (error.code === "approval-not-found") return problem(404, "Not found", error.message, "not-found");
|
|
153
|
-
if (error.code === "approval-not-pending" || error.code === "approval-expired" || error.code === "approver-repeated") return problem(409, "Conflict", error.message, "conflict");
|
|
154
|
-
if (error.code === "approver-unauthenticated") return unauthenticatedProblem(credentials);
|
|
155
|
-
return problem(403, "Permission denied", error.message, "denied");
|
|
156
|
-
}
|
|
157
|
-
function approvalsHandler(store, options) {
|
|
158
|
-
const requireDistinct = options.requireDistinctApprover === true;
|
|
159
|
-
return async (request) => {
|
|
160
|
-
const url = new URL(request.url);
|
|
161
|
-
const route = parseRoute(url, request.method);
|
|
162
|
-
if (route === void 0) return problem(405, "Method not allowed", "unknown approvals route", "method-not-allowed");
|
|
163
|
-
await store.expire();
|
|
164
|
-
const subject = await resolveSubject(request, options.subject);
|
|
165
|
-
const principal = subject?.principal ?? null;
|
|
166
|
-
if (subject === null || principal === null) return unauthenticatedProblem(hasCredentials(request));
|
|
167
|
-
try {
|
|
168
|
-
if (route.kind === "pending") {
|
|
169
|
-
const scoped = inboxScope(url, subject);
|
|
170
|
-
if (!scoped.ok) return problem(403, "Permission denied", "approver does not belong to that tenant", "denied");
|
|
171
|
-
const page = await store.list({
|
|
172
|
-
...pageQuery(url),
|
|
173
|
-
status: "pending"
|
|
174
|
-
});
|
|
175
|
-
const tenants = new Set(scoped.tenants);
|
|
176
|
-
const eligible = await Promise.all(page.items.map(async (item) => {
|
|
177
|
-
const tenant = item.subject.principal?.tenant;
|
|
178
|
-
return (tenant === void 0 ? scoped.tenantless : tenants.has(tenant)) && await mayResolve(item, subject, requireDistinct, options);
|
|
179
|
-
}));
|
|
180
|
-
return json(200, compact({
|
|
181
|
-
items: page.items.filter((_, index) => eligible[index] === true),
|
|
182
|
-
next: page.next
|
|
183
|
-
}));
|
|
184
|
-
}
|
|
185
|
-
if (route.kind === "mine") {
|
|
186
|
-
const page = await store.list({
|
|
187
|
-
...pageQuery(url),
|
|
188
|
-
principalId: principal.id
|
|
189
|
-
});
|
|
190
|
-
return json(200, compact({
|
|
191
|
-
items: page.items,
|
|
192
|
-
next: page.next
|
|
193
|
-
}));
|
|
194
|
-
}
|
|
195
|
-
if (route.kind === "get") {
|
|
196
|
-
const current = await store.get(route.token);
|
|
197
|
-
if (current === null || !canView(current, subject)) return problem(404, "Not found", "approval was not found", "not-found");
|
|
198
|
-
return json(200, current);
|
|
199
|
-
}
|
|
200
|
-
const current = await store.get(route.token);
|
|
201
|
-
if (current === null) return problem(404, "Not found", "approval was not found", "not-found");
|
|
202
|
-
const relations = await approverRelations(current, subject, options);
|
|
203
|
-
const permissions = await heldPermissions(current, subject, options.permdockFor);
|
|
204
|
-
assertApprover(current, subject, requireDistinct, /* @__PURE__ */ new Date(), relations, permissions);
|
|
205
|
-
const note = await readNote(request);
|
|
206
|
-
const resolved = await store.resolve(route.token, compact({
|
|
207
|
-
status: route.kind === "approve" ? "approved" : "rejected",
|
|
208
|
-
by: subject,
|
|
209
|
-
note,
|
|
210
|
-
relations,
|
|
211
|
-
permissions
|
|
212
|
-
}));
|
|
213
|
-
const signed = await signedApproval(resolved, options.signer, options.audience);
|
|
214
|
-
return json(200, compact({
|
|
215
|
-
...resolved,
|
|
216
|
-
signed
|
|
217
|
-
}));
|
|
218
|
-
} catch (error) {
|
|
219
|
-
return mapError(error, hasCredentials(request));
|
|
220
|
-
}
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
//#endregion
|
|
224
|
-
export { approvalsHandler as t };
|
package/dist/arazzo-C9chp3ST.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
//#region src/cli/commands/arazzo.ts
|
|
4
|
-
function arazzo(ctx) {
|
|
5
|
-
return defineCommand({
|
|
6
|
-
meta: {
|
|
7
|
-
name: "arazzo",
|
|
8
|
-
description: COMMAND_DESCRIPTIONS.arazzo
|
|
9
|
-
},
|
|
10
|
-
args: {
|
|
11
|
-
...globalArgs,
|
|
12
|
-
action: {
|
|
13
|
-
type: "positional",
|
|
14
|
-
required: false,
|
|
15
|
-
description: "check"
|
|
16
|
-
},
|
|
17
|
-
doc: {
|
|
18
|
-
type: "string",
|
|
19
|
-
description: "Arazzo document",
|
|
20
|
-
valueHint: "arazzo.json"
|
|
21
|
-
},
|
|
22
|
-
openapi: {
|
|
23
|
-
type: "string",
|
|
24
|
-
description: "OpenAPI document the workflows call",
|
|
25
|
-
valueHint: "doc.json"
|
|
26
|
-
},
|
|
27
|
-
workflow: {
|
|
28
|
-
type: "string",
|
|
29
|
-
description: "Check one workflow",
|
|
30
|
-
valueHint: "id"
|
|
31
|
-
},
|
|
32
|
-
from: {
|
|
33
|
-
type: "string",
|
|
34
|
-
description: "Module exporting the policy, instead of the config",
|
|
35
|
-
valueHint: "module"
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
async run({ args: parsed, rawArgs }) {
|
|
39
|
-
const result = await (await import("./arazzo-BAgw9ap6.js")).runArazzo({
|
|
40
|
-
cwd: ctx.cwd,
|
|
41
|
-
config: ctx.config,
|
|
42
|
-
rest: parsed._,
|
|
43
|
-
doc: listArg(rawArgs, "doc")[0],
|
|
44
|
-
openapi: stringArg(parsed.openapi),
|
|
45
|
-
workflow: stringArg(parsed.workflow),
|
|
46
|
-
from: stringArg(parsed.from),
|
|
47
|
-
json: ctx.json
|
|
48
|
-
});
|
|
49
|
-
ctx.report(result);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
//#endregion
|
|
54
|
-
export { arazzo };
|
package/dist/bind-C_ob3LKa.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { f as ApprovalStore } from "./types-aqOHTHcp.js";
|
|
2
|
-
import { t as InstanceOptions } from "./instance-options-jARdwfPN.js";
|
|
3
|
-
import { r as PdpFactory } from "./types-DxiCGmmd.js";
|
|
4
|
-
import { o as OtelWrap } from "./types-QCuYJh4q.js";
|
|
5
|
-
import { T as TenantOption, b as WebBotAuthVerifier } from "./create-B1d519XK.js";
|
|
6
|
-
//#region src/server/bind.d.ts
|
|
7
|
-
/** The options of every framework adapter; `TContext` is what its callbacks receive. */
|
|
8
|
-
type ServerAdapterOptions<TContext, TUser = unknown> = InstanceOptions & ServerAdapterServices & {
|
|
9
|
-
readonly subject: (context: TContext) => TUser | Promise<TUser>;
|
|
10
|
-
/** The agent or service acting for the subject; anything but an `Actor` is ignored. */
|
|
11
|
-
readonly actor?: (context: TContext) => unknown;
|
|
12
|
-
readonly tenant?: TenantOption<TContext>;
|
|
13
|
-
};
|
|
14
|
-
/** The services an adapter hands to its kernel unchanged. */
|
|
15
|
-
type ServerAdapterServices = {
|
|
16
|
-
readonly store?: ApprovalStore;
|
|
17
|
-
/** `createPermDock` from `permdock/pdp`; `protect` then decides delegated permissions remotely. */
|
|
18
|
-
readonly pdp?: PdpFactory;
|
|
19
|
-
/** `(permdock) => withOtel(permdock, options)` from `permdock/otel`. */
|
|
20
|
-
readonly otel?: OtelWrap;
|
|
21
|
-
/** `(request) => verifyWebBotAuth(request, options)`; a verified bot becomes the actor. */
|
|
22
|
-
readonly webBotAuth?: WebBotAuthVerifier;
|
|
23
|
-
};
|
|
24
|
-
//#endregion
|
|
25
|
-
export { ServerAdapterServices as n, ServerAdapterOptions as t };
|
package/dist/catalog-CRW5Mx_B.js
DELETED
package/dist/catalog-CYj-mX2O.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { a as listArg, i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
//#region src/cli/commands/catalog.ts
|
|
4
|
-
function catalog(ctx) {
|
|
5
|
-
return defineCommand({
|
|
6
|
-
meta: {
|
|
7
|
-
name: "catalog",
|
|
8
|
-
description: COMMAND_DESCRIPTIONS.catalog
|
|
9
|
-
},
|
|
10
|
-
args: {
|
|
11
|
-
...globalArgs,
|
|
12
|
-
format: {
|
|
13
|
-
type: "enum",
|
|
14
|
-
options: [
|
|
15
|
-
"json",
|
|
16
|
-
"schema",
|
|
17
|
-
"markdown"
|
|
18
|
-
],
|
|
19
|
-
default: "json",
|
|
20
|
-
description: "Output format"
|
|
21
|
-
},
|
|
22
|
-
from: {
|
|
23
|
-
type: "string",
|
|
24
|
-
description: "Module exporting the permissions, instead of the config",
|
|
25
|
-
valueHint: "module"
|
|
26
|
-
},
|
|
27
|
-
include: {
|
|
28
|
-
type: "string",
|
|
29
|
-
description: "Permission keys or prefixes to keep, repeatable",
|
|
30
|
-
valueHint: "key"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
async run({ args: parsed, rawArgs }) {
|
|
34
|
-
const result = await (await import("./catalog-CRW5Mx_B.js")).runCatalog({
|
|
35
|
-
cwd: ctx.cwd,
|
|
36
|
-
config: ctx.config,
|
|
37
|
-
format: parsed.format,
|
|
38
|
-
from: stringArg(parsed.from),
|
|
39
|
-
include: listArg(rawArgs, "include"),
|
|
40
|
-
now: ctx.now,
|
|
41
|
-
io: ctx.io
|
|
42
|
-
});
|
|
43
|
-
ctx.report(result);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
//#endregion
|
|
48
|
-
export { catalog };
|
package/dist/catalog-DWF5cYqB.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { a as formatCatalogMarkdown, i as formatCatalogJson, r as catalogSchemaDocument, t as buildCatalog } from "./catalog-doc-DdGm82XT.js";
|
|
2
|
-
import { r as listSourceFiles, t as defaultSrcPath } from "./files-DWUN9PzI.js";
|
|
3
|
-
import { a as loadModule, i as loadConfiguredPolicy, o as pickNamed, r as leavesOf, t as asPermissionTree } from "./load-DhWEB9P1.js";
|
|
4
|
-
import { i as scanSources, r as runCollect } from "./collect-DSTE3ml9.js";
|
|
5
|
-
import { existsSync } from "node:fs";
|
|
6
|
-
import { resolve } from "node:path";
|
|
7
|
-
//#region src/cli/catalog.ts
|
|
8
|
-
async function runCatalog(input) {
|
|
9
|
-
if (input.format === "schema") return {
|
|
10
|
-
code: 0,
|
|
11
|
-
output: `${JSON.stringify(catalogSchemaDocument(), null, 2)}\n`
|
|
12
|
-
};
|
|
13
|
-
const from = input.from ?? input.config.permissions;
|
|
14
|
-
let document;
|
|
15
|
-
if (from !== void 0) {
|
|
16
|
-
const abs = resolve(input.cwd, from);
|
|
17
|
-
if (!existsSync(abs)) return {
|
|
18
|
-
code: 2,
|
|
19
|
-
output: `PermDock CLI: module not found: ${from}`
|
|
20
|
-
};
|
|
21
|
-
const tree = asPermissionTree(pickNamed(await loadModule(abs), ["permissions"]));
|
|
22
|
-
const srcPath = input.config.collect?.srcPath ?? defaultSrcPath();
|
|
23
|
-
const files = listSourceFiles(input.cwd, srcPath);
|
|
24
|
-
const scan = scanSources(input.cwd, files, new Set(leavesOf(tree).map((leaf) => leaf.key)));
|
|
25
|
-
document = buildCatalog(tree, scan, input.now.toISOString(), await loadConfiguredPolicy(input.cwd, input.config.policy));
|
|
26
|
-
} else {
|
|
27
|
-
const collected = await runCollect({
|
|
28
|
-
cwd: input.cwd,
|
|
29
|
-
config: input.config,
|
|
30
|
-
collect: input.config.collect ?? {},
|
|
31
|
-
check: false,
|
|
32
|
-
now: input.now,
|
|
33
|
-
io: input.io
|
|
34
|
-
});
|
|
35
|
-
if (collected.document === void 0) return {
|
|
36
|
-
code: collected.code,
|
|
37
|
-
output: collected.message
|
|
38
|
-
};
|
|
39
|
-
document = collected.document;
|
|
40
|
-
}
|
|
41
|
-
const filtered = input.include.length === 0 ? document : {
|
|
42
|
-
...document,
|
|
43
|
-
permissions: document.permissions.filter((permission) => input.include.some((prefix) => permission.key === prefix || permission.key.startsWith(`${prefix}.`) || permission.resource === prefix))
|
|
44
|
-
};
|
|
45
|
-
if (input.format === "markdown") return {
|
|
46
|
-
code: 0,
|
|
47
|
-
output: formatCatalogMarkdown(filtered)
|
|
48
|
-
};
|
|
49
|
-
return {
|
|
50
|
-
code: 0,
|
|
51
|
-
output: formatCatalogJson(filtered)
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
//#endregion
|
|
55
|
-
export { runCatalog as t };
|
package/dist/cloud-CfwZ39Rl.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { i as globalArgs, s as stringArg, t as COMMAND_DESCRIPTIONS } from "./commands-BeaGNj_o.js";
|
|
2
|
-
import { defineCommand } from "citty";
|
|
3
|
-
//#region src/cli/commands/cloud.ts
|
|
4
|
-
function cloud(ctx) {
|
|
5
|
-
return defineCommand({
|
|
6
|
-
meta: {
|
|
7
|
-
name: "cloud",
|
|
8
|
-
description: COMMAND_DESCRIPTIONS.cloud
|
|
9
|
-
},
|
|
10
|
-
args: {
|
|
11
|
-
...globalArgs,
|
|
12
|
-
action: {
|
|
13
|
-
type: "positional",
|
|
14
|
-
required: false,
|
|
15
|
-
description: "push"
|
|
16
|
-
},
|
|
17
|
-
"dry-run": {
|
|
18
|
-
type: "boolean",
|
|
19
|
-
description: "Print the payload; send nothing"
|
|
20
|
-
},
|
|
21
|
-
url: {
|
|
22
|
-
type: "string",
|
|
23
|
-
description: "Cloud API base URL",
|
|
24
|
-
valueHint: "url"
|
|
25
|
-
},
|
|
26
|
-
environment: {
|
|
27
|
-
type: "string",
|
|
28
|
-
description: "Target environment",
|
|
29
|
-
valueHint: "env"
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
async run({ args: parsed }) {
|
|
33
|
-
const result = await (await import("./cloud-DWLXO2af.js")).runCloud({
|
|
34
|
-
cwd: ctx.cwd,
|
|
35
|
-
config: ctx.config,
|
|
36
|
-
rest: parsed._,
|
|
37
|
-
url: stringArg(parsed.url),
|
|
38
|
-
environment: stringArg(parsed.environment),
|
|
39
|
-
dryRun: parsed["dry-run"] === true,
|
|
40
|
-
json: ctx.json,
|
|
41
|
-
env: ctx.io.env ?? process.env,
|
|
42
|
-
now: ctx.now,
|
|
43
|
-
io: ctx.io
|
|
44
|
-
});
|
|
45
|
-
ctx.report(result);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
//#endregion
|
|
50
|
-
export { cloud };
|
package/dist/cloud-DWLXO2af.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { t as catalogFingerprint } from "./src-BDwEZWrZ.js";
|
|
2
|
-
import { s as snapshotScopes } from "./permdock-CbgvLnuo.js";
|
|
3
|
-
import { i as describeError } from "./errors-CWfoNg9N.js";
|
|
4
|
-
import { i as loadConfiguredPolicy } from "./load-DhWEB9P1.js";
|
|
5
|
-
import { t as parseCatalog } from "./parse-BuyjxhZV.js";
|
|
6
|
-
import { t as runCatalog } from "./catalog-DWF5cYqB.js";
|
|
7
|
-
//#region src/cli/cloud.ts
|
|
8
|
-
function firstNonEmpty(...values) {
|
|
9
|
-
for (const value of values) if (value !== void 0 && value !== "") return value;
|
|
10
|
-
return "";
|
|
11
|
-
}
|
|
12
|
-
function pushedGrant(grant) {
|
|
13
|
-
const entry = {
|
|
14
|
-
permission: grant.permission.key,
|
|
15
|
-
effect: grant.effect,
|
|
16
|
-
role: grant.role,
|
|
17
|
-
to: grant.to,
|
|
18
|
-
where: grant.portable ? grant.where : void 0,
|
|
19
|
-
check: grant.portable ? grant.check : void 0,
|
|
20
|
-
approval: grant.approval,
|
|
21
|
-
scope: grant.scope === "global" ? void 0 : typeof grant.scope === "string" ? grant.scope : { resource: grant.scope.resource },
|
|
22
|
-
portable: grant.portable ? void 0 : false,
|
|
23
|
-
fields: grant.fields,
|
|
24
|
-
limit: grant.limit
|
|
25
|
-
};
|
|
26
|
-
return Object.fromEntries(Object.entries(entry).filter(([, value]) => value !== void 0));
|
|
27
|
-
}
|
|
28
|
-
/** The code policy as the hosted AuthZEN endpoint evaluates it; closures travel as `portable: false` and deny there. */
|
|
29
|
-
function pushedPolicy(policy) {
|
|
30
|
-
const scopes = snapshotScopes(policy);
|
|
31
|
-
return {
|
|
32
|
-
fingerprint: policy.fingerprint,
|
|
33
|
-
...scopes === void 0 ? {} : { scopes },
|
|
34
|
-
grants: policy.grants.filter((grant) => grant.hosted === void 0).map(pushedGrant)
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
async function runCloud(input) {
|
|
38
|
-
if (input.rest[0] !== "push") return {
|
|
39
|
-
code: 2,
|
|
40
|
-
output: `usage: permdock cloud push [--dry-run] [--url <url>] [--environment <env>]`
|
|
41
|
-
};
|
|
42
|
-
const built = await runCatalog({
|
|
43
|
-
cwd: input.cwd,
|
|
44
|
-
config: input.config,
|
|
45
|
-
format: "json",
|
|
46
|
-
from: void 0,
|
|
47
|
-
include: [],
|
|
48
|
-
now: input.now,
|
|
49
|
-
io: input.io
|
|
50
|
-
});
|
|
51
|
-
if (built.code !== 0) return {
|
|
52
|
-
code: built.code,
|
|
53
|
-
output: built.output
|
|
54
|
-
};
|
|
55
|
-
const catalog = parseCatalog(built.output);
|
|
56
|
-
const fingerprint = catalogFingerprint(catalog);
|
|
57
|
-
const loaded = await loadConfiguredPolicy(input.cwd, input.config.policy);
|
|
58
|
-
const policy = loaded === void 0 ? void 0 : pushedPolicy(loaded);
|
|
59
|
-
const hostable = catalog.permissions.filter((permission) => permission.hostable === true).map((permission) => permission.key);
|
|
60
|
-
const summary = {
|
|
61
|
-
fingerprint,
|
|
62
|
-
permissions: catalog.permissions.length,
|
|
63
|
-
hostable,
|
|
64
|
-
roles: (catalog.roles ?? []).length,
|
|
65
|
-
plans: (catalog.plans ?? []).length,
|
|
66
|
-
grants: policy?.grants.length ?? 0
|
|
67
|
-
};
|
|
68
|
-
const url = firstNonEmpty(input.url, input.env["PERMDOCK_CLOUD_URL"]).replace(/\/$/u, "");
|
|
69
|
-
const environment = firstNonEmpty(input.environment, input.env["PERMDOCK_CLOUD_ENV"], input.env["VERCEL_ENV"], "production");
|
|
70
|
-
const describe = (verb) => input.json ? JSON.stringify({
|
|
71
|
-
...summary,
|
|
72
|
-
environment,
|
|
73
|
-
status: verb
|
|
74
|
-
}) : `${verb} catalog ${fingerprint} (${String(summary.permissions)} permissions, ${String(hostable.length)} hostable) to ${environment}`;
|
|
75
|
-
if (input.dryRun) return {
|
|
76
|
-
code: 0,
|
|
77
|
-
output: describe("would push")
|
|
78
|
-
};
|
|
79
|
-
const key = input.env["PERMDOCK_CLOUD_KEY"] ?? "";
|
|
80
|
-
if (url === "" || key === "") return {
|
|
81
|
-
code: 2,
|
|
82
|
-
output: "permdock cloud push needs PERMDOCK_CLOUD_URL (or --url) and PERMDOCK_CLOUD_KEY in the environment"
|
|
83
|
-
};
|
|
84
|
-
const fetchFn = input.io.fetch ?? globalThis.fetch.bind(globalThis);
|
|
85
|
-
let response;
|
|
86
|
-
try {
|
|
87
|
-
response = await fetchFn(`${url}/v1/environments/${encodeURIComponent(environment)}/catalog`, {
|
|
88
|
-
method: "POST",
|
|
89
|
-
headers: {
|
|
90
|
-
authorization: `Bearer ${key}`,
|
|
91
|
-
"content-type": "application/json"
|
|
92
|
-
},
|
|
93
|
-
body: JSON.stringify(policy === void 0 ? {
|
|
94
|
-
fingerprint,
|
|
95
|
-
catalog
|
|
96
|
-
} : {
|
|
97
|
-
fingerprint,
|
|
98
|
-
catalog,
|
|
99
|
-
policy
|
|
100
|
-
})
|
|
101
|
-
});
|
|
102
|
-
} catch (error) {
|
|
103
|
-
return {
|
|
104
|
-
code: 1,
|
|
105
|
-
output: `PermDock Cloud unreachable: ${describeError(error)}`
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
if (!response.ok) return {
|
|
109
|
-
code: 1,
|
|
110
|
-
output: `PermDock Cloud rejected the catalog: HTTP ${String(response.status)}`
|
|
111
|
-
};
|
|
112
|
-
return {
|
|
113
|
-
code: 0,
|
|
114
|
-
output: describe("pushed")
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
//#endregion
|
|
118
|
-
export { runCloud };
|