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
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { c as rootScope, l as scopeChain, m as tenantOf, o as resolveScope, r as findScope, t as activeFor, u as scopeIdOf } from "./scopes-
|
|
1
|
+
import { o as sameId, t as expiredAt } from "./expiry-D4_YKRKD.js";
|
|
2
|
+
import { l as isFieldRelation } from "./resource-relations-D_jw0BFx.js";
|
|
3
|
+
import { o as epochSeconds } from "./time-DkWjdL98.js";
|
|
4
|
+
import { c as rootScope, l as scopeChain, m as tenantOf, o as resolveScope, r as findScope, t as activeFor, u as scopeIdOf } from "./scopes-CUPSjo9q.js";
|
|
5
5
|
//#region src/core/tenancy.ts
|
|
6
6
|
function nowSeconds(now) {
|
|
7
|
-
return now ??
|
|
7
|
+
return now ?? epochSeconds();
|
|
8
8
|
}
|
|
9
9
|
function isMembershipExpired(membership, now) {
|
|
10
10
|
return expiredAt(membership, now ?? nowSeconds());
|
|
@@ -206,40 +206,4 @@ function membershipField(resource, membershipResource, resources) {
|
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
//#endregion
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* An instant as Unix seconds: a finite number is taken as seconds already, a
|
|
212
|
-
* string must parse as RFC 3339. Anything else is `undefined`, and the caller
|
|
213
|
-
* decides whether that is "absent" or an error.
|
|
214
|
-
*/
|
|
215
|
-
function instantOf(input) {
|
|
216
|
-
if (typeof input === "number") return Number.isFinite(input) ? Math.floor(input) : void 0;
|
|
217
|
-
if (typeof input !== "string" || input.trim() === "") return;
|
|
218
|
-
const millis = Date.parse(input);
|
|
219
|
-
return Number.isFinite(millis) ? Math.floor(millis / 1e3) : void 0;
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* The normalised validity of a grant, or `undefined` when neither bound is
|
|
223
|
-
* set. Fail-closed at definition time: a bound that does not parse, or a
|
|
224
|
-
* window that ends before it starts, throws so a typo never widens a grant.
|
|
225
|
-
*/
|
|
226
|
-
function normalizeValidity(options, permissionKey) {
|
|
227
|
-
const from = options.validFrom === void 0 ? void 0 : instantOf(options.validFrom);
|
|
228
|
-
const until = options.validUntil === void 0 ? void 0 : instantOf(options.validUntil);
|
|
229
|
-
if (options.validFrom !== void 0 && from === void 0) throw new Error(`PermDock: validFrom on '${permissionKey}' must be an RFC 3339 string or Unix seconds`);
|
|
230
|
-
if (options.validUntil !== void 0 && until === void 0) throw new Error(`PermDock: validUntil on '${permissionKey}' must be an RFC 3339 string or Unix seconds`);
|
|
231
|
-
if (from !== void 0 && until !== void 0 && until <= from) throw new Error(`PermDock: validUntil on '${permissionKey}' must be after validFrom`);
|
|
232
|
-
if (from === void 0 && until === void 0) return;
|
|
233
|
-
return Object.freeze({
|
|
234
|
-
...from === void 0 ? {} : { from },
|
|
235
|
-
...until === void 0 ? {} : { until }
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
/** Whether a grant with this validity applies at `now` (Unix seconds); no validity always applies. */
|
|
239
|
-
function isActive(validity, now) {
|
|
240
|
-
if (validity === void 0) return true;
|
|
241
|
-
if (validity.from !== void 0 && now < validity.from) return false;
|
|
242
|
-
return validity.until === void 0 || now < validity.until;
|
|
243
|
-
}
|
|
244
|
-
//#endregion
|
|
245
|
-
export { isMembershipExpired as a, membershipField as c, partitionsOf as d, relatesTo as f, tenantsOf as g, scopeField as h, inTeam as i, nestedAppliesWithoutRow as l, rowInScope as m, normalizeValidity as n, matchScopedMembership as o, resolveActiveTenant as p, heldRoleNamesIn as r, memberOfFields as s, isActive as t, nowSeconds as u };
|
|
209
|
+
export { memberOfFields as a, nowSeconds as c, resolveActiveTenant as d, rowInScope as f, matchScopedMembership as i, partitionsOf as l, tenantsOf as m, inTeam as n, membershipField as o, scopeField as p, isMembershipExpired as r, nestedAppliesWithoutRow as s, heldRoleNamesIn as t, relatesTo as u };
|
package/dist/terminal/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { t as
|
|
1
|
+
import { Nn as Decision, Rt as Instant, T as Policy, ir as Subject, j as PolicyVocabulary, rr as Principal } from "../policy-types-DzwivBgR.js";
|
|
2
|
+
import { w as Permission } from "../vocabulary-D6lPdb4Z.js";
|
|
3
|
+
import { r as PermDock } from "../permdock-D7eeLJER.js";
|
|
4
|
+
import { m as ApprovalStore } from "../types-CCpc2Dcv.js";
|
|
5
|
+
import { a as ProblemDetails, t as ApprovalHint } from "../errors-C2PXIv4c.js";
|
|
6
|
+
import { t as InstanceOptions } from "../instance-options-Omfd793B.js";
|
|
6
7
|
//#region src/terminal/types.d.ts
|
|
7
8
|
type TokenSourceName = "device" | "keychain" | "env" | "ci-oidc";
|
|
8
9
|
type TokenSource = TokenSourceName | {
|
|
@@ -55,7 +56,8 @@ type TerminalRuntime = {
|
|
|
55
56
|
readonly env?: Readonly<Record<string, string | undefined>>;
|
|
56
57
|
readonly stdoutIsTTY?: boolean;
|
|
57
58
|
readonly platform?: string;
|
|
58
|
-
|
|
59
|
+
/** The clock; defaults to the system clock. */
|
|
60
|
+
readonly now?: () => Instant;
|
|
59
61
|
readonly write?: (text: string) => void;
|
|
60
62
|
readonly exit?: (code: number) => never;
|
|
61
63
|
readonly fetch?: typeof fetch;
|
|
@@ -130,8 +132,8 @@ type ProtectContext<T = unknown, V extends PolicyVocabulary = PolicyVocabulary>
|
|
|
130
132
|
}>;
|
|
131
133
|
};
|
|
132
134
|
type TerminalPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
133
|
-
readonly
|
|
134
|
-
readonly protect: <TArgs extends readonly unknown[], TData = unknown>(permission: Permission,
|
|
135
|
+
readonly getPermDock: (options?: PermDockResolveOptions) => Promise<PermDock<V>>;
|
|
136
|
+
readonly protect: <TArgs extends readonly unknown[], TData = unknown>(permission: Permission, data?: (...args: TArgs) => TData | Promise<TData>) => (action: (context: ProtectContext<TData, V>, ...args: TArgs) => unknown) => (...args: TArgs) => Promise<unknown>;
|
|
135
137
|
readonly filterCommands: (entries: readonly CommandEntry[], options?: FilterCommandsOptions) => readonly CommandEntry[];
|
|
136
138
|
readonly format: (decision: Decision, options?: FormatOptions) => string;
|
|
137
139
|
readonly exitCode: (decision: Decision) => number;
|
|
@@ -139,7 +141,7 @@ type TerminalPermDock<V extends PolicyVocabulary = PolicyVocabulary> = {
|
|
|
139
141
|
};
|
|
140
142
|
//#endregion
|
|
141
143
|
//#region src/terminal/create.d.ts
|
|
142
|
-
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>,
|
|
144
|
+
export declare function createPermDock<TUser, TPrincipal extends Principal = Principal, V extends PolicyVocabulary = PolicyVocabulary>(policy: Policy<TUser, TPrincipal, V>, given: TerminalPermDockOptions<TUser>): TerminalPermDock<V>;
|
|
143
145
|
//#endregion
|
|
144
146
|
//#region src/terminal/exit.d.ts
|
|
145
147
|
export declare const EX_OK = 0;
|
package/dist/terminal/index.js
CHANGED
|
@@ -1,165 +1,16 @@
|
|
|
1
|
-
import { t as compact } from "../compact-
|
|
2
|
-
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-
|
|
3
|
-
import {
|
|
1
|
+
import { t as compact } from "../compact-CAf557ZB.js";
|
|
2
|
+
import { a as deniedMessage, i as approvalMessage, n as PermDockDeniedError, t as PermDockApprovalRequiredError } from "../errors-BKy0EfhN.js";
|
|
3
|
+
import { h as secondsAt } from "../time-DkWjdL98.js";
|
|
4
4
|
import { n as resourceRef } from "../resource-ref-CaS9yVPi.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { c as withApp } from "../permdock-B9JxkBwC.js";
|
|
6
|
+
import { r as isSubject } from "../subject-BGoM5o8B.js";
|
|
7
|
+
import { n as readBodyText } from "../body-text-QcXok_SI.js";
|
|
8
|
+
import { l as storedApprovalToken, s as resumeDecision } from "../helpers-DTcZOzhF.js";
|
|
7
9
|
import { t as timeoutSignal } from "../timeout-D51niuQP.js";
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
10
|
+
import { n as resolveOrNull, t as buildInstance } from "../build-instance-BMnAudHn.js";
|
|
11
|
+
import { a as refreshCredential, o as revokeCredential, s as runDeviceFlow, t as TERMINAL_TIMEOUT_MS } from "../device-BARQ8eYG.js";
|
|
12
|
+
import { i as writeCredentials, n as deleteCredentials, r as readCredentials } from "../storage-C2bWdvJH.js";
|
|
11
13
|
import { createInterface } from "node:readline";
|
|
12
|
-
import { homedir } from "node:os";
|
|
13
|
-
//#region src/terminal/device.ts
|
|
14
|
-
/** Milliseconds an authorization server request may take. */
|
|
15
|
-
const TERMINAL_TIMEOUT_MS = 1e4;
|
|
16
|
-
function isRecord$1(value) {
|
|
17
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
18
|
-
}
|
|
19
|
-
async function readJson(response) {
|
|
20
|
-
try {
|
|
21
|
-
const body = await response.json();
|
|
22
|
-
return isRecord$1(body) ? body : null;
|
|
23
|
-
} catch {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/** POSTs a form and reads a JSON object back; any network or parse failure is `null`. */
|
|
28
|
-
async function postForm(runtime, url, fields) {
|
|
29
|
-
const fetchImpl = runtime.fetch ?? fetch;
|
|
30
|
-
try {
|
|
31
|
-
return await readJson(await fetchImpl(url, {
|
|
32
|
-
method: "POST",
|
|
33
|
-
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
34
|
-
body: new URLSearchParams(fields),
|
|
35
|
-
signal: timeoutSignal(TERMINAL_TIMEOUT_MS)
|
|
36
|
-
}));
|
|
37
|
-
} catch {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async function discoverDeviceEndpoints(issuer, runtime) {
|
|
42
|
-
const fetchImpl = runtime.fetch ?? fetch;
|
|
43
|
-
const url = issuer.endsWith("/") ? `${issuer}.well-known/oauth-authorization-server` : `${issuer}/.well-known/oauth-authorization-server`;
|
|
44
|
-
try {
|
|
45
|
-
const body = await readJson(await fetchImpl(url, { signal: timeoutSignal(TERMINAL_TIMEOUT_MS) }));
|
|
46
|
-
if (body === null) return {};
|
|
47
|
-
return compact({
|
|
48
|
-
authorizationEndpoint: typeof body["device_authorization_endpoint"] === "string" ? body["device_authorization_endpoint"] : void 0,
|
|
49
|
-
tokenEndpoint: typeof body["token_endpoint"] === "string" ? body["token_endpoint"] : void 0,
|
|
50
|
-
revocationEndpoint: typeof body["revocation_endpoint"] === "string" ? body["revocation_endpoint"] : void 0
|
|
51
|
-
});
|
|
52
|
-
} catch {
|
|
53
|
-
return {};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function parseAuthorization(body) {
|
|
57
|
-
if (typeof body["device_code"] !== "string" || typeof body["user_code"] !== "string" || typeof body["verification_uri"] !== "string" || typeof body["expires_in"] !== "number") return null;
|
|
58
|
-
return compact({
|
|
59
|
-
device_code: body["device_code"],
|
|
60
|
-
user_code: body["user_code"],
|
|
61
|
-
verification_uri: body["verification_uri"],
|
|
62
|
-
verification_uri_complete: typeof body["verification_uri_complete"] === "string" ? body["verification_uri_complete"] : void 0,
|
|
63
|
-
expires_in: body["expires_in"],
|
|
64
|
-
interval: typeof body["interval"] === "number" ? body["interval"] : void 0
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
function parseToken(body, now) {
|
|
68
|
-
if (typeof body["error"] === "string") return {
|
|
69
|
-
ok: false,
|
|
70
|
-
error: body["error"]
|
|
71
|
-
};
|
|
72
|
-
if (typeof body["access_token"] !== "string") return {
|
|
73
|
-
ok: false,
|
|
74
|
-
error: "invalid-token"
|
|
75
|
-
};
|
|
76
|
-
return {
|
|
77
|
-
ok: true,
|
|
78
|
-
credential: compact({
|
|
79
|
-
access_token: body["access_token"],
|
|
80
|
-
refresh_token: typeof body["refresh_token"] === "string" ? body["refresh_token"] : void 0,
|
|
81
|
-
expires_at: typeof body["expires_in"] === "number" ? now + body["expires_in"] : void 0,
|
|
82
|
-
token_type: typeof body["token_type"] === "string" ? body["token_type"] : void 0
|
|
83
|
-
})
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
async function runDeviceFlow(device, runtime, write) {
|
|
87
|
-
const sleep = runtime.sleep ?? defaultSleep;
|
|
88
|
-
const now = runtime.now ?? (() => Math.floor(Date.now() / 1e3));
|
|
89
|
-
let authorizationEndpoint = device.authorizationEndpoint;
|
|
90
|
-
let tokenEndpoint = device.tokenEndpoint;
|
|
91
|
-
if ((authorizationEndpoint === void 0 || tokenEndpoint === void 0) && device.issuer !== void 0) {
|
|
92
|
-
const discovered = await discoverDeviceEndpoints(device.issuer, runtime);
|
|
93
|
-
authorizationEndpoint = authorizationEndpoint ?? discovered.authorizationEndpoint;
|
|
94
|
-
tokenEndpoint = tokenEndpoint ?? discovered.tokenEndpoint;
|
|
95
|
-
}
|
|
96
|
-
if (authorizationEndpoint === void 0 || tokenEndpoint === void 0) return null;
|
|
97
|
-
const startedBody = await postForm(runtime, authorizationEndpoint, {
|
|
98
|
-
client_id: device.clientId,
|
|
99
|
-
scope: device.scope ?? ""
|
|
100
|
-
});
|
|
101
|
-
const authorization = startedBody === null ? null : parseAuthorization(startedBody);
|
|
102
|
-
if (authorization === null) return null;
|
|
103
|
-
device.onPrompt?.(compact({
|
|
104
|
-
user_code: authorization.user_code,
|
|
105
|
-
verification_uri: authorization.verification_uri,
|
|
106
|
-
verification_uri_complete: authorization.verification_uri_complete
|
|
107
|
-
}));
|
|
108
|
-
write(`Visit ${authorization.verification_uri} and enter ${authorization.user_code}\n`);
|
|
109
|
-
if (authorization.verification_uri_complete !== void 0) device.open?.(authorization.verification_uri_complete);
|
|
110
|
-
let interval = authorization.interval ?? 5;
|
|
111
|
-
const deadline = now() + authorization.expires_in;
|
|
112
|
-
while (now() < deadline) {
|
|
113
|
-
await sleep(interval * 1e3);
|
|
114
|
-
const polledBody = await postForm(runtime, tokenEndpoint, {
|
|
115
|
-
grant_type: "urn:ietf:params:oauth:grant-type:device_code",
|
|
116
|
-
device_code: authorization.device_code,
|
|
117
|
-
client_id: device.clientId
|
|
118
|
-
});
|
|
119
|
-
if (polledBody === null) return null;
|
|
120
|
-
const token = parseToken(polledBody, now());
|
|
121
|
-
if (token.ok) return token.credential;
|
|
122
|
-
if (token.error === "slow_down") {
|
|
123
|
-
interval += 5;
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
if (token.error === "authorization_pending") continue;
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
async function refreshCredential(device, credential, runtime) {
|
|
132
|
-
if (credential.refresh_token === void 0) return null;
|
|
133
|
-
const now = runtime.now ?? (() => Math.floor(Date.now() / 1e3));
|
|
134
|
-
let tokenEndpoint = device.tokenEndpoint;
|
|
135
|
-
if (tokenEndpoint === void 0 && device.issuer !== void 0) tokenEndpoint = (await discoverDeviceEndpoints(device.issuer, runtime)).tokenEndpoint;
|
|
136
|
-
if (tokenEndpoint === void 0) return null;
|
|
137
|
-
const body = await postForm(runtime, tokenEndpoint, {
|
|
138
|
-
grant_type: "refresh_token",
|
|
139
|
-
refresh_token: credential.refresh_token,
|
|
140
|
-
client_id: device.clientId
|
|
141
|
-
});
|
|
142
|
-
if (body === null) return null;
|
|
143
|
-
const token = parseToken(body, now());
|
|
144
|
-
return token.ok ? token.credential : null;
|
|
145
|
-
}
|
|
146
|
-
async function revokeCredential(device, credential, runtime) {
|
|
147
|
-
if (device === void 0 || credential.refresh_token === void 0) return;
|
|
148
|
-
let revocationEndpoint = device.revocationEndpoint;
|
|
149
|
-
if (revocationEndpoint === void 0 && device.issuer !== void 0) revocationEndpoint = (await discoverDeviceEndpoints(device.issuer, runtime)).revocationEndpoint;
|
|
150
|
-
if (revocationEndpoint === void 0) return;
|
|
151
|
-
await postForm(runtime, revocationEndpoint, {
|
|
152
|
-
token: credential.refresh_token,
|
|
153
|
-
token_type_hint: "refresh_token",
|
|
154
|
-
client_id: device.clientId
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
function defaultSleep(ms) {
|
|
158
|
-
return new Promise((resolve) => {
|
|
159
|
-
setTimeout(resolve, ms);
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
//#endregion
|
|
163
14
|
//#region src/terminal/exit.ts
|
|
164
15
|
const EX_OK = 0;
|
|
165
16
|
const EX_USAGE = 64;
|
|
@@ -273,131 +124,6 @@ function formatDecision(decision, options = {}) {
|
|
|
273
124
|
return `${details.detail}\n`;
|
|
274
125
|
}
|
|
275
126
|
//#endregion
|
|
276
|
-
//#region src/terminal/storage.ts
|
|
277
|
-
const FILE_MODE = 384;
|
|
278
|
-
const DIR_MODE = 448;
|
|
279
|
-
const GROUP_OR_WORLD = 63;
|
|
280
|
-
function credentialsPath(service, runtime) {
|
|
281
|
-
if (runtime.configDir !== void 0) return path.join(runtime.configDir, "credentials.json");
|
|
282
|
-
const home = runtime.homedir ?? homedir;
|
|
283
|
-
const env = runtime.env ?? process.env;
|
|
284
|
-
if ((runtime.platform ?? process.platform) === "win32") {
|
|
285
|
-
const appData = env["APPDATA"] ?? path.join(home(), "AppData", "Roaming");
|
|
286
|
-
return path.join(appData, service, "credentials.json");
|
|
287
|
-
}
|
|
288
|
-
const xdg = env["XDG_CONFIG_HOME"] ?? path.join(home(), ".config");
|
|
289
|
-
return path.join(xdg, service, "credentials.json");
|
|
290
|
-
}
|
|
291
|
-
function isRecord(value) {
|
|
292
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
293
|
-
}
|
|
294
|
-
function parseCredential(value) {
|
|
295
|
-
if (!isRecord(value) || typeof value["access_token"] !== "string") return null;
|
|
296
|
-
return compact({
|
|
297
|
-
access_token: value["access_token"],
|
|
298
|
-
refresh_token: typeof value["refresh_token"] === "string" ? value["refresh_token"] : void 0,
|
|
299
|
-
expires_at: typeof value["expires_at"] === "number" ? value["expires_at"] : void 0,
|
|
300
|
-
token_type: typeof value["token_type"] === "string" ? value["token_type"] : void 0
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
function keyringEntry(storage, profile) {
|
|
304
|
-
if (storage.keyring === void 0) return null;
|
|
305
|
-
try {
|
|
306
|
-
return new storage.keyring(storage.service, profile);
|
|
307
|
-
} catch {
|
|
308
|
-
return null;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
function readKeyring(storage, profile) {
|
|
312
|
-
const entry = keyringEntry(storage, profile);
|
|
313
|
-
if (entry === null) return null;
|
|
314
|
-
try {
|
|
315
|
-
const raw = entry.getPassword();
|
|
316
|
-
return typeof raw === "string" ? parseCredential(JSON.parse(raw)) : null;
|
|
317
|
-
} catch {
|
|
318
|
-
return null;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
function readCredentials(storage, profile, runtime) {
|
|
322
|
-
return readKeyring(storage, profile) ?? readFile(storage.service, profile, runtime);
|
|
323
|
-
}
|
|
324
|
-
function readFile(service, profile, runtime) {
|
|
325
|
-
const file = credentialsPath(service, runtime);
|
|
326
|
-
let raw;
|
|
327
|
-
try {
|
|
328
|
-
const stat = statSync(file);
|
|
329
|
-
if ((runtime.platform ?? process.platform) !== "win32" && (stat.mode & GROUP_OR_WORLD) !== 0) return null;
|
|
330
|
-
raw = readFileSync(file, "utf8");
|
|
331
|
-
} catch {
|
|
332
|
-
return null;
|
|
333
|
-
}
|
|
334
|
-
try {
|
|
335
|
-
const parsed = JSON.parse(raw);
|
|
336
|
-
if (!isRecord(parsed) || !isRecord(parsed["profiles"])) return null;
|
|
337
|
-
return parseCredential(parsed["profiles"][profile]);
|
|
338
|
-
} catch {
|
|
339
|
-
return null;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
/** The OS keychain when `storage.keyring` is set and works; otherwise the mode-0600 file. */
|
|
343
|
-
function writeCredentials(storage, profile, credential, runtime) {
|
|
344
|
-
const entry = keyringEntry(storage, profile);
|
|
345
|
-
if (entry !== null) try {
|
|
346
|
-
entry.setPassword(JSON.stringify(credential));
|
|
347
|
-
deleteFile(storage.service, profile, runtime);
|
|
348
|
-
return;
|
|
349
|
-
} catch {}
|
|
350
|
-
writeFile(storage.service, profile, credential, runtime);
|
|
351
|
-
}
|
|
352
|
-
function writeFile(service, profile, credential, runtime) {
|
|
353
|
-
const file = credentialsPath(service, runtime);
|
|
354
|
-
mkdirSync(path.dirname(file), {
|
|
355
|
-
recursive: true,
|
|
356
|
-
mode: DIR_MODE
|
|
357
|
-
});
|
|
358
|
-
let profiles = {};
|
|
359
|
-
try {
|
|
360
|
-
const existing = JSON.parse(readFileSync(file, "utf8"));
|
|
361
|
-
if (isRecord(existing) && isRecord(existing["profiles"])) profiles = existing["profiles"];
|
|
362
|
-
} catch {
|
|
363
|
-
profiles = {};
|
|
364
|
-
}
|
|
365
|
-
profiles[profile] = credential;
|
|
366
|
-
writeFileSync(file, `${JSON.stringify({ profiles }, null, 2)}\n`, {
|
|
367
|
-
encoding: "utf8",
|
|
368
|
-
mode: FILE_MODE
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
function deleteCredentials(storage, profile, runtime) {
|
|
372
|
-
const entry = keyringEntry(storage, profile);
|
|
373
|
-
if (entry !== null) try {
|
|
374
|
-
entry.deletePassword();
|
|
375
|
-
} catch {}
|
|
376
|
-
deleteFile(storage.service, profile, runtime);
|
|
377
|
-
}
|
|
378
|
-
function deleteFile(service, profile, runtime) {
|
|
379
|
-
const file = credentialsPath(service, runtime);
|
|
380
|
-
let parsed;
|
|
381
|
-
try {
|
|
382
|
-
parsed = JSON.parse(readFileSync(file, "utf8"));
|
|
383
|
-
} catch {
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
386
|
-
if (!isRecord(parsed) || !isRecord(parsed["profiles"])) return;
|
|
387
|
-
const profiles = {};
|
|
388
|
-
for (const key of Object.keys(parsed["profiles"])) if (key !== profile) profiles[key] = parsed["profiles"][key];
|
|
389
|
-
if (Object.keys(profiles).length === 0) {
|
|
390
|
-
try {
|
|
391
|
-
unlinkSync(file);
|
|
392
|
-
} catch {}
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
writeFileSync(file, `${JSON.stringify({ profiles }, null, 2)}\n`, {
|
|
396
|
-
encoding: "utf8",
|
|
397
|
-
mode: FILE_MODE
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
//#endregion
|
|
401
127
|
//#region src/terminal/token.ts
|
|
402
128
|
const JWT_PART = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/u;
|
|
403
129
|
function looksLikeJwt(value) {
|
|
@@ -437,10 +163,12 @@ async function fromCiOidc(runtime, source) {
|
|
|
437
163
|
if (typeof env["ACTIONS_ID_TOKEN_REQUEST_URL"] === "string" && typeof env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"] === "string") try {
|
|
438
164
|
const url = new URL(env["ACTIONS_ID_TOKEN_REQUEST_URL"]);
|
|
439
165
|
if (audience !== void 0) url.searchParams.set("audience", audience);
|
|
440
|
-
const
|
|
166
|
+
const response = await fetchImpl(url, {
|
|
441
167
|
headers: { Authorization: `Bearer ${env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"]}` },
|
|
442
168
|
signal: timeoutSignal(TERMINAL_TIMEOUT_MS)
|
|
443
|
-
})
|
|
169
|
+
});
|
|
170
|
+
const text = await readBodyText(response);
|
|
171
|
+
const body = text.ok ? JSON.parse(text.text) : null;
|
|
444
172
|
if (body !== null && typeof body === "object" && "value" in body && typeof body.value === "string") return body.value;
|
|
445
173
|
} catch {
|
|
446
174
|
return null;
|
|
@@ -449,7 +177,7 @@ async function fromCiOidc(runtime, source) {
|
|
|
449
177
|
}
|
|
450
178
|
async function resolveToken(sources, options) {
|
|
451
179
|
const walk = options.force === void 0 ? sources : [options.force];
|
|
452
|
-
const now =
|
|
180
|
+
const now = () => secondsAt(options.runtime.now?.());
|
|
453
181
|
for (const source of walk) {
|
|
454
182
|
const name = sourceName(source);
|
|
455
183
|
switch (name) {
|
|
@@ -580,7 +308,8 @@ const defaultTyped = (input) => {
|
|
|
580
308
|
});
|
|
581
309
|
});
|
|
582
310
|
};
|
|
583
|
-
function createPermDock(policy,
|
|
311
|
+
function createPermDock(policy, given) {
|
|
312
|
+
const options = withApp(policy, given);
|
|
584
313
|
const write = writeOf(options);
|
|
585
314
|
const exit = options.runtime?.exit ?? defaultExit;
|
|
586
315
|
const runtime = compact({
|
|
@@ -606,32 +335,23 @@ function createPermDock(policy, options) {
|
|
|
606
335
|
token: tokenFor(profile, resolveOptions.source),
|
|
607
336
|
profile
|
|
608
337
|
};
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
}
|
|
622
|
-
actor = void 0;
|
|
623
|
-
delegation = void 0;
|
|
624
|
-
}
|
|
625
|
-
const built = await createPermDock$1(policy, user, compact({
|
|
626
|
-
tenant: options.tenant,
|
|
627
|
-
actor,
|
|
628
|
-
delegation,
|
|
629
|
-
...instanceOptions(options)
|
|
630
|
-
}));
|
|
338
|
+
const user = await resolveOrNull(() => options.subject(context));
|
|
339
|
+
const resolveActor = options.actor;
|
|
340
|
+
const resolved = resolveActor === void 0 ? null : await resolveOrNull(async () => actorFromResolved(await resolveActor(context)));
|
|
341
|
+
const { permdock: built } = await buildInstance({
|
|
342
|
+
policy,
|
|
343
|
+
user,
|
|
344
|
+
sources: options,
|
|
345
|
+
scope: {
|
|
346
|
+
tenant: options.tenant,
|
|
347
|
+
actor: resolved?.actor,
|
|
348
|
+
delegation: resolved?.delegation
|
|
349
|
+
}
|
|
350
|
+
});
|
|
631
351
|
last = built;
|
|
632
352
|
return built;
|
|
633
353
|
};
|
|
634
|
-
const
|
|
354
|
+
const getPermDock = (resolveOptions = {}) => {
|
|
635
355
|
if (resolveOptions.refresh === true || cached === void 0) cached = resolve(resolveOptions);
|
|
636
356
|
return cached;
|
|
637
357
|
};
|
|
@@ -653,7 +373,7 @@ function createPermDock(policy, options) {
|
|
|
653
373
|
let decide;
|
|
654
374
|
let first;
|
|
655
375
|
try {
|
|
656
|
-
instance = await
|
|
376
|
+
instance = await getPermDock();
|
|
657
377
|
if (load !== void 0) {
|
|
658
378
|
data = await load(...args);
|
|
659
379
|
if (permission.kind === "instance" && (data === null || data === void 0)) {
|
|
@@ -666,10 +386,10 @@ function createPermDock(policy, options) {
|
|
|
666
386
|
}
|
|
667
387
|
decide = instance.decide;
|
|
668
388
|
first = decide(permission, data, dryRun ? {
|
|
669
|
-
|
|
389
|
+
call: "simulate",
|
|
670
390
|
adapter: "terminal"
|
|
671
391
|
} : {
|
|
672
|
-
|
|
392
|
+
call: "adapter",
|
|
673
393
|
adapter: "terminal"
|
|
674
394
|
});
|
|
675
395
|
} catch {
|
|
@@ -726,7 +446,7 @@ function createPermDock(policy, options) {
|
|
|
726
446
|
return exit(77);
|
|
727
447
|
}
|
|
728
448
|
const again = decide(permission, data, compact({
|
|
729
|
-
|
|
449
|
+
call: "adapter",
|
|
730
450
|
adapter: "terminal"
|
|
731
451
|
}));
|
|
732
452
|
if (again.outcome === "denied") {
|
|
@@ -821,7 +541,7 @@ function createPermDock(policy, options) {
|
|
|
821
541
|
last = void 0;
|
|
822
542
|
};
|
|
823
543
|
return {
|
|
824
|
-
|
|
544
|
+
getPermDock,
|
|
825
545
|
protect,
|
|
826
546
|
filterCommands,
|
|
827
547
|
format,
|