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,7 +1,12 @@
|
|
|
1
|
-
import { n as isReadonlyArray, t as compact } from "./compact-
|
|
1
|
+
import { n as isReadonlyArray, r as isRecord, t as compact } from "./compact-CAf557ZB.js";
|
|
2
2
|
import { n as freezeDeep } from "./freeze-CrU8nQeX.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { i as readAppData } from "./app-data-MuyzVqX8.js";
|
|
4
|
+
import { d as isoNow } from "./time-DkWjdL98.js";
|
|
5
|
+
import { t as canonicalJson } from "./canonical-json-BC8_nMTw.js";
|
|
6
|
+
import { n as sha256, r as sha256Digest } from "./sha256-D9ihqmvd.js";
|
|
7
|
+
import { d as membershipEvent, f as memoryDecisionSink } from "./sink-BEZSlMS_.js";
|
|
8
|
+
import { n as readBodyText, t as MAX_BODY_BYTES } from "./body-text-QcXok_SI.js";
|
|
9
|
+
import { t as readClaim } from "./claims-map-7oQ3ue4X.js";
|
|
5
10
|
//#region src/scim/auth.ts
|
|
6
11
|
function hexToBytes(hex) {
|
|
7
12
|
if (hex.length % 2 !== 0) return;
|
|
@@ -33,9 +38,12 @@ async function matchStaticToken(tenant, token, options) {
|
|
|
33
38
|
}
|
|
34
39
|
return timingSafeEqual(actual, expected);
|
|
35
40
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
/** The tenant a JWT names: `claims.tenant` when set, else `tenant`, then `tid`. */
|
|
42
|
+
function tenantClaim(claims, path) {
|
|
43
|
+
for (const candidate of path === void 0 ? ["tenant", "tid"] : [path]) {
|
|
44
|
+
const value = readClaim(claims, candidate);
|
|
45
|
+
if (typeof value === "string" && value !== "") return value;
|
|
46
|
+
}
|
|
39
47
|
}
|
|
40
48
|
async function authenticateScim(input) {
|
|
41
49
|
const bearer = bearerToken(input.request);
|
|
@@ -58,7 +66,7 @@ async function authenticateScim(input) {
|
|
|
58
66
|
ok: false,
|
|
59
67
|
status: 401
|
|
60
68
|
};
|
|
61
|
-
if (tenantClaim(verified.claims) !== input.tenant) return {
|
|
69
|
+
if (tenantClaim(verified.claims, input.claims?.tenant) !== input.tenant) return {
|
|
62
70
|
ok: false,
|
|
63
71
|
status: 403
|
|
64
72
|
};
|
|
@@ -84,7 +92,10 @@ const GROUP_SCHEMA = "urn:ietf:params:scim:schemas:core:2.0:Group";
|
|
|
84
92
|
const LIST_SCHEMA = "urn:ietf:params:scim:api:messages:2.0:ListResponse";
|
|
85
93
|
const ERROR_SCHEMA = "urn:ietf:params:scim:api:messages:2.0:Error";
|
|
86
94
|
const PATCH_SCHEMA = "urn:ietf:params:scim:api:messages:2.0:PatchOp";
|
|
87
|
-
|
|
95
|
+
/** The RFC 7643 section 3.3 Group extension that carries PermDock roles. */
|
|
96
|
+
const ROLES_EXTENSION = "urn:ietf:params:scim:schemas:extension:permdock:2.0:Group";
|
|
97
|
+
/** The extension that carries the application's own data (`x`) on a User or a Group. */
|
|
98
|
+
const APP_DATA_EXTENSION = "urn:ietf:params:scim:schemas:extension:permdock:2.0:AppData";
|
|
88
99
|
var DirectoryUniquenessError = class extends Error {
|
|
89
100
|
name = "DirectoryUniquenessError";
|
|
90
101
|
code = "uniqueness";
|
|
@@ -99,11 +110,16 @@ var DirectoryNotFoundError = class extends Error {
|
|
|
99
110
|
super(message);
|
|
100
111
|
}
|
|
101
112
|
};
|
|
113
|
+
function isNamedError(error, name, code) {
|
|
114
|
+
return error instanceof Error && error.name === name && Reflect.get(error, "code") === code;
|
|
115
|
+
}
|
|
116
|
+
/** Matches by `name` and `code`, so an error from another copy of the module still maps. */
|
|
102
117
|
function isDirectoryUniquenessError(error) {
|
|
103
|
-
return error
|
|
118
|
+
return isNamedError(error, "DirectoryUniquenessError", "uniqueness");
|
|
104
119
|
}
|
|
120
|
+
/** Matches by `name` and `code`, so an error from another copy of the module still maps. */
|
|
105
121
|
function isDirectoryNotFoundError(error) {
|
|
106
|
-
return error
|
|
122
|
+
return isNamedError(error, "DirectoryNotFoundError", "not-found");
|
|
107
123
|
}
|
|
108
124
|
//#endregion
|
|
109
125
|
//#region src/scim/discovery.ts
|
|
@@ -123,7 +139,7 @@ function serviceProviderConfig() {
|
|
|
123
139
|
},
|
|
124
140
|
changePassword: { supported: false },
|
|
125
141
|
sort: { supported: false },
|
|
126
|
-
etag: { supported:
|
|
142
|
+
etag: { supported: true },
|
|
127
143
|
pagination: {
|
|
128
144
|
cursor: true,
|
|
129
145
|
index: true
|
|
@@ -144,7 +160,10 @@ function resourceTypes() {
|
|
|
144
160
|
name: "User",
|
|
145
161
|
endpoint: "/Users",
|
|
146
162
|
schema: USER_SCHEMA,
|
|
147
|
-
schemaExtensions: [
|
|
163
|
+
schemaExtensions: [{
|
|
164
|
+
schema: APP_DATA_EXTENSION,
|
|
165
|
+
required: false
|
|
166
|
+
}]
|
|
148
167
|
}, {
|
|
149
168
|
schemas: ["urn:ietf:params:scim:schemas:core:2.0:ResourceType"],
|
|
150
169
|
id: "Group",
|
|
@@ -154,6 +173,9 @@ function resourceTypes() {
|
|
|
154
173
|
schemaExtensions: [{
|
|
155
174
|
schema: ROLES_EXTENSION,
|
|
156
175
|
required: false
|
|
176
|
+
}, {
|
|
177
|
+
schema: APP_DATA_EXTENSION,
|
|
178
|
+
required: false
|
|
157
179
|
}]
|
|
158
180
|
}];
|
|
159
181
|
}
|
|
@@ -208,6 +230,12 @@ function schemas() {
|
|
|
208
230
|
id: ROLES_EXTENSION,
|
|
209
231
|
name: "PermDockRoles",
|
|
210
232
|
attributes: [attribute("roles", "string", { multiValued: true })]
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
schemas: [SCHEMA_SCHEMA],
|
|
236
|
+
id: APP_DATA_EXTENSION,
|
|
237
|
+
name: "PermDockAppData",
|
|
238
|
+
attributes: [attribute("x", "complex")]
|
|
211
239
|
}
|
|
212
240
|
];
|
|
213
241
|
}
|
|
@@ -445,13 +473,21 @@ function filterSupported(filter) {
|
|
|
445
473
|
}
|
|
446
474
|
//#endregion
|
|
447
475
|
//#region src/scim/body.ts
|
|
448
|
-
|
|
449
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
450
|
-
}
|
|
476
|
+
/** The parsed body; `undefined` for an empty or unreadable one. Invalid JSON throws a `SyntaxError`. */
|
|
451
477
|
async function readJson(request) {
|
|
452
|
-
const
|
|
453
|
-
if (
|
|
454
|
-
|
|
478
|
+
const read = await readBodyText(request);
|
|
479
|
+
if (!read.ok) return read.cause === "too-large" ? { tooLarge: true } : {
|
|
480
|
+
tooLarge: false,
|
|
481
|
+
body: void 0
|
|
482
|
+
};
|
|
483
|
+
if (read.text === "") return {
|
|
484
|
+
tooLarge: false,
|
|
485
|
+
body: void 0
|
|
486
|
+
};
|
|
487
|
+
return {
|
|
488
|
+
tooLarge: false,
|
|
489
|
+
body: JSON.parse(read.text)
|
|
490
|
+
};
|
|
455
491
|
}
|
|
456
492
|
function schemasOk(body, required) {
|
|
457
493
|
const listed = body["schemas"];
|
|
@@ -460,13 +496,18 @@ function schemasOk(body, required) {
|
|
|
460
496
|
}
|
|
461
497
|
function readRoles(body) {
|
|
462
498
|
const extension = body[ROLES_EXTENSION];
|
|
463
|
-
if (!isRecord
|
|
499
|
+
if (!isRecord(extension) || !Array.isArray(extension["roles"])) return;
|
|
464
500
|
return extension["roles"].filter((item) => typeof item === "string");
|
|
465
501
|
}
|
|
502
|
+
/** `x` from the `AppData` extension; a value that is not a plain JSON object is dropped. */
|
|
503
|
+
function readX(body) {
|
|
504
|
+
const extension = body[APP_DATA_EXTENSION];
|
|
505
|
+
return isRecord(extension) && extension["x"] !== void 0 ? readAppData(void 0, extension["x"]) : void 0;
|
|
506
|
+
}
|
|
466
507
|
function userFromBody(body, id) {
|
|
467
508
|
if (typeof body["userName"] !== "string" || body["userName"] === "") return;
|
|
468
509
|
const emails = Array.isArray(body["emails"]) ? body["emails"].flatMap((item) => {
|
|
469
|
-
if (!isRecord
|
|
510
|
+
if (!isRecord(item) || typeof item["value"] !== "string") return [];
|
|
470
511
|
return [compact({
|
|
471
512
|
value: item["value"],
|
|
472
513
|
primary: typeof item["primary"] === "boolean" ? item["primary"] : void 0,
|
|
@@ -480,6 +521,7 @@ function userFromBody(body, id) {
|
|
|
480
521
|
externalId: typeof body["externalId"] === "string" ? body["externalId"] : void 0,
|
|
481
522
|
active,
|
|
482
523
|
emails,
|
|
524
|
+
x: readX(body),
|
|
483
525
|
meta: {
|
|
484
526
|
created: "",
|
|
485
527
|
lastModified: ""
|
|
@@ -489,7 +531,7 @@ function userFromBody(body, id) {
|
|
|
489
531
|
function groupFromBody(body, id, fallbackRoles) {
|
|
490
532
|
if (typeof body["displayName"] !== "string" || body["displayName"] === "") return;
|
|
491
533
|
const members = Array.isArray(body["members"]) ? body["members"].flatMap((item) => {
|
|
492
|
-
if (!isRecord
|
|
534
|
+
if (!isRecord(item) || typeof item["value"] !== "string") return [];
|
|
493
535
|
return [{ value: item["value"] }];
|
|
494
536
|
}) : [];
|
|
495
537
|
return compact({
|
|
@@ -498,6 +540,7 @@ function groupFromBody(body, id, fallbackRoles) {
|
|
|
498
540
|
externalId: typeof body["externalId"] === "string" ? body["externalId"] : void 0,
|
|
499
541
|
members,
|
|
500
542
|
roles: readRoles(body) ?? fallbackRoles,
|
|
543
|
+
x: readX(body),
|
|
501
544
|
meta: {
|
|
502
545
|
created: "",
|
|
503
546
|
lastModified: ""
|
|
@@ -550,7 +593,7 @@ function membershipEventsForGroup(input) {
|
|
|
550
593
|
}
|
|
551
594
|
async function emitDirectory(options, event, userIds, extra = [], known = []) {
|
|
552
595
|
const kind = event.resource.type === "User" && event.active === false ? "session-revoked" : "changed";
|
|
553
|
-
const sink = options.sink ??
|
|
596
|
+
const sink = options.sink ?? memoryDecisionSink();
|
|
554
597
|
try {
|
|
555
598
|
await sink.write([event, ...extra]);
|
|
556
599
|
} catch {}
|
|
@@ -570,7 +613,7 @@ async function principalIds(options, tenant, userIds, known) {
|
|
|
570
613
|
const hit = known.find((user) => user.id === id);
|
|
571
614
|
if (hit !== void 0) return hit;
|
|
572
615
|
try {
|
|
573
|
-
return await options.
|
|
616
|
+
return await options.directory.getUser(tenant, id);
|
|
574
617
|
} catch {
|
|
575
618
|
return null;
|
|
576
619
|
}
|
|
@@ -599,7 +642,7 @@ async function publish(options, kind, tenant, userIds, known) {
|
|
|
599
642
|
function directoryEvent(input) {
|
|
600
643
|
return compact({
|
|
601
644
|
type: "directory",
|
|
602
|
-
at: (
|
|
645
|
+
at: isoNow(),
|
|
603
646
|
source: "scim",
|
|
604
647
|
operation: input.operation,
|
|
605
648
|
tenant: input.tenant,
|
|
@@ -620,9 +663,6 @@ function groupRolesFor(groupRoles, id) {
|
|
|
620
663
|
//#endregion
|
|
621
664
|
//#region src/scim/patch.ts
|
|
622
665
|
const FILTER_PATH = /^(?<attribute>[A-Za-z0-9._]+)\[(?<field>[A-Za-z0-9._]+)\s+eq\s+"(?<value>[^"]+)"\](?<rest>\.[A-Za-z0-9._]+)?$/u;
|
|
623
|
-
function isRecord(value) {
|
|
624
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
625
|
-
}
|
|
626
666
|
function coerceActive(value) {
|
|
627
667
|
if (typeof value === "boolean") return value;
|
|
628
668
|
if (typeof value === "string") {
|
|
@@ -632,7 +672,7 @@ function coerceActive(value) {
|
|
|
632
672
|
}
|
|
633
673
|
}
|
|
634
674
|
function rolesPath(path) {
|
|
635
|
-
return path === "roles" || path === `urn:
|
|
675
|
+
return path === "roles" || path === `urn:ietf:params:scim:schemas:extension:permdock:2.0:Group:roles` || path === `urn:ietf:params:scim:schemas:extension:permdock:2.0:Group.roles`;
|
|
636
676
|
}
|
|
637
677
|
function opName(value) {
|
|
638
678
|
if (typeof value !== "string") return;
|
|
@@ -655,7 +695,7 @@ function normalizePatchOps(ops) {
|
|
|
655
695
|
continue;
|
|
656
696
|
}
|
|
657
697
|
for (const [key, value] of Object.entries(raw["value"])) {
|
|
658
|
-
if (key === "urn:
|
|
698
|
+
if (key === "urn:ietf:params:scim:schemas:extension:permdock:2.0:Group" && isRecord(value)) {
|
|
659
699
|
next.push({
|
|
660
700
|
op,
|
|
661
701
|
path: "roles",
|
|
@@ -742,25 +782,63 @@ function scimResponse(status, body, extra) {
|
|
|
742
782
|
}
|
|
743
783
|
});
|
|
744
784
|
}
|
|
745
|
-
|
|
746
|
-
|
|
785
|
+
/** RFC 7644 section 3.12: `scimType` is defined for `400` and `409` only, so other statuses omit it. */
|
|
786
|
+
function scimError(status, scimType, detail, extra) {
|
|
787
|
+
return scimResponse(status, compact({
|
|
747
788
|
schemas: [ERROR_SCHEMA],
|
|
748
789
|
status: String(status),
|
|
749
|
-
scimType,
|
|
790
|
+
scimType: status === 400 || status === 409 ? scimType : void 0,
|
|
750
791
|
detail
|
|
751
|
-
});
|
|
792
|
+
}), extra);
|
|
752
793
|
}
|
|
753
794
|
function unauthorized() {
|
|
754
|
-
return
|
|
755
|
-
status: 401,
|
|
756
|
-
headers: { "www-authenticate": "Bearer" }
|
|
757
|
-
});
|
|
795
|
+
return scimError(401, "", "authentication required", { "www-authenticate": "Bearer" });
|
|
758
796
|
}
|
|
759
797
|
function forbidden() {
|
|
760
|
-
return
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
798
|
+
return scimError(403, "", "the credential may not provision this tenant", { "www-authenticate": "Bearer error=\"insufficient_scope\"" });
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* RFC 7644 section 3.14 `meta.version`: a weak entity tag over the
|
|
802
|
+
* resource as rendered, `meta.location` excluded so every URL agrees.
|
|
803
|
+
*/
|
|
804
|
+
function withVersion(resource, meta) {
|
|
805
|
+
const { location: _location, ...stable } = meta;
|
|
806
|
+
const version = `W/"${sha256Digest(canonicalJson({
|
|
807
|
+
...resource,
|
|
808
|
+
meta: stable
|
|
809
|
+
}))}"`;
|
|
810
|
+
return {
|
|
811
|
+
...resource,
|
|
812
|
+
meta: {
|
|
813
|
+
...meta,
|
|
814
|
+
version
|
|
815
|
+
}
|
|
816
|
+
};
|
|
817
|
+
}
|
|
818
|
+
/** The `meta.version` a rendered resource carries, for `ETag`. */
|
|
819
|
+
function versionOf(rendered) {
|
|
820
|
+
const meta = rendered["meta"];
|
|
821
|
+
return isRecord(meta) && typeof meta["version"] === "string" ? meta["version"] : "";
|
|
822
|
+
}
|
|
823
|
+
function entityTags(field) {
|
|
824
|
+
return field.split(",").map((tag) => tag.trim().replace(/^W\//u, "")).filter((tag) => tag !== "");
|
|
825
|
+
}
|
|
826
|
+
/** RFC 9110 section 13.1.1 `If-Match` against a weak `meta.version`: `true` when the request may proceed. */
|
|
827
|
+
function ifMatchHolds(request, version) {
|
|
828
|
+
const field = request.headers.get("if-match");
|
|
829
|
+
if (field === null) return true;
|
|
830
|
+
const tags = entityTags(field);
|
|
831
|
+
return tags.includes("*") || tags.includes(version.replace(/^W\//u, ""));
|
|
832
|
+
}
|
|
833
|
+
/** RFC 9110 section 13.1.2 `If-None-Match`: `true` when the client holds `version`. */
|
|
834
|
+
function ifNoneMatchHolds(request, version) {
|
|
835
|
+
const field = request.headers.get("if-none-match");
|
|
836
|
+
if (field === null) return false;
|
|
837
|
+
const tags = entityTags(field);
|
|
838
|
+
return tags.includes("*") || tags.includes(version.replace(/^W\//u, ""));
|
|
839
|
+
}
|
|
840
|
+
function preconditionFailed() {
|
|
841
|
+
return scimError(412, "", "the resource changed since meta.version");
|
|
764
842
|
}
|
|
765
843
|
function mapStoreError(error) {
|
|
766
844
|
if (isDirectoryUniquenessError(error)) return scimError(409, "uniqueness", error.message);
|
|
@@ -777,37 +855,53 @@ function listBody(result, render) {
|
|
|
777
855
|
Resources: result.Resources.map(render)
|
|
778
856
|
});
|
|
779
857
|
}
|
|
858
|
+
/** The `AppData` extension for `x`, and the schema URN it adds. */
|
|
859
|
+
function appData(x) {
|
|
860
|
+
return x === void 0 ? {
|
|
861
|
+
schemas: [],
|
|
862
|
+
body: {}
|
|
863
|
+
} : {
|
|
864
|
+
schemas: [APP_DATA_EXTENSION],
|
|
865
|
+
body: { [APP_DATA_EXTENSION]: { x } }
|
|
866
|
+
};
|
|
867
|
+
}
|
|
780
868
|
function renderUser(user, location) {
|
|
781
|
-
|
|
782
|
-
|
|
869
|
+
const data = appData(user.x);
|
|
870
|
+
return withVersion(compact({
|
|
871
|
+
schemas: [USER_SCHEMA, ...data.schemas],
|
|
783
872
|
id: user.id,
|
|
784
873
|
externalId: user.externalId,
|
|
785
874
|
userName: user.userName,
|
|
786
875
|
active: user.active,
|
|
787
876
|
emails: user.emails,
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
877
|
+
...data.body
|
|
878
|
+
}), {
|
|
879
|
+
resourceType: "User",
|
|
880
|
+
created: user.meta.created,
|
|
881
|
+
lastModified: user.meta.lastModified,
|
|
882
|
+
location
|
|
794
883
|
});
|
|
795
884
|
}
|
|
796
885
|
function renderGroup(group, location) {
|
|
797
886
|
const extension = group.roles === void 0 ? void 0 : { [ROLES_EXTENSION]: { roles: group.roles } };
|
|
798
|
-
|
|
799
|
-
|
|
887
|
+
const data = appData(group.x);
|
|
888
|
+
return withVersion(compact({
|
|
889
|
+
schemas: [
|
|
890
|
+
GROUP_SCHEMA,
|
|
891
|
+
...group.roles === void 0 ? [] : [ROLES_EXTENSION],
|
|
892
|
+
...data.schemas
|
|
893
|
+
],
|
|
800
894
|
id: group.id,
|
|
801
895
|
externalId: group.externalId,
|
|
802
896
|
displayName: group.displayName,
|
|
803
897
|
members: group.members,
|
|
804
898
|
...extension,
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
899
|
+
...data.body
|
|
900
|
+
}), {
|
|
901
|
+
resourceType: "Group",
|
|
902
|
+
created: group.meta.created,
|
|
903
|
+
lastModified: group.meta.lastModified,
|
|
904
|
+
location
|
|
811
905
|
});
|
|
812
906
|
}
|
|
813
907
|
//#endregion
|
|
@@ -885,6 +979,20 @@ function pageFrom(url) {
|
|
|
885
979
|
}
|
|
886
980
|
//#endregion
|
|
887
981
|
//#region src/scim/handler.ts
|
|
982
|
+
/** One resource with its `meta.version` as the `ETag`. */
|
|
983
|
+
function resourceResponse(status, rendered, location) {
|
|
984
|
+
return scimResponse(status, rendered, compact({
|
|
985
|
+
ETag: versionOf(rendered),
|
|
986
|
+
location
|
|
987
|
+
}));
|
|
988
|
+
}
|
|
989
|
+
function renderedOf(request, resource) {
|
|
990
|
+
return "userName" in resource ? renderUser(resource, locationOf(request, "Users", resource.id)) : renderGroup(resource, locationOf(request, "Groups", resource.id));
|
|
991
|
+
}
|
|
992
|
+
/** `false` when `If-Match` names a version other than `current`'s; a missing resource passes to the store. */
|
|
993
|
+
function matches(request, current) {
|
|
994
|
+
return current === null || ifMatchHolds(request, versionOf(renderedOf(request, current)));
|
|
995
|
+
}
|
|
888
996
|
function scimHandler(options) {
|
|
889
997
|
if (options.token === void 0 && options.verifier === void 0) throw new Error("scimHandler requires token or verifier");
|
|
890
998
|
if (options.verifier !== void 0 && options.audience === void 0) throw new Error("scimHandler requires audience with a verifier");
|
|
@@ -904,7 +1012,8 @@ function scimHandler(options) {
|
|
|
904
1012
|
tenant,
|
|
905
1013
|
audience: options.audience,
|
|
906
1014
|
token: options.token,
|
|
907
|
-
verifier: options.verifier
|
|
1015
|
+
verifier: options.verifier,
|
|
1016
|
+
claims: options.claims
|
|
908
1017
|
}));
|
|
909
1018
|
if (!auth.ok) return auth.status === 403 ? forbidden() : unauthorized();
|
|
910
1019
|
try {
|
|
@@ -918,23 +1027,24 @@ function scimHandler(options) {
|
|
|
918
1027
|
if (rawFilter !== null && rawFilter !== "" && filter === void 0) return scimError(400, "invalidFilter", "unsupported filter");
|
|
919
1028
|
if (filter !== void 0 && !filterSupported(filter)) return scimError(400, "invalidFilter", "unsupported filter");
|
|
920
1029
|
const page = pageFrom(url);
|
|
921
|
-
if (route.kind === "Users") return scimResponse(200, listBody(await options.
|
|
922
|
-
return scimResponse(200, listBody(await options.
|
|
1030
|
+
if (route.kind === "Users") return scimResponse(200, listBody(await options.directory.findUsers(tenant, filter, page), (user) => renderUser(user, locationOf(request, "Users", user.id))));
|
|
1031
|
+
return scimResponse(200, listBody(await options.directory.findGroups(tenant, filter, page), (group) => renderGroup(group, locationOf(request, "Groups", group.id))));
|
|
923
1032
|
}
|
|
924
1033
|
if (request.method === "GET" && route.id !== void 0) {
|
|
925
1034
|
if (route.kind === "Users") {
|
|
926
|
-
const user = await options.
|
|
1035
|
+
const user = await options.directory.getUser(tenant, route.id);
|
|
927
1036
|
if (user === null) return scimError(404, "invalidValue", "resource not found");
|
|
928
|
-
return
|
|
1037
|
+
return readResponse(request, renderedOf(request, user));
|
|
929
1038
|
}
|
|
930
|
-
const group = await options.
|
|
1039
|
+
const group = await options.directory.getGroup(tenant, route.id);
|
|
931
1040
|
if (group === null) return scimError(404, "invalidValue", "resource not found");
|
|
932
|
-
return
|
|
1041
|
+
return readResponse(request, renderedOf(request, group));
|
|
933
1042
|
}
|
|
934
1043
|
if (request.method === "DELETE" && route.id !== void 0) {
|
|
935
1044
|
if (route.kind === "Users") {
|
|
936
|
-
const existing = await options.
|
|
937
|
-
|
|
1045
|
+
const existing = await options.directory.getUser(tenant, route.id);
|
|
1046
|
+
if (!matches(request, existing)) return preconditionFailed();
|
|
1047
|
+
await options.directory.deleteUser(tenant, route.id);
|
|
938
1048
|
await emitDirectory(options, directoryEvent({
|
|
939
1049
|
operation: "delete",
|
|
940
1050
|
tenant,
|
|
@@ -945,8 +1055,9 @@ function scimHandler(options) {
|
|
|
945
1055
|
}), existing === null ? [] : [existing.id], [], existing === null ? [] : [existing]);
|
|
946
1056
|
return new Response(null, { status: 204 });
|
|
947
1057
|
}
|
|
948
|
-
const existing = await options.
|
|
949
|
-
|
|
1058
|
+
const existing = await options.directory.getGroup(tenant, route.id);
|
|
1059
|
+
if (!matches(request, existing)) return preconditionFailed();
|
|
1060
|
+
await options.directory.deleteGroup(tenant, route.id);
|
|
950
1061
|
await emitDirectory(options, directoryEvent({
|
|
951
1062
|
operation: "delete",
|
|
952
1063
|
tenant,
|
|
@@ -962,14 +1073,16 @@ function scimHandler(options) {
|
|
|
962
1073
|
}));
|
|
963
1074
|
return new Response(null, { status: 204 });
|
|
964
1075
|
}
|
|
965
|
-
const
|
|
966
|
-
if (
|
|
1076
|
+
const read = await readJson(request);
|
|
1077
|
+
if (read.tooLarge) return scimError(413, "", `request body exceeds ${String(MAX_BODY_BYTES)} bytes`);
|
|
1078
|
+
const { body } = read;
|
|
1079
|
+
if (!isRecord(body)) return scimError(400, "invalidSyntax", "malformed body");
|
|
967
1080
|
if (request.method === "POST" && route.id === void 0) {
|
|
968
1081
|
if (route.kind === "Users") {
|
|
969
1082
|
if (!schemasOk(body, "urn:ietf:params:scim:schemas:core:2.0:User")) return scimError(400, "invalidSyntax", "unsupported schema");
|
|
970
1083
|
const parsed = userFromBody(body, "");
|
|
971
1084
|
if (parsed === void 0) return scimError(400, "invalidValue", "userName is required");
|
|
972
|
-
const stored = await options.
|
|
1085
|
+
const stored = await options.directory.putUser(tenant, parsed);
|
|
973
1086
|
const location = locationOf(request, "Users", stored.id);
|
|
974
1087
|
await emitDirectory(options, directoryEvent({
|
|
975
1088
|
operation: "create",
|
|
@@ -979,13 +1092,13 @@ function scimHandler(options) {
|
|
|
979
1092
|
credential: auth.credential,
|
|
980
1093
|
active: stored.active
|
|
981
1094
|
}), [stored.id]);
|
|
982
|
-
return
|
|
1095
|
+
return resourceResponse(201, renderUser(stored, location), location);
|
|
983
1096
|
}
|
|
984
1097
|
if (!schemasOk(body, "urn:ietf:params:scim:schemas:core:2.0:Group")) return scimError(400, "invalidSyntax", "unsupported schema");
|
|
985
1098
|
const parsed = groupFromBody(body, "", groupRolesFor(options.groupRoles, body["id"]));
|
|
986
1099
|
if (parsed === void 0) return scimError(400, "invalidValue", "displayName is required");
|
|
987
1100
|
reportUnknownRoles(parsed.roles, options);
|
|
988
|
-
const stored = await options.
|
|
1101
|
+
const stored = await options.directory.putGroup(tenant, parsed);
|
|
989
1102
|
const location = locationOf(request, "Groups", stored.id);
|
|
990
1103
|
await emitDirectory(options, directoryEvent({
|
|
991
1104
|
operation: "create",
|
|
@@ -1000,15 +1113,17 @@ function scimHandler(options) {
|
|
|
1000
1113
|
previous: null,
|
|
1001
1114
|
next: stored
|
|
1002
1115
|
}));
|
|
1003
|
-
return
|
|
1116
|
+
return resourceResponse(201, renderGroup(stored, location), location);
|
|
1004
1117
|
}
|
|
1005
1118
|
if (request.method === "PUT" && route.id !== void 0) {
|
|
1006
1119
|
if (route.kind === "Users") {
|
|
1007
1120
|
if (!schemasOk(body, "urn:ietf:params:scim:schemas:core:2.0:User")) return scimError(400, "invalidSyntax", "unsupported schema");
|
|
1008
|
-
|
|
1121
|
+
const existing = await options.directory.getUser(tenant, route.id);
|
|
1122
|
+
if (existing === null) return scimError(404, "invalidValue", "resource not found");
|
|
1123
|
+
if (!matches(request, existing)) return preconditionFailed();
|
|
1009
1124
|
const parsed = userFromBody(body, route.id);
|
|
1010
1125
|
if (parsed === void 0) return scimError(400, "invalidValue", "userName is required");
|
|
1011
|
-
const stored = await options.
|
|
1126
|
+
const stored = await options.directory.putUser(tenant, parsed);
|
|
1012
1127
|
const location = locationOf(request, "Users", stored.id);
|
|
1013
1128
|
await emitDirectory(options, directoryEvent({
|
|
1014
1129
|
operation: "replace",
|
|
@@ -1018,15 +1133,16 @@ function scimHandler(options) {
|
|
|
1018
1133
|
credential: auth.credential,
|
|
1019
1134
|
active: stored.active
|
|
1020
1135
|
}), [stored.id]);
|
|
1021
|
-
return
|
|
1136
|
+
return resourceResponse(200, renderUser(stored, location), location);
|
|
1022
1137
|
}
|
|
1023
1138
|
if (!schemasOk(body, "urn:ietf:params:scim:schemas:core:2.0:Group")) return scimError(400, "invalidSyntax", "unsupported schema");
|
|
1024
|
-
const existing = await options.
|
|
1139
|
+
const existing = await options.directory.getGroup(tenant, route.id);
|
|
1025
1140
|
if (existing === null) return scimError(404, "invalidValue", "resource not found");
|
|
1141
|
+
if (!matches(request, existing)) return preconditionFailed();
|
|
1026
1142
|
const parsed = groupFromBody(body, route.id, groupRolesFor(options.groupRoles, route.id));
|
|
1027
1143
|
if (parsed === void 0) return scimError(400, "invalidValue", "displayName is required");
|
|
1028
1144
|
reportUnknownRoles(parsed.roles, options);
|
|
1029
|
-
const stored = await options.
|
|
1145
|
+
const stored = await options.directory.putGroup(tenant, parsed);
|
|
1030
1146
|
const location = locationOf(request, "Groups", stored.id);
|
|
1031
1147
|
await emitDirectory(options, directoryEvent({
|
|
1032
1148
|
operation: "replace",
|
|
@@ -1041,7 +1157,7 @@ function scimHandler(options) {
|
|
|
1041
1157
|
previous: existing,
|
|
1042
1158
|
next: stored
|
|
1043
1159
|
}));
|
|
1044
|
-
return
|
|
1160
|
+
return resourceResponse(200, renderGroup(stored, location), location);
|
|
1045
1161
|
}
|
|
1046
1162
|
if (request.method === "PATCH" && route.id !== void 0) {
|
|
1047
1163
|
const operations = readPatchOperations(body);
|
|
@@ -1049,7 +1165,8 @@ function scimHandler(options) {
|
|
|
1049
1165
|
const normalized = normalizePatchOps(operations);
|
|
1050
1166
|
if (normalized === void 0) return scimError(400, "invalidSyntax", "invalid patch");
|
|
1051
1167
|
if (route.kind === "Users") {
|
|
1052
|
-
|
|
1168
|
+
if (!matches(request, await options.directory.getUser(tenant, route.id))) return preconditionFailed();
|
|
1169
|
+
const stored = await options.directory.patchUser(tenant, route.id, normalized);
|
|
1053
1170
|
const location = locationOf(request, "Users", stored.id);
|
|
1054
1171
|
await emitDirectory(options, directoryEvent({
|
|
1055
1172
|
operation: "patch",
|
|
@@ -1059,10 +1176,11 @@ function scimHandler(options) {
|
|
|
1059
1176
|
credential: auth.credential,
|
|
1060
1177
|
active: stored.active
|
|
1061
1178
|
}), [stored.id]);
|
|
1062
|
-
return
|
|
1179
|
+
return resourceResponse(200, renderUser(stored, location), location);
|
|
1063
1180
|
}
|
|
1064
|
-
const existing = await options.
|
|
1065
|
-
|
|
1181
|
+
const existing = await options.directory.getGroup(tenant, route.id);
|
|
1182
|
+
if (!matches(request, existing)) return preconditionFailed();
|
|
1183
|
+
const stored = await options.directory.patchGroup(tenant, route.id, normalized);
|
|
1066
1184
|
reportUnknownRoles(stored.roles, options);
|
|
1067
1185
|
const location = locationOf(request, "Groups", stored.id);
|
|
1068
1186
|
await emitDirectory(options, directoryEvent({
|
|
@@ -1078,7 +1196,7 @@ function scimHandler(options) {
|
|
|
1078
1196
|
previous: existing,
|
|
1079
1197
|
next: stored
|
|
1080
1198
|
}));
|
|
1081
|
-
return
|
|
1199
|
+
return resourceResponse(200, renderGroup(stored, location), location);
|
|
1082
1200
|
}
|
|
1083
1201
|
return scimError(405, "invalidValue", "method not allowed");
|
|
1084
1202
|
} catch (error) {
|
|
@@ -1087,6 +1205,14 @@ function scimHandler(options) {
|
|
|
1087
1205
|
}
|
|
1088
1206
|
};
|
|
1089
1207
|
}
|
|
1208
|
+
function readResponse(request, rendered) {
|
|
1209
|
+
const version = versionOf(rendered);
|
|
1210
|
+
if (ifNoneMatchHolds(request, version)) return new Response(null, {
|
|
1211
|
+
status: 304,
|
|
1212
|
+
headers: { ETag: version }
|
|
1213
|
+
});
|
|
1214
|
+
return resourceResponse(200, rendered);
|
|
1215
|
+
}
|
|
1090
1216
|
function discoveryResponse(request, route) {
|
|
1091
1217
|
if (route.kind === "ServiceProviderConfig") return scimResponse(200, {
|
|
1092
1218
|
...serviceProviderConfig(),
|
|
@@ -1180,7 +1306,7 @@ function directoryMembershipSource(store, options = {}) {
|
|
|
1180
1306
|
//#region src/scim/store.ts
|
|
1181
1307
|
const DEFAULT_COUNT = 100;
|
|
1182
1308
|
function now() {
|
|
1183
|
-
return (
|
|
1309
|
+
return isoNow();
|
|
1184
1310
|
}
|
|
1185
1311
|
function createdAt(at, ...candidates) {
|
|
1186
1312
|
return candidates.find((value) => value !== void 0 && value !== "") ?? at;
|
|
@@ -1442,4 +1568,4 @@ function memoryDirectoryStore() {
|
|
|
1442
1568
|
};
|
|
1443
1569
|
}
|
|
1444
1570
|
//#endregion
|
|
1445
|
-
export {
|
|
1571
|
+
export { isDirectoryUniquenessError as C, isDirectoryNotFoundError as S, sha256Hex as T, LIST_SCHEMA as _, normalizePatchOps as a, SCIM_CONTENT_TYPE as b, parseScimFilter as c, serviceProviderConfig as d, APP_DATA_EXTENSION as f, GROUP_SCHEMA as g, ERROR_SCHEMA as h, tenantFromPath as i, resourceTypes as l, DirectoryUniquenessError as m, directoryMembershipSource as n, filterSupported as o, DirectoryNotFoundError as p, scimHandler as r, matchFilter as s, memoryDirectoryStore as t, schemas as u, PATCH_SCHEMA as v, authenticateScim as w, USER_SCHEMA as x, ROLES_EXTENSION as y };
|