@workos-inc/widgets 1.18.0 → 1.19.0-next.1790102694835
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/CHANGELOG.md +12 -0
- package/dist/cjs/admin-portal-audit-log-streaming.client.cjs +16 -20
- package/dist/cjs/admin-portal-audit-log-streaming.client.cjs.map +1 -1
- package/dist/cjs/admin-portal-audit-log-streaming.client.d.cts +2 -0
- package/dist/cjs/admin-portal-domain-verification.client.cjs +42 -34
- package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
- package/dist/cjs/admin-portal-domain-verification.client.d.cts +2 -0
- package/dist/cjs/admin-portal-sso-connection.client.cjs +77 -50
- package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -1
- package/dist/cjs/api/client-graphql/client.cjs +2 -1
- package/dist/cjs/api/client-graphql/client.cjs.map +1 -1
- package/dist/cjs/api/client-graphql/generated.cjs +2295 -6
- package/dist/cjs/api/client-graphql/generated.cjs.map +1 -1
- package/dist/cjs/api/client-graphql/generated.d.cts +2989 -7
- package/dist/cjs/api/client-graphql/hooks.cjs +67 -0
- package/dist/cjs/api/client-graphql/hooks.cjs.map +1 -0
- package/dist/cjs/api/client-graphql/hooks.d.cts +44 -0
- package/dist/cjs/api/endpoint.cjs +43 -27
- package/dist/cjs/api/endpoint.cjs.map +1 -1
- package/dist/cjs/api/endpoint.d.cts +53 -20
- package/dist/cjs/api-keys.client.cjs +1 -2
- package/dist/cjs/api-keys.client.cjs.map +1 -1
- package/dist/cjs/directory-sync.client.cjs +54 -13
- package/dist/cjs/directory-sync.client.cjs.map +1 -1
- package/dist/cjs/experimental/api/fetch.cjs +44 -16
- package/dist/cjs/experimental/api/fetch.cjs.map +1 -1
- package/dist/cjs/experimental/api/fetch.d.cts +38 -9
- package/dist/cjs/experimental/api/react-query.cjs +75 -38
- package/dist/cjs/experimental/api/react-query.cjs.map +1 -1
- package/dist/cjs/experimental/api/react-query.d.cts +57 -24
- package/dist/cjs/experimental/api/swr.cjs +77 -35
- package/dist/cjs/experimental/api/swr.cjs.map +1 -1
- package/dist/cjs/experimental/api/swr.d.cts +49 -20
- package/dist/cjs/index.d.cts +4 -0
- package/dist/cjs/lib/add-mfa-dialog.cjs +39 -33
- package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-audit-log-streaming.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-audit-log-streaming.d.cts +5 -3
- package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-domain-verification.d.cts +4 -2
- package/dist/cjs/lib/api/api-key.cjs +128 -40
- package/dist/cjs/lib/api/api-key.cjs.map +1 -1
- package/dist/cjs/lib/api/api-key.d.cts +20 -9
- package/dist/cjs/lib/api/me.cjs +70 -0
- package/dist/cjs/lib/api/me.cjs.map +1 -0
- package/dist/cjs/lib/api/me.d.cts +37 -0
- package/dist/cjs/lib/api/pipes.cjs +419 -0
- package/dist/cjs/lib/api/pipes.cjs.map +1 -0
- package/dist/cjs/lib/api/pipes.d.cts +69 -0
- package/dist/cjs/lib/api/user-api-key.cjs +116 -45
- package/dist/cjs/lib/api/user-api-key.cjs.map +1 -1
- package/dist/cjs/lib/api/user-api-key.d.cts +17 -12
- package/dist/cjs/lib/api/user.cjs +170 -51
- package/dist/cjs/lib/api/user.cjs.map +1 -1
- package/dist/cjs/lib/api/user.d.cts +4 -25
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +2 -2
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/create-api-key.cjs +1 -2
- package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +5 -13
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
- package/dist/cjs/lib/change-email-dialog.cjs +39 -26
- package/dist/cjs/lib/change-email-dialog.cjs.map +1 -1
- package/dist/cjs/lib/change-email-dialog.d.cts +4 -3
- package/dist/cjs/lib/change-password-dialog.cjs +14 -13
- package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/client-graphql-result.cjs +116 -0
- package/dist/cjs/lib/client-graphql-result.cjs.map +1 -0
- package/dist/cjs/lib/client-graphql-result.d.cts +32 -0
- package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-domain-dialog.d.cts +3 -4
- package/dist/cjs/lib/delete-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-user-dialog.d.cts +3 -2
- package/dist/cjs/lib/directory-sync.cjs +59 -23
- package/dist/cjs/lib/directory-sync.cjs.map +1 -1
- package/dist/cjs/lib/directory-sync.d.cts +23 -5
- package/dist/cjs/lib/domain-actions.cjs.map +1 -1
- package/dist/cjs/lib/domain-actions.d.cts +3 -4
- package/dist/cjs/lib/domain-item.cjs.map +1 -1
- package/dist/cjs/lib/domain-item.d.cts +3 -4
- package/dist/cjs/lib/edit-user-profile-dialog.cjs +19 -19
- package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-profile-dialog.d.cts +4 -3
- package/dist/cjs/lib/edit-user-role-dialog.cjs +3 -8
- package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-role-dialog.d.cts +5 -4
- package/dist/cjs/lib/elevated-access.cjs +22 -13
- package/dist/cjs/lib/elevated-access.cjs.map +1 -1
- package/dist/cjs/lib/elevated-access.d.cts +1 -1
- package/dist/cjs/lib/invite-user-dialog.cjs +9 -15
- package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs +13 -5
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.d.cts +2 -2
- package/dist/cjs/lib/logout-dialog.cjs +10 -6
- package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-dialog.d.cts +3 -4
- package/dist/cjs/lib/name-server-icon.cjs.map +1 -1
- package/dist/cjs/lib/name-server-icon.d.cts +3 -4
- package/dist/cjs/lib/oauth-icons.cjs +13 -2
- package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
- package/dist/cjs/lib/oauth-icons.d.cts +2 -1
- package/dist/cjs/lib/organization-switcher.cjs +3 -3
- package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
- package/dist/cjs/lib/organization-switcher.d.cts +6 -3
- package/dist/cjs/lib/password-error-utils.cjs +28 -43
- package/dist/cjs/lib/password-error-utils.cjs.map +1 -1
- package/dist/cjs/lib/password-error-utils.d.cts +3 -13
- package/dist/cjs/lib/pipes-admin.cjs +109 -79
- package/dist/cjs/lib/pipes-admin.cjs.map +1 -1
- package/dist/cjs/lib/pipes-admin.d.cts +1 -1
- package/dist/cjs/lib/pipes.cjs +133 -60
- package/dist/cjs/lib/pipes.cjs.map +1 -1
- package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/resend-invite-dialog.d.cts +3 -2
- package/dist/cjs/lib/reset-mfa-dialog.cjs +11 -3
- package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/revoke-invite-dialog.d.cts +3 -2
- package/dist/cjs/lib/set-password-dialog.cjs +16 -3
- package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/use-security-settings.cjs +5 -25
- package/dist/cjs/lib/use-security-settings.cjs.map +1 -1
- package/dist/cjs/lib/use-security-settings.d.cts +2 -2
- package/dist/cjs/lib/user-actions-dropdown.cjs +2 -6
- package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
- package/dist/cjs/lib/user-actions-dropdown.d.cts +3 -2
- package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs +3 -10
- package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.cjs +10 -5
- package/dist/cjs/lib/user-profile.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.d.cts +5 -2
- package/dist/cjs/lib/user-security.cjs +4 -5
- package/dist/cjs/lib/user-security.cjs.map +1 -1
- package/dist/cjs/lib/user-security.d.cts +6 -2
- package/dist/cjs/lib/user-sessions.cjs +2 -2
- package/dist/cjs/lib/user-sessions.cjs.map +1 -1
- package/dist/cjs/lib/user-sessions.d.cts +6 -4
- package/dist/cjs/lib/users-filter.cjs.map +1 -1
- package/dist/cjs/lib/users-filter.d.cts +4 -3
- package/dist/cjs/lib/users-management-context.cjs.map +1 -1
- package/dist/cjs/lib/users-management-context.d.cts +4 -18
- package/dist/cjs/lib/users-management-state.cjs.map +1 -1
- package/dist/cjs/lib/users-management-state.d.cts +4 -25
- package/dist/cjs/lib/users-management.cjs.map +1 -1
- package/dist/cjs/lib/users-management.d.cts +7 -7
- package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
- package/dist/cjs/lib/view-dns-record-dialog.d.cts +3 -4
- package/dist/cjs/organization-switcher.client.cjs +7 -6
- package/dist/cjs/organization-switcher.client.cjs.map +1 -1
- package/dist/cjs/organization-switcher.client.d.cts +3 -1
- package/dist/cjs/pipes-admin.client.cjs +7 -4
- package/dist/cjs/pipes-admin.client.cjs.map +1 -1
- package/dist/cjs/pipes.client.cjs +17 -16
- package/dist/cjs/pipes.client.cjs.map +1 -1
- package/dist/cjs/user-CgBDfSHl.d.cts +502 -0
- package/dist/cjs/user-profile.client.cjs +3 -3
- package/dist/cjs/user-profile.client.cjs.map +1 -1
- package/dist/cjs/user-profile.client.d.cts +4 -1
- package/dist/cjs/user-security.client.cjs +25 -14
- package/dist/cjs/user-security.client.cjs.map +1 -1
- package/dist/cjs/user-security.client.d.cts +2 -0
- package/dist/cjs/user-sessions.client.cjs +12 -29
- package/dist/cjs/user-sessions.client.cjs.map +1 -1
- package/dist/cjs/user-sessions.client.d.cts +2 -0
- package/dist/cjs/users-management.client.cjs +1 -4
- package/dist/cjs/users-management.client.cjs.map +1 -1
- package/dist/cjs/users-management.client.d.cts +4 -1
- package/dist/cjs/utils.cjs +2 -1
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/esm/admin-portal-audit-log-streaming.client.d.ts +2 -0
- package/dist/esm/admin-portal-audit-log-streaming.client.js +20 -23
- package/dist/esm/admin-portal-audit-log-streaming.client.js.map +1 -1
- package/dist/esm/admin-portal-domain-verification.client.d.ts +2 -0
- package/dist/esm/admin-portal-domain-verification.client.js +45 -39
- package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
- package/dist/esm/admin-portal-sso-connection.client.js +80 -52
- package/dist/esm/admin-portal-sso-connection.client.js.map +1 -1
- package/dist/esm/api/client-graphql/client.js +2 -1
- package/dist/esm/api/client-graphql/client.js.map +1 -1
- package/dist/esm/api/client-graphql/generated.d.ts +2989 -7
- package/dist/esm/api/client-graphql/generated.js +2203 -0
- package/dist/esm/api/client-graphql/generated.js.map +1 -1
- package/dist/esm/api/client-graphql/hooks.d.ts +44 -0
- package/dist/esm/api/client-graphql/hooks.js +43 -0
- package/dist/esm/api/client-graphql/hooks.js.map +1 -0
- package/dist/esm/api/endpoint.d.ts +53 -20
- package/dist/esm/api/endpoint.js +43 -27
- package/dist/esm/api/endpoint.js.map +1 -1
- package/dist/esm/api-keys.client.js +4 -2
- package/dist/esm/api-keys.client.js.map +1 -1
- package/dist/esm/directory-sync.client.js +56 -7
- package/dist/esm/directory-sync.client.js.map +1 -1
- package/dist/esm/experimental/api/fetch.d.ts +38 -9
- package/dist/esm/experimental/api/fetch.js +44 -16
- package/dist/esm/experimental/api/fetch.js.map +1 -1
- package/dist/esm/experimental/api/react-query.d.ts +57 -24
- package/dist/esm/experimental/api/react-query.js +75 -38
- package/dist/esm/experimental/api/react-query.js.map +1 -1
- package/dist/esm/experimental/api/swr.d.ts +49 -20
- package/dist/esm/experimental/api/swr.js +77 -35
- package/dist/esm/experimental/api/swr.js.map +1 -1
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/lib/add-mfa-dialog.js +39 -36
- package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/admin-portal-audit-log-streaming.d.ts +5 -3
- package/dist/esm/lib/admin-portal-audit-log-streaming.js.map +1 -1
- package/dist/esm/lib/admin-portal-domain-verification.d.ts +4 -2
- package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
- package/dist/esm/lib/api/api-key.d.ts +20 -9
- package/dist/esm/lib/api/api-key.js +124 -49
- package/dist/esm/lib/api/api-key.js.map +1 -1
- package/dist/esm/lib/api/me.d.ts +37 -0
- package/dist/esm/lib/api/me.js +37 -0
- package/dist/esm/lib/api/me.js.map +1 -0
- package/dist/esm/lib/api/pipes.d.ts +69 -0
- package/dist/esm/lib/api/pipes.js +380 -0
- package/dist/esm/lib/api/pipes.js.map +1 -0
- package/dist/esm/lib/api/user-api-key.d.ts +17 -12
- package/dist/esm/lib/api/user-api-key.js +113 -52
- package/dist/esm/lib/api/user-api-key.js.map +1 -1
- package/dist/esm/lib/api/user.d.ts +4 -25
- package/dist/esm/lib/api/user.js +173 -59
- package/dist/esm/lib/api/user.js.map +1 -1
- package/dist/esm/lib/api-keys/api-key-details-dialog.js +1 -3
- package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
- package/dist/esm/lib/api-keys/create-api-key.js +2 -2
- package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +5 -15
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
- package/dist/esm/lib/change-email-dialog.d.ts +4 -3
- package/dist/esm/lib/change-email-dialog.js +39 -31
- package/dist/esm/lib/change-email-dialog.js.map +1 -1
- package/dist/esm/lib/change-password-dialog.js +14 -13
- package/dist/esm/lib/change-password-dialog.js.map +1 -1
- package/dist/esm/lib/client-graphql-result.d.ts +32 -0
- package/dist/esm/lib/client-graphql-result.js +89 -0
- package/dist/esm/lib/client-graphql-result.js.map +1 -0
- package/dist/esm/lib/delete-domain-dialog.d.ts +3 -4
- package/dist/esm/lib/delete-domain-dialog.js.map +1 -1
- package/dist/esm/lib/delete-user-dialog.d.ts +3 -2
- package/dist/esm/lib/delete-user-dialog.js.map +1 -1
- package/dist/esm/lib/directory-sync.d.ts +23 -5
- package/dist/esm/lib/directory-sync.js +46 -14
- package/dist/esm/lib/directory-sync.js.map +1 -1
- package/dist/esm/lib/domain-actions.d.ts +3 -4
- package/dist/esm/lib/domain-actions.js.map +1 -1
- package/dist/esm/lib/domain-item.d.ts +3 -4
- package/dist/esm/lib/domain-item.js.map +1 -1
- package/dist/esm/lib/edit-user-profile-dialog.d.ts +4 -3
- package/dist/esm/lib/edit-user-profile-dialog.js +19 -19
- package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
- package/dist/esm/lib/edit-user-role-dialog.d.ts +5 -4
- package/dist/esm/lib/edit-user-role-dialog.js +7 -11
- package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
- package/dist/esm/lib/elevated-access.d.ts +1 -1
- package/dist/esm/lib/elevated-access.js +20 -11
- package/dist/esm/lib/elevated-access.js.map +1 -1
- package/dist/esm/lib/invite-user-dialog.js +10 -16
- package/dist/esm/lib/invite-user-dialog.js.map +1 -1
- package/dist/esm/lib/logout-all-sessions-dialog.d.ts +2 -2
- package/dist/esm/lib/logout-all-sessions-dialog.js +16 -5
- package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
- package/dist/esm/lib/logout-dialog.d.ts +3 -4
- package/dist/esm/lib/logout-dialog.js +12 -8
- package/dist/esm/lib/logout-dialog.js.map +1 -1
- package/dist/esm/lib/name-server-icon.d.ts +3 -4
- package/dist/esm/lib/name-server-icon.js.map +1 -1
- package/dist/esm/lib/oauth-icons.d.ts +2 -1
- package/dist/esm/lib/oauth-icons.js +11 -1
- package/dist/esm/lib/oauth-icons.js.map +1 -1
- package/dist/esm/lib/organization-switcher.d.ts +6 -3
- package/dist/esm/lib/organization-switcher.js +3 -3
- package/dist/esm/lib/organization-switcher.js.map +1 -1
- package/dist/esm/lib/password-error-utils.d.ts +3 -13
- package/dist/esm/lib/password-error-utils.js +28 -43
- package/dist/esm/lib/password-error-utils.js.map +1 -1
- package/dist/esm/lib/pipes-admin.d.ts +1 -1
- package/dist/esm/lib/pipes-admin.js +105 -78
- package/dist/esm/lib/pipes-admin.js.map +1 -1
- package/dist/esm/lib/pipes.js +140 -71
- package/dist/esm/lib/pipes.js.map +1 -1
- package/dist/esm/lib/resend-invite-dialog.d.ts +3 -2
- package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
- package/dist/esm/lib/reset-mfa-dialog.js +11 -3
- package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/revoke-invite-dialog.d.ts +3 -2
- package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
- package/dist/esm/lib/set-password-dialog.js +16 -3
- package/dist/esm/lib/set-password-dialog.js.map +1 -1
- package/dist/esm/lib/use-security-settings.d.ts +2 -2
- package/dist/esm/lib/use-security-settings.js +5 -27
- package/dist/esm/lib/use-security-settings.js.map +1 -1
- package/dist/esm/lib/user-actions-dropdown.d.ts +3 -2
- package/dist/esm/lib/user-actions-dropdown.js +2 -6
- package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
- package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js +3 -11
- package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js.map +1 -1
- package/dist/esm/lib/user-profile.d.ts +5 -2
- package/dist/esm/lib/user-profile.js +15 -6
- package/dist/esm/lib/user-profile.js.map +1 -1
- package/dist/esm/lib/user-security.d.ts +6 -2
- package/dist/esm/lib/user-security.js +4 -5
- package/dist/esm/lib/user-security.js.map +1 -1
- package/dist/esm/lib/user-sessions.d.ts +6 -4
- package/dist/esm/lib/user-sessions.js +2 -2
- package/dist/esm/lib/user-sessions.js.map +1 -1
- package/dist/esm/lib/users-filter.d.ts +4 -3
- package/dist/esm/lib/users-filter.js.map +1 -1
- package/dist/esm/lib/users-management-context.d.ts +4 -18
- package/dist/esm/lib/users-management-context.js.map +1 -1
- package/dist/esm/lib/users-management-state.d.ts +4 -25
- package/dist/esm/lib/users-management-state.js.map +1 -1
- package/dist/esm/lib/users-management.d.ts +7 -7
- package/dist/esm/lib/users-management.js.map +1 -1
- package/dist/esm/lib/view-dns-record-dialog.d.ts +3 -4
- package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
- package/dist/esm/organization-switcher.client.d.ts +3 -1
- package/dist/esm/organization-switcher.client.js +10 -6
- package/dist/esm/organization-switcher.client.js.map +1 -1
- package/dist/esm/pipes-admin.client.js +10 -4
- package/dist/esm/pipes-admin.client.js.map +1 -1
- package/dist/esm/pipes.client.js +17 -14
- package/dist/esm/pipes.client.js.map +1 -1
- package/dist/esm/user-BE5sIud6.d.ts +502 -0
- package/dist/esm/user-profile.client.d.ts +4 -1
- package/dist/esm/user-profile.client.js +2 -2
- package/dist/esm/user-profile.client.js.map +1 -1
- package/dist/esm/user-security.client.d.ts +2 -0
- package/dist/esm/user-security.client.js +28 -14
- package/dist/esm/user-security.client.js.map +1 -1
- package/dist/esm/user-sessions.client.d.ts +2 -0
- package/dist/esm/user-sessions.client.js +16 -30
- package/dist/esm/user-sessions.client.js.map +1 -1
- package/dist/esm/users-management.client.d.ts +4 -1
- package/dist/esm/users-management.client.js +2 -5
- package/dist/esm/users-management.client.js.map +1 -1
- package/dist/esm/utils.js +2 -1
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
2
|
+
import { useCallback } from "react";
|
|
3
|
+
import {
|
|
4
|
+
clientGraphqlQueryKey,
|
|
5
|
+
useClientGraphqlQuery
|
|
6
|
+
} from "../../api/client-graphql/hooks.js";
|
|
7
|
+
const PAGE_SIZE = 100;
|
|
8
|
+
async function listAllPages(fetchPage) {
|
|
9
|
+
const rows = [];
|
|
10
|
+
let after = null;
|
|
11
|
+
do {
|
|
12
|
+
const page = await fetchPage(after);
|
|
13
|
+
rows.push(...page.data);
|
|
14
|
+
after = page.listMetadata.after ?? null;
|
|
15
|
+
} while (after !== null);
|
|
16
|
+
return rows;
|
|
17
|
+
}
|
|
18
|
+
function isOneOf(values, value) {
|
|
19
|
+
return values.includes(value);
|
|
20
|
+
}
|
|
21
|
+
const AUTH_METHODS = ["oauth", "api_key", "client_credentials"];
|
|
22
|
+
const CONNECTION_STATES = ["connected", "needs_reauthorization"];
|
|
23
|
+
const AVAILABILITIES = ["available", "needs_admin_attention"];
|
|
24
|
+
const CREDENTIALS_TYPES = ["shared", "custom", "organization"];
|
|
25
|
+
const DISABLED_SOURCES = ["developer", "organization"];
|
|
26
|
+
const CONFIG_FIELD_SCOPES = ["integration", "installation"];
|
|
27
|
+
function toAuthMethods(authMethods) {
|
|
28
|
+
return authMethods.filter((method) => isOneOf(AUTH_METHODS, method));
|
|
29
|
+
}
|
|
30
|
+
function toCredentialsType(credentialsType) {
|
|
31
|
+
return isOneOf(CREDENTIALS_TYPES, credentialsType) ? credentialsType : "shared";
|
|
32
|
+
}
|
|
33
|
+
function toConnectionState(state) {
|
|
34
|
+
return isOneOf(CONNECTION_STATES, state) ? state : "needs_reauthorization";
|
|
35
|
+
}
|
|
36
|
+
function toConfig(entries) {
|
|
37
|
+
return Object.fromEntries(entries.map(({ name, value }) => [name, value]));
|
|
38
|
+
}
|
|
39
|
+
function toConfigField(field) {
|
|
40
|
+
return {
|
|
41
|
+
key: field.key,
|
|
42
|
+
label: field.label,
|
|
43
|
+
required: field.required,
|
|
44
|
+
scope: isOneOf(CONFIG_FIELD_SCOPES, field.scope) ? field.scope : "integration",
|
|
45
|
+
description: field.description ?? void 0,
|
|
46
|
+
example: field.example ?? void 0,
|
|
47
|
+
pattern: field.pattern ?? void 0,
|
|
48
|
+
patternFlags: field.patternFlags ?? void 0,
|
|
49
|
+
order: field.order ?? void 0,
|
|
50
|
+
secret: field.secret ?? void 0,
|
|
51
|
+
default: field.default ?? void 0
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function toIconFields(provider) {
|
|
55
|
+
return {
|
|
56
|
+
iconSlug: provider.iconSlug ?? void 0,
|
|
57
|
+
iconUrl: provider.iconUrl ?? void 0,
|
|
58
|
+
iconDarkUrl: provider.iconDarkUrl ?? void 0
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function toDataInstallation(connection) {
|
|
62
|
+
return {
|
|
63
|
+
object: "data_installation",
|
|
64
|
+
id: connection.id,
|
|
65
|
+
connection_role: connection.connectionRole === "Standard" ? "standard" : "compatibility",
|
|
66
|
+
account_identifier: connection.accountIdentifier ?? null,
|
|
67
|
+
account_display_name: connection.accountDisplayName ?? null,
|
|
68
|
+
user_id: connection.userId ?? null,
|
|
69
|
+
organization_id: connection.organizationId ?? null,
|
|
70
|
+
scopes: connection.scopes,
|
|
71
|
+
auth_method: isOneOf(AUTH_METHODS, connection.authMethod) ? connection.authMethod : "oauth",
|
|
72
|
+
api_key_last_4: connection.apiKeyLast4 ?? null,
|
|
73
|
+
client_id: connection.clientId ?? null,
|
|
74
|
+
client_secret_last_4: connection.clientSecretLast4 ?? null,
|
|
75
|
+
config: toConfig(connection.config),
|
|
76
|
+
state: toConnectionState(connection.state),
|
|
77
|
+
created_at: connection.createdAt,
|
|
78
|
+
updated_at: connection.updatedAt
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function toMyDataIntegrations(providers, connections) {
|
|
82
|
+
const connectionsByProviderId = /* @__PURE__ */ new Map();
|
|
83
|
+
for (const connection of connections) {
|
|
84
|
+
const installations = connectionsByProviderId.get(connection.dataProviderId) ?? [];
|
|
85
|
+
installations.push(toDataInstallation(connection));
|
|
86
|
+
connectionsByProviderId.set(connection.dataProviderId, installations);
|
|
87
|
+
}
|
|
88
|
+
return providers.map((provider) => {
|
|
89
|
+
const installations = connectionsByProviderId.get(provider.id) ?? [];
|
|
90
|
+
return {
|
|
91
|
+
object: "data_integration",
|
|
92
|
+
id: provider.id,
|
|
93
|
+
name: provider.name,
|
|
94
|
+
description: provider.description,
|
|
95
|
+
slug: provider.slug,
|
|
96
|
+
integrationType: provider.integrationType,
|
|
97
|
+
ownership: "userland_user",
|
|
98
|
+
credentialsType: toCredentialsType(provider.credentialsType),
|
|
99
|
+
scopes: provider.scopes,
|
|
100
|
+
authMethods: toAuthMethods(provider.authMethods),
|
|
101
|
+
configFields: provider.configFields.map(toConfigField),
|
|
102
|
+
config: toConfig(provider.config),
|
|
103
|
+
installation: installations[0] ?? null,
|
|
104
|
+
connected_accounts: installations,
|
|
105
|
+
createdAt: provider.createdAt,
|
|
106
|
+
updatedAt: provider.updatedAt,
|
|
107
|
+
...toIconFields(provider)
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function toSharedDataConnection(provider) {
|
|
112
|
+
return {
|
|
113
|
+
object: "data_integration",
|
|
114
|
+
id: provider.id,
|
|
115
|
+
name: provider.name,
|
|
116
|
+
description: provider.description,
|
|
117
|
+
slug: provider.slug,
|
|
118
|
+
ownership: "organization",
|
|
119
|
+
connected_accounts: provider.connectedAccounts.map(
|
|
120
|
+
(connection) => ({
|
|
121
|
+
object: "connected_account",
|
|
122
|
+
id: connection.id,
|
|
123
|
+
state: toConnectionState(connection.state),
|
|
124
|
+
availability: isOneOf(AVAILABILITIES, connection.availability) ? connection.availability : "needs_admin_attention",
|
|
125
|
+
created_at: connection.createdAt,
|
|
126
|
+
updated_at: connection.updatedAt
|
|
127
|
+
})
|
|
128
|
+
),
|
|
129
|
+
...toIconFields(provider)
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function toDataIntegrationConfiguration(provider) {
|
|
133
|
+
return {
|
|
134
|
+
object: "data_integration_configuration",
|
|
135
|
+
id: provider.id,
|
|
136
|
+
name: provider.name,
|
|
137
|
+
description: provider.description,
|
|
138
|
+
slug: provider.slug,
|
|
139
|
+
integrationType: provider.integrationType,
|
|
140
|
+
ownership: "userland_user",
|
|
141
|
+
enabled: provider.enabled,
|
|
142
|
+
scopes: provider.scopes,
|
|
143
|
+
defaultScopes: provider.defaultScopes,
|
|
144
|
+
availableScopes: provider.availableScopes,
|
|
145
|
+
credentials: toCredentials(provider.credentials),
|
|
146
|
+
authMethods: toAuthMethods(provider.authMethods),
|
|
147
|
+
configFields: provider.configFields.map(toConfigField),
|
|
148
|
+
config: toConfig(provider.config),
|
|
149
|
+
createdAt: provider.createdAt,
|
|
150
|
+
updatedAt: provider.updatedAt,
|
|
151
|
+
...toIconFields(provider)
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function toCredentials(credentials) {
|
|
155
|
+
return {
|
|
156
|
+
credentialsType: toCredentialsType(credentials.credentialsType),
|
|
157
|
+
hasCredentials: credentials.hasCredentials,
|
|
158
|
+
client_id: credentials.clientId ?? null,
|
|
159
|
+
redactedClientSecret: credentials.redactedClientSecret ?? null,
|
|
160
|
+
redirectUri: credentials.redirectUri
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
function toOrganizationDataIntegration(provider) {
|
|
164
|
+
const disabledSource = provider.disabledSource ?? null;
|
|
165
|
+
const overrideDisabled = disabledSource === "organization";
|
|
166
|
+
const connectedAccounts = provider.connectedAccounts.map(toDataInstallation);
|
|
167
|
+
return {
|
|
168
|
+
object: "data_integration",
|
|
169
|
+
id: provider.id,
|
|
170
|
+
name: provider.name,
|
|
171
|
+
description: provider.description,
|
|
172
|
+
slug: provider.slug,
|
|
173
|
+
integrationType: provider.integrationType,
|
|
174
|
+
ownership: "organization",
|
|
175
|
+
credentialsType: toCredentialsType(provider.credentialsType),
|
|
176
|
+
scopes: provider.scopes,
|
|
177
|
+
authMethods: toAuthMethods(provider.authMethods),
|
|
178
|
+
configFields: provider.configFields.map(toConfigField),
|
|
179
|
+
config: toConfig(provider.config),
|
|
180
|
+
installation: provider.connection ? toDataInstallation(provider.connection) : null,
|
|
181
|
+
connected_accounts: connectedAccounts,
|
|
182
|
+
createdAt: provider.createdAt,
|
|
183
|
+
updatedAt: provider.updatedAt,
|
|
184
|
+
...toIconFields(provider),
|
|
185
|
+
configuration: {
|
|
186
|
+
hasOverride: overrideDisabled,
|
|
187
|
+
rootEnabled: disabledSource !== "developer",
|
|
188
|
+
overrideEnabled: overrideDisabled ? false : null,
|
|
189
|
+
enabled: provider.enabled,
|
|
190
|
+
disabledSource: disabledSource !== null && isOneOf(DISABLED_SOURCES, disabledSource) ? disabledSource : null,
|
|
191
|
+
scopes: provider.scopes,
|
|
192
|
+
defaultScopes: provider.defaultScopes,
|
|
193
|
+
availableScopes: provider.availableScopes,
|
|
194
|
+
credentials: toCredentials(provider.credentials),
|
|
195
|
+
configured: provider.configured,
|
|
196
|
+
configFields: provider.configFields.map(toConfigField),
|
|
197
|
+
config: toConfig(provider.config)
|
|
198
|
+
},
|
|
199
|
+
capabilities: {
|
|
200
|
+
canConfigure: provider.capabilities.canConfigure,
|
|
201
|
+
canConnect: provider.capabilities.canConnect,
|
|
202
|
+
canUpdateCredentials: provider.capabilities.canUpdateCredentials,
|
|
203
|
+
canReauthorize: provider.capabilities.canReauthorize,
|
|
204
|
+
canDisconnect: provider.capabilities.canDisconnect
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
async function listAllDataProviders(sdk) {
|
|
209
|
+
return listAllPages(async (after) => {
|
|
210
|
+
const { dataProviders } = await sdk.ListDataProviders({
|
|
211
|
+
after,
|
|
212
|
+
limit: PAGE_SIZE
|
|
213
|
+
});
|
|
214
|
+
return dataProviders;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
async function listAllDataProviderConnections(sdk) {
|
|
218
|
+
return listAllPages(async (after) => {
|
|
219
|
+
const { dataProviderConnections } = await sdk.ListDataProviderConnections({
|
|
220
|
+
after,
|
|
221
|
+
limit: PAGE_SIZE
|
|
222
|
+
});
|
|
223
|
+
return dataProviderConnections;
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
async function listAllOrganizationDataProviders(sdk) {
|
|
227
|
+
return listAllPages(async (after) => {
|
|
228
|
+
const { organizationDataProviders } = await sdk.ListOrganizationDataProviders({ after, limit: PAGE_SIZE });
|
|
229
|
+
return organizationDataProviders;
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
async function listAllSharedDataProviders(sdk) {
|
|
233
|
+
return listAllPages(async (after) => {
|
|
234
|
+
const { sharedDataProviders } = await sdk.ListSharedDataProviders({
|
|
235
|
+
after,
|
|
236
|
+
limit: PAGE_SIZE
|
|
237
|
+
});
|
|
238
|
+
return sharedDataProviders;
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
async function listAllConfigurableDataProviders(sdk) {
|
|
242
|
+
return listAllPages(async (after) => {
|
|
243
|
+
const { configurableDataProviders } = await sdk.ListConfigurableDataProviders({ after, limit: PAGE_SIZE });
|
|
244
|
+
return configurableDataProviders;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
const sharedDataConnectionsQueryKey = clientGraphqlQueryKey(
|
|
248
|
+
"ListSharedDataProviders"
|
|
249
|
+
);
|
|
250
|
+
const dataIntegrationConfigurationsQueryKey = clientGraphqlQueryKey(
|
|
251
|
+
"ListConfigurableDataProviders"
|
|
252
|
+
);
|
|
253
|
+
const myDataIntegrationsQueryKeys = [
|
|
254
|
+
clientGraphqlQueryKey("ListDataProviders"),
|
|
255
|
+
clientGraphqlQueryKey("ListDataProviderConnections")
|
|
256
|
+
];
|
|
257
|
+
const organizationDataIntegrationsQueryKey = clientGraphqlQueryKey(
|
|
258
|
+
"ListOrganizationDataProviders"
|
|
259
|
+
);
|
|
260
|
+
function useMyDataIntegrations({
|
|
261
|
+
enabled = true
|
|
262
|
+
} = {}) {
|
|
263
|
+
const providers = useClientGraphqlQuery({
|
|
264
|
+
queryKey: clientGraphqlQueryKey("ListDataProviders"),
|
|
265
|
+
queryFn: listAllDataProviders,
|
|
266
|
+
enabled
|
|
267
|
+
});
|
|
268
|
+
const connections = useClientGraphqlQuery({
|
|
269
|
+
queryKey: clientGraphqlQueryKey("ListDataProviderConnections"),
|
|
270
|
+
queryFn: listAllDataProviderConnections,
|
|
271
|
+
enabled
|
|
272
|
+
});
|
|
273
|
+
const isSuccess = providers.isSuccess && connections.isSuccess;
|
|
274
|
+
return {
|
|
275
|
+
data: isSuccess ? toMyDataIntegrations(providers.data, connections.data) : [],
|
|
276
|
+
isLoading: providers.isLoading || connections.isLoading,
|
|
277
|
+
isPending: providers.isPending || connections.isPending,
|
|
278
|
+
isSuccess,
|
|
279
|
+
isError: providers.isError || connections.isError,
|
|
280
|
+
error: providers.error ?? connections.error,
|
|
281
|
+
failureCount: Math.max(providers.failureCount, connections.failureCount),
|
|
282
|
+
refetch: () => {
|
|
283
|
+
void providers.refetch();
|
|
284
|
+
void connections.refetch();
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
function useOrganizationDataIntegrations({
|
|
289
|
+
enabled = true
|
|
290
|
+
} = {}) {
|
|
291
|
+
const query = useClientGraphqlQuery({
|
|
292
|
+
queryKey: organizationDataIntegrationsQueryKey,
|
|
293
|
+
queryFn: listAllOrganizationDataProviders,
|
|
294
|
+
select: (providers) => providers.map(toOrganizationDataIntegration),
|
|
295
|
+
enabled
|
|
296
|
+
});
|
|
297
|
+
return {
|
|
298
|
+
data: query.data ?? [],
|
|
299
|
+
isLoading: query.isLoading,
|
|
300
|
+
isPending: query.isPending,
|
|
301
|
+
isSuccess: query.isSuccess,
|
|
302
|
+
isError: query.isError,
|
|
303
|
+
error: query.error,
|
|
304
|
+
failureCount: query.failureCount,
|
|
305
|
+
refetch: () => {
|
|
306
|
+
void query.refetch();
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
function useSharedDataConnections() {
|
|
311
|
+
const query = useClientGraphqlQuery({
|
|
312
|
+
queryKey: sharedDataConnectionsQueryKey,
|
|
313
|
+
queryFn: listAllSharedDataProviders,
|
|
314
|
+
select: (providers) => providers.map(toSharedDataConnection)
|
|
315
|
+
});
|
|
316
|
+
return {
|
|
317
|
+
data: query.data ?? [],
|
|
318
|
+
isLoading: query.isLoading,
|
|
319
|
+
isPending: query.isPending,
|
|
320
|
+
isSuccess: query.isSuccess,
|
|
321
|
+
isError: query.isError,
|
|
322
|
+
error: query.error,
|
|
323
|
+
failureCount: query.failureCount,
|
|
324
|
+
refetch: () => {
|
|
325
|
+
void query.refetch();
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function useDataIntegrationConfigurations({
|
|
330
|
+
enabled = true
|
|
331
|
+
} = {}) {
|
|
332
|
+
const query = useClientGraphqlQuery({
|
|
333
|
+
queryKey: dataIntegrationConfigurationsQueryKey,
|
|
334
|
+
queryFn: listAllConfigurableDataProviders,
|
|
335
|
+
select: (providers) => providers.map(toDataIntegrationConfiguration),
|
|
336
|
+
enabled
|
|
337
|
+
});
|
|
338
|
+
return {
|
|
339
|
+
data: query.data ?? [],
|
|
340
|
+
isLoading: query.isLoading,
|
|
341
|
+
isPending: query.isPending,
|
|
342
|
+
isSuccess: query.isSuccess,
|
|
343
|
+
isError: query.isError,
|
|
344
|
+
error: query.error,
|
|
345
|
+
failureCount: query.failureCount,
|
|
346
|
+
refetch: () => {
|
|
347
|
+
void query.refetch();
|
|
348
|
+
}
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function useInvalidateMyDataIntegrations() {
|
|
352
|
+
const queryClient = useQueryClient();
|
|
353
|
+
return useCallback(() => {
|
|
354
|
+
for (const queryKey of myDataIntegrationsQueryKeys) {
|
|
355
|
+
queryClient.invalidateQueries({ queryKey });
|
|
356
|
+
}
|
|
357
|
+
}, [queryClient]);
|
|
358
|
+
}
|
|
359
|
+
export {
|
|
360
|
+
dataIntegrationConfigurationsQueryKey,
|
|
361
|
+
listAllConfigurableDataProviders,
|
|
362
|
+
listAllDataProviderConnections,
|
|
363
|
+
listAllDataProviders,
|
|
364
|
+
listAllOrganizationDataProviders,
|
|
365
|
+
listAllSharedDataProviders,
|
|
366
|
+
myDataIntegrationsQueryKeys,
|
|
367
|
+
organizationDataIntegrationsQueryKey,
|
|
368
|
+
sharedDataConnectionsQueryKey,
|
|
369
|
+
toDataInstallation,
|
|
370
|
+
toDataIntegrationConfiguration,
|
|
371
|
+
toMyDataIntegrations,
|
|
372
|
+
toOrganizationDataIntegration,
|
|
373
|
+
toSharedDataConnection,
|
|
374
|
+
useDataIntegrationConfigurations,
|
|
375
|
+
useInvalidateMyDataIntegrations,
|
|
376
|
+
useMyDataIntegrations,
|
|
377
|
+
useOrganizationDataIntegrations,
|
|
378
|
+
useSharedDataConnections
|
|
379
|
+
};
|
|
380
|
+
//# sourceMappingURL=pipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api/pipes.ts"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport type {\n DataInstallation,\n DataIntegrationConfigField,\n DataIntegrationConfiguration,\n DataIntegrationCredentials,\n DataIntegrationWithConnections,\n OrganizationDataIntegration,\n SharedConnection,\n SharedDataConnection,\n} from \"../../api/endpoint.js\";\nimport type {\n ConfigurableDataProviderFieldsFragment,\n DataProviderConfigFieldFieldsFragment,\n DataProviderConnectionFieldsFragment,\n DataProviderFieldsFragment,\n OrganizationDataProviderFieldsFragment,\n SharedDataProviderFieldsFragment,\n Sdk,\n} from \"../../api/client-graphql/generated.js\";\nimport {\n clientGraphqlQueryKey,\n useClientGraphqlQuery,\n} from \"../../api/client-graphql/hooks.js\";\n\nconst PAGE_SIZE = 100;\n\n/**\n * The Pipes list queries default to `limit: 10` and the widgets render every\n * row, so each list is walked to its end before it is adapted.\n */\nasync function listAllPages<T>(\n fetchPage: (after: string | null) => Promise<{\n data: T[];\n listMetadata: { after?: string | null };\n }>,\n): Promise<T[]> {\n const rows: T[] = [];\n let after: string | null = null;\n do {\n const page = await fetchPage(after);\n rows.push(...page.data);\n after = page.listMetadata.after ?? null;\n } while (after !== null);\n return rows;\n}\n\nfunction isOneOf<const T extends readonly string[]>(\n values: T,\n value: string,\n): value is T[number] {\n return values.includes(value);\n}\n\nconst AUTH_METHODS = [\"oauth\", \"api_key\", \"client_credentials\"] as const;\nconst CONNECTION_STATES = [\"connected\", \"needs_reauthorization\"] as const;\nconst AVAILABILITIES = [\"available\", \"needs_admin_attention\"] as const;\nconst CREDENTIALS_TYPES = [\"shared\", \"custom\", \"organization\"] as const;\nconst DISABLED_SOURCES = [\"developer\", \"organization\"] as const;\nconst CONFIG_FIELD_SCOPES = [\"integration\", \"installation\"] as const;\n\nfunction toAuthMethods(\n authMethods: readonly string[],\n): NonNullable<DataIntegrationWithConnections[\"authMethods\"]> {\n return authMethods.filter((method) => isOneOf(AUTH_METHODS, method));\n}\n\n/**\n * The GraphQL types carry these as plain strings; the REST DTOs the widgets\n * render from narrow them. Unknown values fall back to the option that\n * renders the least capable state.\n */\nfunction toCredentialsType(\n credentialsType: string,\n): DataIntegrationWithConnections[\"credentialsType\"] {\n return isOneOf(CREDENTIALS_TYPES, credentialsType)\n ? credentialsType\n : \"shared\";\n}\n\nfunction toConnectionState(state: string): DataInstallation[\"state\"] {\n return isOneOf(CONNECTION_STATES, state) ? state : \"needs_reauthorization\";\n}\n\nfunction toConfig(\n entries: readonly { name: string; value: string }[],\n): Record<string, string> {\n return Object.fromEntries(entries.map(({ name, value }) => [name, value]));\n}\n\nfunction toConfigField(\n field: DataProviderConfigFieldFieldsFragment,\n): DataIntegrationConfigField {\n return {\n key: field.key,\n label: field.label,\n required: field.required,\n scope: isOneOf(CONFIG_FIELD_SCOPES, field.scope)\n ? field.scope\n : \"integration\",\n description: field.description ?? undefined,\n example: field.example ?? undefined,\n pattern: field.pattern ?? undefined,\n patternFlags: field.patternFlags ?? undefined,\n order: field.order ?? undefined,\n secret: field.secret ?? undefined,\n default: field.default ?? undefined,\n };\n}\n\nfunction toIconFields(provider: {\n iconSlug?: string | null;\n iconUrl?: string | null;\n iconDarkUrl?: string | null;\n}): Pick<\n DataIntegrationWithConnections,\n \"iconSlug\" | \"iconUrl\" | \"iconDarkUrl\"\n> {\n return {\n iconSlug: provider.iconSlug ?? undefined,\n iconUrl: provider.iconUrl ?? undefined,\n iconDarkUrl: provider.iconDarkUrl ?? undefined,\n };\n}\n\nexport function toDataInstallation(\n connection: DataProviderConnectionFieldsFragment,\n): DataInstallation {\n return {\n object: \"data_installation\",\n id: connection.id,\n connection_role:\n connection.connectionRole === \"Standard\" ? \"standard\" : \"compatibility\",\n account_identifier: connection.accountIdentifier ?? null,\n account_display_name: connection.accountDisplayName ?? null,\n user_id: connection.userId ?? null,\n organization_id: connection.organizationId ?? null,\n scopes: connection.scopes,\n auth_method: isOneOf(AUTH_METHODS, connection.authMethod)\n ? connection.authMethod\n : \"oauth\",\n api_key_last_4: connection.apiKeyLast4 ?? null,\n client_id: connection.clientId ?? null,\n client_secret_last_4: connection.clientSecretLast4 ?? null,\n config: toConfig(connection.config),\n state: toConnectionState(connection.state),\n created_at: connection.createdAt,\n updated_at: connection.updatedAt,\n };\n}\n\n/**\n * Joins the member's providers with their own connections the way\n * `GET /_widgets/DataIntegrations/mine` did: the member's connection sits\n * inline as `installation` and is repeated in `connected_accounts`.\n */\nexport function toMyDataIntegrations(\n providers: readonly DataProviderFieldsFragment[],\n connections: readonly DataProviderConnectionFieldsFragment[],\n): DataIntegrationWithConnections[] {\n const connectionsByProviderId = new Map<string, DataInstallation[]>();\n for (const connection of connections) {\n const installations =\n connectionsByProviderId.get(connection.dataProviderId) ?? [];\n installations.push(toDataInstallation(connection));\n connectionsByProviderId.set(connection.dataProviderId, installations);\n }\n\n return providers.map((provider) => {\n const installations = connectionsByProviderId.get(provider.id) ?? [];\n return {\n object: \"data_integration\",\n id: provider.id,\n name: provider.name,\n description: provider.description,\n slug: provider.slug,\n integrationType: provider.integrationType,\n ownership: \"userland_user\",\n credentialsType: toCredentialsType(provider.credentialsType),\n scopes: provider.scopes,\n authMethods: toAuthMethods(provider.authMethods),\n configFields: provider.configFields.map(toConfigField),\n config: toConfig(provider.config),\n installation: installations[0] ?? null,\n connected_accounts: installations,\n createdAt: provider.createdAt,\n updatedAt: provider.updatedAt,\n ...toIconFields(provider),\n };\n });\n}\n\n/**\n * Presents a shared provider the way\n * `GET /_widgets/DataIntegrations/shared-connections` did for any active\n * member: identity, presentation and the state of each shared connection,\n * without credentials or account identifiers.\n */\nexport function toSharedDataConnection(\n provider: SharedDataProviderFieldsFragment,\n): SharedDataConnection {\n return {\n object: \"data_integration\",\n id: provider.id,\n name: provider.name,\n description: provider.description,\n slug: provider.slug,\n ownership: \"organization\",\n connected_accounts: provider.connectedAccounts.map(\n (connection): SharedConnection => ({\n object: \"connected_account\",\n id: connection.id,\n state: toConnectionState(connection.state),\n availability: isOneOf(AVAILABILITIES, connection.availability)\n ? connection.availability\n : \"needs_admin_attention\",\n created_at: connection.createdAt,\n updated_at: connection.updatedAt,\n }),\n ),\n ...toIconFields(provider),\n };\n}\n\n/**\n * Presents the organization's policy configuration of a member-connectable\n * provider the way `GET /_widgets/DataIntegrations/configurations` did.\n */\nexport function toDataIntegrationConfiguration(\n provider: ConfigurableDataProviderFieldsFragment,\n): DataIntegrationConfiguration {\n return {\n object: \"data_integration_configuration\",\n id: provider.id,\n name: provider.name,\n description: provider.description,\n slug: provider.slug,\n integrationType: provider.integrationType,\n ownership: \"userland_user\",\n enabled: provider.enabled,\n scopes: provider.scopes,\n defaultScopes: provider.defaultScopes,\n availableScopes: provider.availableScopes,\n credentials: toCredentials(provider.credentials),\n authMethods: toAuthMethods(provider.authMethods),\n configFields: provider.configFields.map(toConfigField),\n config: toConfig(provider.config),\n createdAt: provider.createdAt,\n updatedAt: provider.updatedAt,\n ...toIconFields(provider),\n };\n}\n\nfunction toCredentials(\n credentials: OrganizationDataProviderFieldsFragment[\"credentials\"],\n): DataIntegrationCredentials {\n return {\n credentialsType: toCredentialsType(credentials.credentialsType),\n hasCredentials: credentials.hasCredentials,\n client_id: credentials.clientId ?? null,\n redactedClientSecret: credentials.redactedClientSecret ?? null,\n redirectUri: credentials.redirectUri,\n };\n}\n\n/**\n * Presents an organization-owned provider the way\n * `GET /_widgets/DataIntegrations/organization` did. The GraphQL type\n * resolves the organization's override into the effective `enabled` /\n * `disabledSource`, so the raw override fields are derived from those.\n */\nexport function toOrganizationDataIntegration(\n provider: OrganizationDataProviderFieldsFragment,\n): OrganizationDataIntegration {\n const disabledSource = provider.disabledSource ?? null;\n const overrideDisabled = disabledSource === \"organization\";\n const connectedAccounts = provider.connectedAccounts.map(toDataInstallation);\n return {\n object: \"data_integration\",\n id: provider.id,\n name: provider.name,\n description: provider.description,\n slug: provider.slug,\n integrationType: provider.integrationType,\n ownership: \"organization\",\n credentialsType: toCredentialsType(provider.credentialsType),\n scopes: provider.scopes,\n authMethods: toAuthMethods(provider.authMethods),\n configFields: provider.configFields.map(toConfigField),\n config: toConfig(provider.config),\n installation: provider.connection\n ? toDataInstallation(provider.connection)\n : null,\n connected_accounts: connectedAccounts,\n createdAt: provider.createdAt,\n updatedAt: provider.updatedAt,\n ...toIconFields(provider),\n configuration: {\n hasOverride: overrideDisabled,\n rootEnabled: disabledSource !== \"developer\",\n overrideEnabled: overrideDisabled ? false : null,\n enabled: provider.enabled,\n disabledSource:\n disabledSource !== null && isOneOf(DISABLED_SOURCES, disabledSource)\n ? disabledSource\n : null,\n scopes: provider.scopes,\n defaultScopes: provider.defaultScopes,\n availableScopes: provider.availableScopes,\n credentials: toCredentials(provider.credentials),\n configured: provider.configured,\n configFields: provider.configFields.map(toConfigField),\n config: toConfig(provider.config),\n },\n capabilities: {\n canConfigure: provider.capabilities.canConfigure,\n canConnect: provider.capabilities.canConnect,\n canUpdateCredentials: provider.capabilities.canUpdateCredentials,\n canReauthorize: provider.capabilities.canReauthorize,\n canDisconnect: provider.capabilities.canDisconnect,\n },\n };\n}\n\nexport async function listAllDataProviders(\n sdk: Sdk,\n): Promise<DataProviderFieldsFragment[]> {\n return listAllPages(async (after) => {\n const { dataProviders } = await sdk.ListDataProviders({\n after,\n limit: PAGE_SIZE,\n });\n return dataProviders;\n });\n}\n\nexport async function listAllDataProviderConnections(\n sdk: Sdk,\n): Promise<DataProviderConnectionFieldsFragment[]> {\n return listAllPages(async (after) => {\n const { dataProviderConnections } = await sdk.ListDataProviderConnections({\n after,\n limit: PAGE_SIZE,\n });\n return dataProviderConnections;\n });\n}\n\nexport async function listAllOrganizationDataProviders(\n sdk: Sdk,\n): Promise<OrganizationDataProviderFieldsFragment[]> {\n return listAllPages(async (after) => {\n const { organizationDataProviders } =\n await sdk.ListOrganizationDataProviders({ after, limit: PAGE_SIZE });\n return organizationDataProviders;\n });\n}\n\nexport async function listAllSharedDataProviders(\n sdk: Sdk,\n): Promise<SharedDataProviderFieldsFragment[]> {\n return listAllPages(async (after) => {\n const { sharedDataProviders } = await sdk.ListSharedDataProviders({\n after,\n limit: PAGE_SIZE,\n });\n return sharedDataProviders;\n });\n}\n\nexport async function listAllConfigurableDataProviders(\n sdk: Sdk,\n): Promise<ConfigurableDataProviderFieldsFragment[]> {\n return listAllPages(async (after) => {\n const { configurableDataProviders } =\n await sdk.ListConfigurableDataProviders({ after, limit: PAGE_SIZE });\n return configurableDataProviders;\n });\n}\n\nexport const sharedDataConnectionsQueryKey = clientGraphqlQueryKey(\n \"ListSharedDataProviders\",\n);\n\nexport const dataIntegrationConfigurationsQueryKey = clientGraphqlQueryKey(\n \"ListConfigurableDataProviders\",\n);\n\nexport const myDataIntegrationsQueryKeys = [\n clientGraphqlQueryKey(\"ListDataProviders\"),\n clientGraphqlQueryKey(\"ListDataProviderConnections\"),\n];\n\nexport const organizationDataIntegrationsQueryKey = clientGraphqlQueryKey(\n \"ListOrganizationDataProviders\",\n);\n\ninterface ListResult<T> {\n data: T[];\n isLoading: boolean;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n failureCount: number;\n refetch: () => void;\n}\n\n/** The member's connectable providers joined with their own connections. */\nexport function useMyDataIntegrations({\n enabled = true,\n}: { enabled?: boolean } = {}): ListResult<DataIntegrationWithConnections> {\n const providers = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListDataProviders\"),\n queryFn: listAllDataProviders,\n enabled,\n });\n const connections = useClientGraphqlQuery({\n queryKey: clientGraphqlQueryKey(\"ListDataProviderConnections\"),\n queryFn: listAllDataProviderConnections,\n enabled,\n });\n\n const isSuccess = providers.isSuccess && connections.isSuccess;\n return {\n data: isSuccess\n ? toMyDataIntegrations(providers.data, connections.data)\n : [],\n isLoading: providers.isLoading || connections.isLoading,\n isPending: providers.isPending || connections.isPending,\n isSuccess,\n isError: providers.isError || connections.isError,\n error: providers.error ?? connections.error,\n failureCount: Math.max(providers.failureCount, connections.failureCount),\n refetch: () => {\n void providers.refetch();\n void connections.refetch();\n },\n };\n}\n\n/** The organization's provider inventory with its shared connections. */\nexport function useOrganizationDataIntegrations({\n enabled = true,\n}: { enabled?: boolean } = {}): ListResult<OrganizationDataIntegration> {\n const query = useClientGraphqlQuery({\n queryKey: organizationDataIntegrationsQueryKey,\n queryFn: listAllOrganizationDataProviders,\n select: (providers) => providers.map(toOrganizationDataIntegration),\n enabled,\n });\n return {\n data: query.data ?? [],\n isLoading: query.isLoading,\n isPending: query.isPending,\n isSuccess: query.isSuccess,\n isError: query.isError,\n error: query.error,\n failureCount: query.failureCount,\n refetch: () => {\n void query.refetch();\n },\n };\n}\n\n/** The organization's shared connections, readable by any active member. */\nexport function useSharedDataConnections(): ListResult<SharedDataConnection> {\n const query = useClientGraphqlQuery({\n queryKey: sharedDataConnectionsQueryKey,\n queryFn: listAllSharedDataProviders,\n select: (providers) => providers.map(toSharedDataConnection),\n });\n return {\n data: query.data ?? [],\n isLoading: query.isLoading,\n isPending: query.isPending,\n isSuccess: query.isSuccess,\n isError: query.isError,\n error: query.error,\n failureCount: query.failureCount,\n refetch: () => {\n void query.refetch();\n },\n };\n}\n\n/** The organization's policy configuration of each connectable provider. */\nexport function useDataIntegrationConfigurations({\n enabled = true,\n}: { enabled?: boolean } = {}): ListResult<DataIntegrationConfiguration> {\n const query = useClientGraphqlQuery({\n queryKey: dataIntegrationConfigurationsQueryKey,\n queryFn: listAllConfigurableDataProviders,\n select: (providers) => providers.map(toDataIntegrationConfiguration),\n enabled,\n });\n return {\n data: query.data ?? [],\n isLoading: query.isLoading,\n isPending: query.isPending,\n isSuccess: query.isSuccess,\n isError: query.isError,\n error: query.error,\n failureCount: query.failureCount,\n refetch: () => {\n void query.refetch();\n },\n };\n}\n\n/** Refreshes the member's own lists after one of their connections changed. */\nexport function useInvalidateMyDataIntegrations() {\n const queryClient = useQueryClient();\n return useCallback(() => {\n for (const queryKey of myDataIntegrationsQueryKeys) {\n queryClient.invalidateQueries({ queryKey });\n }\n }, [queryClient]);\n}\n"],"mappings":"AAAA,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAoB5B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,MAAM,YAAY;AAMlB,eAAe,aACb,WAIc;AACd,QAAM,OAAY,CAAC;AACnB,MAAI,QAAuB;AAC3B,KAAG;AACD,UAAM,OAAO,MAAM,UAAU,KAAK;AAClC,SAAK,KAAK,GAAG,KAAK,IAAI;AACtB,YAAQ,KAAK,aAAa,SAAS;AAAA,EACrC,SAAS,UAAU;AACnB,SAAO;AACT;AAEA,SAAS,QACP,QACA,OACoB;AACpB,SAAO,OAAO,SAAS,KAAK;AAC9B;AAEA,MAAM,eAAe,CAAC,SAAS,WAAW,oBAAoB;AAC9D,MAAM,oBAAoB,CAAC,aAAa,uBAAuB;AAC/D,MAAM,iBAAiB,CAAC,aAAa,uBAAuB;AAC5D,MAAM,oBAAoB,CAAC,UAAU,UAAU,cAAc;AAC7D,MAAM,mBAAmB,CAAC,aAAa,cAAc;AACrD,MAAM,sBAAsB,CAAC,eAAe,cAAc;AAE1D,SAAS,cACP,aAC4D;AAC5D,SAAO,YAAY,OAAO,CAAC,WAAW,QAAQ,cAAc,MAAM,CAAC;AACrE;AAOA,SAAS,kBACP,iBACmD;AACnD,SAAO,QAAQ,mBAAmB,eAAe,IAC7C,kBACA;AACN;AAEA,SAAS,kBAAkB,OAA0C;AACnE,SAAO,QAAQ,mBAAmB,KAAK,IAAI,QAAQ;AACrD;AAEA,SAAS,SACP,SACwB;AACxB,SAAO,OAAO,YAAY,QAAQ,IAAI,CAAC,EAAE,MAAM,MAAM,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3E;AAEA,SAAS,cACP,OAC4B;AAC5B,SAAO;AAAA,IACL,KAAK,MAAM;AAAA,IACX,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,OAAO,QAAQ,qBAAqB,MAAM,KAAK,IAC3C,MAAM,QACN;AAAA,IACJ,aAAa,MAAM,eAAe;AAAA,IAClC,SAAS,MAAM,WAAW;AAAA,IAC1B,SAAS,MAAM,WAAW;AAAA,IAC1B,cAAc,MAAM,gBAAgB;AAAA,IACpC,OAAO,MAAM,SAAS;AAAA,IACtB,QAAQ,MAAM,UAAU;AAAA,IACxB,SAAS,MAAM,WAAW;AAAA,EAC5B;AACF;AAEA,SAAS,aAAa,UAOpB;AACA,SAAO;AAAA,IACL,UAAU,SAAS,YAAY;AAAA,IAC/B,SAAS,SAAS,WAAW;AAAA,IAC7B,aAAa,SAAS,eAAe;AAAA,EACvC;AACF;AAEO,SAAS,mBACd,YACkB;AAClB,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,IAAI,WAAW;AAAA,IACf,iBACE,WAAW,mBAAmB,aAAa,aAAa;AAAA,IAC1D,oBAAoB,WAAW,qBAAqB;AAAA,IACpD,sBAAsB,WAAW,sBAAsB;AAAA,IACvD,SAAS,WAAW,UAAU;AAAA,IAC9B,iBAAiB,WAAW,kBAAkB;AAAA,IAC9C,QAAQ,WAAW;AAAA,IACnB,aAAa,QAAQ,cAAc,WAAW,UAAU,IACpD,WAAW,aACX;AAAA,IACJ,gBAAgB,WAAW,eAAe;AAAA,IAC1C,WAAW,WAAW,YAAY;AAAA,IAClC,sBAAsB,WAAW,qBAAqB;AAAA,IACtD,QAAQ,SAAS,WAAW,MAAM;AAAA,IAClC,OAAO,kBAAkB,WAAW,KAAK;AAAA,IACzC,YAAY,WAAW;AAAA,IACvB,YAAY,WAAW;AAAA,EACzB;AACF;AAOO,SAAS,qBACd,WACA,aACkC;AAClC,QAAM,0BAA0B,oBAAI,IAAgC;AACpE,aAAW,cAAc,aAAa;AACpC,UAAM,gBACJ,wBAAwB,IAAI,WAAW,cAAc,KAAK,CAAC;AAC7D,kBAAc,KAAK,mBAAmB,UAAU,CAAC;AACjD,4BAAwB,IAAI,WAAW,gBAAgB,aAAa;AAAA,EACtE;AAEA,SAAO,UAAU,IAAI,CAAC,aAAa;AACjC,UAAM,gBAAgB,wBAAwB,IAAI,SAAS,EAAE,KAAK,CAAC;AACnE,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,IAAI,SAAS;AAAA,MACb,MAAM,SAAS;AAAA,MACf,aAAa,SAAS;AAAA,MACtB,MAAM,SAAS;AAAA,MACf,iBAAiB,SAAS;AAAA,MAC1B,WAAW;AAAA,MACX,iBAAiB,kBAAkB,SAAS,eAAe;AAAA,MAC3D,QAAQ,SAAS;AAAA,MACjB,aAAa,cAAc,SAAS,WAAW;AAAA,MAC/C,cAAc,SAAS,aAAa,IAAI,aAAa;AAAA,MACrD,QAAQ,SAAS,SAAS,MAAM;AAAA,MAChC,cAAc,cAAc,CAAC,KAAK;AAAA,MAClC,oBAAoB;AAAA,MACpB,WAAW,SAAS;AAAA,MACpB,WAAW,SAAS;AAAA,MACpB,GAAG,aAAa,QAAQ;AAAA,IAC1B;AAAA,EACF,CAAC;AACH;AAQO,SAAS,uBACd,UACsB;AACtB,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,IAAI,SAAS;AAAA,IACb,MAAM,SAAS;AAAA,IACf,aAAa,SAAS;AAAA,IACtB,MAAM,SAAS;AAAA,IACf,WAAW;AAAA,IACX,oBAAoB,SAAS,kBAAkB;AAAA,MAC7C,CAAC,gBAAkC;AAAA,QACjC,QAAQ;AAAA,QACR,IAAI,WAAW;AAAA,QACf,OAAO,kBAAkB,WAAW,KAAK;AAAA,QACzC,cAAc,QAAQ,gBAAgB,WAAW,YAAY,IACzD,WAAW,eACX;AAAA,QACJ,YAAY,WAAW;AAAA,QACvB,YAAY,WAAW;AAAA,MACzB;AAAA,IACF;AAAA,IACA,GAAG,aAAa,QAAQ;AAAA,EAC1B;AACF;AAMO,SAAS,+BACd,UAC8B;AAC9B,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,IAAI,SAAS;AAAA,IACb,MAAM,SAAS;AAAA,IACf,aAAa,SAAS;AAAA,IACtB,MAAM,SAAS;AAAA,IACf,iBAAiB,SAAS;AAAA,IAC1B,WAAW;AAAA,IACX,SAAS,SAAS;AAAA,IAClB,QAAQ,SAAS;AAAA,IACjB,eAAe,SAAS;AAAA,IACxB,iBAAiB,SAAS;AAAA,IAC1B,aAAa,cAAc,SAAS,WAAW;AAAA,IAC/C,aAAa,cAAc,SAAS,WAAW;AAAA,IAC/C,cAAc,SAAS,aAAa,IAAI,aAAa;AAAA,IACrD,QAAQ,SAAS,SAAS,MAAM;AAAA,IAChC,WAAW,SAAS;AAAA,IACpB,WAAW,SAAS;AAAA,IACpB,GAAG,aAAa,QAAQ;AAAA,EAC1B;AACF;AAEA,SAAS,cACP,aAC4B;AAC5B,SAAO;AAAA,IACL,iBAAiB,kBAAkB,YAAY,eAAe;AAAA,IAC9D,gBAAgB,YAAY;AAAA,IAC5B,WAAW,YAAY,YAAY;AAAA,IACnC,sBAAsB,YAAY,wBAAwB;AAAA,IAC1D,aAAa,YAAY;AAAA,EAC3B;AACF;AAQO,SAAS,8BACd,UAC6B;AAC7B,QAAM,iBAAiB,SAAS,kBAAkB;AAClD,QAAM,mBAAmB,mBAAmB;AAC5C,QAAM,oBAAoB,SAAS,kBAAkB,IAAI,kBAAkB;AAC3E,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,IAAI,SAAS;AAAA,IACb,MAAM,SAAS;AAAA,IACf,aAAa,SAAS;AAAA,IACtB,MAAM,SAAS;AAAA,IACf,iBAAiB,SAAS;AAAA,IAC1B,WAAW;AAAA,IACX,iBAAiB,kBAAkB,SAAS,eAAe;AAAA,IAC3D,QAAQ,SAAS;AAAA,IACjB,aAAa,cAAc,SAAS,WAAW;AAAA,IAC/C,cAAc,SAAS,aAAa,IAAI,aAAa;AAAA,IACrD,QAAQ,SAAS,SAAS,MAAM;AAAA,IAChC,cAAc,SAAS,aACnB,mBAAmB,SAAS,UAAU,IACtC;AAAA,IACJ,oBAAoB;AAAA,IACpB,WAAW,SAAS;AAAA,IACpB,WAAW,SAAS;AAAA,IACpB,GAAG,aAAa,QAAQ;AAAA,IACxB,eAAe;AAAA,MACb,aAAa;AAAA,MACb,aAAa,mBAAmB;AAAA,MAChC,iBAAiB,mBAAmB,QAAQ;AAAA,MAC5C,SAAS,SAAS;AAAA,MAClB,gBACE,mBAAmB,QAAQ,QAAQ,kBAAkB,cAAc,IAC/D,iBACA;AAAA,MACN,QAAQ,SAAS;AAAA,MACjB,eAAe,SAAS;AAAA,MACxB,iBAAiB,SAAS;AAAA,MAC1B,aAAa,cAAc,SAAS,WAAW;AAAA,MAC/C,YAAY,SAAS;AAAA,MACrB,cAAc,SAAS,aAAa,IAAI,aAAa;AAAA,MACrD,QAAQ,SAAS,SAAS,MAAM;AAAA,IAClC;AAAA,IACA,cAAc;AAAA,MACZ,cAAc,SAAS,aAAa;AAAA,MACpC,YAAY,SAAS,aAAa;AAAA,MAClC,sBAAsB,SAAS,aAAa;AAAA,MAC5C,gBAAgB,SAAS,aAAa;AAAA,MACtC,eAAe,SAAS,aAAa;AAAA,IACvC;AAAA,EACF;AACF;AAEA,eAAsB,qBACpB,KACuC;AACvC,SAAO,aAAa,OAAO,UAAU;AACnC,UAAM,EAAE,cAAc,IAAI,MAAM,IAAI,kBAAkB;AAAA,MACpD;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAsB,+BACpB,KACiD;AACjD,SAAO,aAAa,OAAO,UAAU;AACnC,UAAM,EAAE,wBAAwB,IAAI,MAAM,IAAI,4BAA4B;AAAA,MACxE;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAsB,iCACpB,KACmD;AACnD,SAAO,aAAa,OAAO,UAAU;AACnC,UAAM,EAAE,0BAA0B,IAChC,MAAM,IAAI,8BAA8B,EAAE,OAAO,OAAO,UAAU,CAAC;AACrE,WAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAsB,2BACpB,KAC6C;AAC7C,SAAO,aAAa,OAAO,UAAU;AACnC,UAAM,EAAE,oBAAoB,IAAI,MAAM,IAAI,wBAAwB;AAAA,MAChE;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AACD,WAAO;AAAA,EACT,CAAC;AACH;AAEA,eAAsB,iCACpB,KACmD;AACnD,SAAO,aAAa,OAAO,UAAU;AACnC,UAAM,EAAE,0BAA0B,IAChC,MAAM,IAAI,8BAA8B,EAAE,OAAO,OAAO,UAAU,CAAC;AACrE,WAAO;AAAA,EACT,CAAC;AACH;AAEO,MAAM,gCAAgC;AAAA,EAC3C;AACF;AAEO,MAAM,wCAAwC;AAAA,EACnD;AACF;AAEO,MAAM,8BAA8B;AAAA,EACzC,sBAAsB,mBAAmB;AAAA,EACzC,sBAAsB,6BAA6B;AACrD;AAEO,MAAM,uCAAuC;AAAA,EAClD;AACF;AAcO,SAAS,sBAAsB;AAAA,EACpC,UAAU;AACZ,IAA2B,CAAC,GAA+C;AACzE,QAAM,YAAY,sBAAsB;AAAA,IACtC,UAAU,sBAAsB,mBAAmB;AAAA,IACnD,SAAS;AAAA,IACT;AAAA,EACF,CAAC;AACD,QAAM,cAAc,sBAAsB;AAAA,IACxC,UAAU,sBAAsB,6BAA6B;AAAA,IAC7D,SAAS;AAAA,IACT;AAAA,EACF,CAAC;AAED,QAAM,YAAY,UAAU,aAAa,YAAY;AACrD,SAAO;AAAA,IACL,MAAM,YACF,qBAAqB,UAAU,MAAM,YAAY,IAAI,IACrD,CAAC;AAAA,IACL,WAAW,UAAU,aAAa,YAAY;AAAA,IAC9C,WAAW,UAAU,aAAa,YAAY;AAAA,IAC9C;AAAA,IACA,SAAS,UAAU,WAAW,YAAY;AAAA,IAC1C,OAAO,UAAU,SAAS,YAAY;AAAA,IACtC,cAAc,KAAK,IAAI,UAAU,cAAc,YAAY,YAAY;AAAA,IACvE,SAAS,MAAM;AACb,WAAK,UAAU,QAAQ;AACvB,WAAK,YAAY,QAAQ;AAAA,IAC3B;AAAA,EACF;AACF;AAGO,SAAS,gCAAgC;AAAA,EAC9C,UAAU;AACZ,IAA2B,CAAC,GAA4C;AACtE,QAAM,QAAQ,sBAAsB;AAAA,IAClC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ,CAAC,cAAc,UAAU,IAAI,6BAA6B;AAAA,IAClE;AAAA,EACF,CAAC;AACD,SAAO;AAAA,IACL,MAAM,MAAM,QAAQ,CAAC;AAAA,IACrB,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,IACb,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AACb,WAAK,MAAM,QAAQ;AAAA,IACrB;AAAA,EACF;AACF;AAGO,SAAS,2BAA6D;AAC3E,QAAM,QAAQ,sBAAsB;AAAA,IAClC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ,CAAC,cAAc,UAAU,IAAI,sBAAsB;AAAA,EAC7D,CAAC;AACD,SAAO;AAAA,IACL,MAAM,MAAM,QAAQ,CAAC;AAAA,IACrB,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,IACb,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AACb,WAAK,MAAM,QAAQ;AAAA,IACrB;AAAA,EACF;AACF;AAGO,SAAS,iCAAiC;AAAA,EAC/C,UAAU;AACZ,IAA2B,CAAC,GAA6C;AACvE,QAAM,QAAQ,sBAAsB;AAAA,IAClC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ,CAAC,cAAc,UAAU,IAAI,8BAA8B;AAAA,IACnE;AAAA,EACF,CAAC;AACD,SAAO;AAAA,IACL,MAAM,MAAM,QAAQ,CAAC;AAAA,IACrB,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,IACf,OAAO,MAAM;AAAA,IACb,cAAc,MAAM;AAAA,IACpB,SAAS,MAAM;AACb,WAAK,MAAM,QAAQ;AAAA,IACrB;AAAA,EACF;AACF;AAGO,SAAS,kCAAkC;AAChD,QAAM,cAAc,eAAe;AACnC,SAAO,YAAY,MAAM;AACvB,eAAW,YAAY,6BAA6B;AAClD,kBAAY,kBAAkB,EAAE,SAAS,CAAC;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAClB;","names":[]}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
2
|
-
import {
|
|
3
|
-
export { ListUserApiKeyPermission,
|
|
4
|
-
import {
|
|
2
|
+
import { ListUserApiKeysResponseData, ListUserApiKeysResponse, CreateUserApiKeyResponse, CreateUserApiKeyRequest } from '../../api/endpoint.js';
|
|
3
|
+
export { ListUserApiKeyPermission, useListUserApiKeyPermissions } from '../../api/endpoint.js';
|
|
4
|
+
import { UserApiKeyFieldsFragment } from '../../api/client-graphql/generated.js';
|
|
5
|
+
import '../../api/widgets-api-client.js';
|
|
6
|
+
import 'graphql-request';
|
|
5
7
|
|
|
6
|
-
declare const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
declare const userApiKeysQueryKey: readonly unknown[];
|
|
9
|
+
declare function toUserApiKey(apiKey: UserApiKeyFieldsFragment): ListUserApiKeysResponseData;
|
|
10
|
+
declare const useUserApiKeys: () => _tanstack_react_query.UseQueryResult<NoInfer<ListUserApiKeysResponse>, Error>;
|
|
11
|
+
declare const useInvalidateUserApiKeys: () => () => Promise<void>;
|
|
12
|
+
declare const useCreateUserApiKeyWithInvalidation: () => _tanstack_react_query.UseMutationResult<CreateUserApiKeyResponse, Error, {
|
|
13
|
+
data: CreateUserApiKeyRequest;
|
|
14
|
+
}, unknown>;
|
|
15
|
+
declare const useDeleteUserApiKey: ({ onSuccess, }?: {
|
|
16
|
+
onSuccess?: () => void;
|
|
17
|
+
}) => _tanstack_react_query.UseMutationResult<ListUserApiKeysResponseData, Error, {
|
|
18
|
+
apiKeyId: string;
|
|
14
19
|
}, unknown>;
|
|
15
20
|
declare const useExpireUserApiKey: () => _tanstack_react_query.UseMutationResult<ListUserApiKeysResponseData, Error, {
|
|
16
21
|
apiKeyId: string;
|
|
17
22
|
expiresAt: string | null;
|
|
18
23
|
}, unknown>;
|
|
19
24
|
|
|
20
|
-
export { CreateUserApiKeyResponse, ListUserApiKeysResponse, ListUserApiKeysResponseData, useCreateUserApiKeyWithInvalidation, useExpireUserApiKey, useUserApiKeys };
|
|
25
|
+
export { CreateUserApiKeyResponse, ListUserApiKeysResponse, ListUserApiKeysResponseData, toUserApiKey, useCreateUserApiKeyWithInvalidation, useDeleteUserApiKey, useExpireUserApiKey, useInvalidateUserApiKeys, useUserApiKeys, userApiKeysQueryKey };
|
|
@@ -1,80 +1,141 @@
|
|
|
1
|
+
import { keepPreviousData, useQueryClient } from "@tanstack/react-query";
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
} from "
|
|
6
|
-
import {
|
|
7
|
-
getListUserApiKeysQueryKey,
|
|
8
|
-
useCreateUserApiKey,
|
|
9
|
-
useListUserApiKeys as useGeneratedListUserApiKeys
|
|
10
|
-
} from "../../api/endpoint.js";
|
|
3
|
+
clientGraphqlQueryKey,
|
|
4
|
+
useClientGraphqlMutation,
|
|
5
|
+
useClientGraphqlQuery
|
|
6
|
+
} from "../../api/client-graphql/hooks.js";
|
|
11
7
|
import { useUserApiKeysContext } from "../user-api-keys/user-api-keys-context.js";
|
|
8
|
+
import { API_KEYS_PAGE_SIZE, apiKeyMutationFailure } from "./api-key.js";
|
|
12
9
|
import {
|
|
13
|
-
useWidgetsApiClient
|
|
14
|
-
} from "../../api/widgets-api-client.js";
|
|
15
|
-
import {
|
|
16
|
-
getListUserApiKeysQueryKey as getListUserApiKeysQueryKey2,
|
|
17
|
-
useDeleteUserApiKey,
|
|
18
10
|
useListUserApiKeyPermissions
|
|
19
11
|
} from "../../api/endpoint.js";
|
|
12
|
+
const userApiKeysQueryKey = clientGraphqlQueryKey("ListUserApiKeys");
|
|
13
|
+
function toUserApiKey(apiKey) {
|
|
14
|
+
return {
|
|
15
|
+
id: apiKey.id,
|
|
16
|
+
owner: {
|
|
17
|
+
type: "user",
|
|
18
|
+
id: apiKey.owner.id,
|
|
19
|
+
email: apiKey.owner.email,
|
|
20
|
+
firstName: apiKey.owner.firstName ?? null,
|
|
21
|
+
lastName: apiKey.owner.lastName ?? null,
|
|
22
|
+
displayName: apiKey.owner.displayName
|
|
23
|
+
},
|
|
24
|
+
name: apiKey.name,
|
|
25
|
+
obfuscatedValue: apiKey.obfuscatedValue,
|
|
26
|
+
createdAt: apiKey.createdAt,
|
|
27
|
+
lastUsedAt: apiKey.lastUsedAt ?? null,
|
|
28
|
+
expiresAt: apiKey.expiresAt ?? null,
|
|
29
|
+
permissions: apiKey.permissions
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function unwrapCreateUserApiKey(result) {
|
|
33
|
+
switch (result.__typename) {
|
|
34
|
+
case "UserApiKeyCreated": {
|
|
35
|
+
const { owner: _owner, ...apiKey } = toUserApiKey(result.apiKey);
|
|
36
|
+
return { ...apiKey, value: result.value };
|
|
37
|
+
}
|
|
38
|
+
case "ApiKeyPermissionsNotHeld":
|
|
39
|
+
case "ApiKeyPermissionsUnsupportedForToken":
|
|
40
|
+
case "InvalidApiKeyExpiration":
|
|
41
|
+
case "InvalidApiKeyName":
|
|
42
|
+
case "InvalidApiKeyPermissions":
|
|
43
|
+
throw apiKeyMutationFailure(result.__typename, result.message);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function unwrapExpireUserApiKey(result) {
|
|
47
|
+
switch (result.__typename) {
|
|
48
|
+
case "UserApiKeyExpired":
|
|
49
|
+
return toUserApiKey(result.apiKey);
|
|
50
|
+
case "ApiKeyAlreadyExpired":
|
|
51
|
+
throw apiKeyMutationFailure(
|
|
52
|
+
result.__typename,
|
|
53
|
+
"API key is already expired"
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
20
57
|
const useUserApiKeys = () => {
|
|
21
58
|
const {
|
|
22
59
|
state: { pagination, searchQuery }
|
|
23
60
|
} = useUserApiKeysContext();
|
|
24
|
-
const limit = 10;
|
|
25
61
|
const { before, after } = pagination || {};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
62
|
+
const variables = {
|
|
63
|
+
after: after ?? void 0,
|
|
64
|
+
before: before ?? void 0,
|
|
65
|
+
limit: API_KEYS_PAGE_SIZE,
|
|
66
|
+
search: searchQuery || void 0
|
|
67
|
+
};
|
|
68
|
+
return useClientGraphqlQuery({
|
|
69
|
+
queryKey: clientGraphqlQueryKey("ListUserApiKeys", variables),
|
|
70
|
+
queryFn: async (sdk) => {
|
|
71
|
+
const { userApiKeys } = await sdk.ListUserApiKeys(variables);
|
|
72
|
+
return userApiKeys;
|
|
32
73
|
},
|
|
33
|
-
{
|
|
34
|
-
|
|
35
|
-
|
|
74
|
+
select: (list) => ({
|
|
75
|
+
data: list.data.map(toUserApiKey),
|
|
76
|
+
list_metadata: {
|
|
77
|
+
after: list.listMetadata.after ?? void 0,
|
|
78
|
+
before: list.listMetadata.before ?? void 0
|
|
36
79
|
}
|
|
37
|
-
}
|
|
38
|
-
|
|
80
|
+
}),
|
|
81
|
+
placeholderData: keepPreviousData
|
|
82
|
+
});
|
|
39
83
|
};
|
|
40
|
-
const
|
|
84
|
+
const useInvalidateUserApiKeys = () => {
|
|
41
85
|
const queryClient = useQueryClient();
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
86
|
+
return () => queryClient.invalidateQueries({ queryKey: userApiKeysQueryKey });
|
|
87
|
+
};
|
|
88
|
+
const useCreateUserApiKeyWithInvalidation = () => {
|
|
89
|
+
const invalidate = useInvalidateUserApiKeys();
|
|
90
|
+
return useClientGraphqlMutation({
|
|
91
|
+
mutationFn: async (sdk, { data }) => {
|
|
92
|
+
const { createUserApiKey: result } = await sdk.CreateUserApiKey({
|
|
93
|
+
input: {
|
|
94
|
+
name: data.name,
|
|
95
|
+
permissions: data.permissions,
|
|
96
|
+
expiresAt: data.expiresAt ?? null
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
return unwrapCreateUserApiKey(result);
|
|
100
|
+
},
|
|
101
|
+
onSuccess: invalidate
|
|
102
|
+
});
|
|
103
|
+
};
|
|
104
|
+
const useDeleteUserApiKey = ({
|
|
105
|
+
onSuccess
|
|
106
|
+
} = {}) => {
|
|
107
|
+
const invalidate = useInvalidateUserApiKeys();
|
|
108
|
+
return useClientGraphqlMutation({
|
|
109
|
+
mutationFn: async (sdk, { apiKeyId }) => {
|
|
110
|
+
const { deleteUserApiKey } = await sdk.DeleteUserApiKey({ apiKeyId });
|
|
111
|
+
return toUserApiKey(deleteUserApiKey);
|
|
112
|
+
},
|
|
113
|
+
onSuccess: () => {
|
|
114
|
+
void invalidate();
|
|
115
|
+
onSuccess?.();
|
|
49
116
|
}
|
|
50
117
|
});
|
|
51
118
|
};
|
|
52
119
|
const useExpireUserApiKey = () => {
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
expiresAt
|
|
59
|
-
}) => expireUserApiKey({
|
|
60
|
-
url: `/_widgets/UserApiKeys/${apiKeyId}/expire`,
|
|
61
|
-
method: "POST",
|
|
62
|
-
headers: { "Content-Type": "application/json" },
|
|
63
|
-
data: { expiresAt }
|
|
64
|
-
}),
|
|
65
|
-
onSuccess: () => {
|
|
66
|
-
queryClient.invalidateQueries({
|
|
67
|
-
queryKey: getListUserApiKeysQueryKey()
|
|
120
|
+
const invalidate = useInvalidateUserApiKeys();
|
|
121
|
+
return useClientGraphqlMutation({
|
|
122
|
+
mutationFn: async (sdk, { apiKeyId, expiresAt }) => {
|
|
123
|
+
const { expireUserApiKey: result } = await sdk.ExpireUserApiKey({
|
|
124
|
+
input: { apiKeyId, expiresAt }
|
|
68
125
|
});
|
|
69
|
-
|
|
126
|
+
return unwrapExpireUserApiKey(result);
|
|
127
|
+
},
|
|
128
|
+
onSuccess: invalidate
|
|
70
129
|
});
|
|
71
130
|
};
|
|
72
131
|
export {
|
|
73
|
-
|
|
132
|
+
toUserApiKey,
|
|
74
133
|
useCreateUserApiKeyWithInvalidation,
|
|
75
134
|
useDeleteUserApiKey,
|
|
76
135
|
useExpireUserApiKey,
|
|
136
|
+
useInvalidateUserApiKeys,
|
|
77
137
|
useListUserApiKeyPermissions,
|
|
78
|
-
useUserApiKeys
|
|
138
|
+
useUserApiKeys,
|
|
139
|
+
userApiKeysQueryKey
|
|
79
140
|
};
|
|
80
141
|
//# sourceMappingURL=user-api-key.js.map
|