mirror of
https://github.com/lingble/twenty.git
synced 2026-03-20 04:04:04 +00:00
Merge branch 'main' into horizontal-nav
This commit is contained in:
21
.github/workflows/ci-tinybird.yaml
vendored
Normal file
21
.github/workflows/ci-tinybird.yaml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
name: CI Tinybird
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
pull_request:
|
||||
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
uses: tinybirdco/ci/.github/workflows/ci.yml@main
|
||||
with:
|
||||
data_project_dir: packages/twenty-tinybird
|
||||
secrets:
|
||||
tb_admin_token: ${{ secrets.TB_ADMIN_TOKEN }}
|
||||
tb_host: https://api.eu-central-1.aws.tinybird.co
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -29,3 +29,4 @@ storybook-static
|
||||
.nyc_output
|
||||
test-results/
|
||||
dump.rdb
|
||||
.tinyb
|
||||
|
||||
@@ -30,4 +30,6 @@ Your turn 👇
|
||||
|
||||
» 27-October-2024 by [Vardhaman619](https://oss.gg/vardhaman619) blog Link: [blog](https://dev.to/vardhaman619/my-experience-with-modern-open-source-crm-twenty-crm-2hen)
|
||||
|
||||
» 28-October-2024 by [harshsbhat](https://oss.gg/harshsbhat) blog Link: [blog](https://www.harshbhat.me/blog/twenty-crm)
|
||||
» 28-October-2024 by [harshsbhat](https://oss.gg/harshsbhat) blog Link: [blog](https://www.harshbhat.me/blog/twenty-crm)
|
||||
|
||||
» 28-October-2024 by [AshishViradiya153](https://oss.gg/AshishViradiya153) blog Link: [blog](https://medium.com/@ashishviradiya153/is-twenty-crm-the-right-tool-for-your-business-heres-my-honest-review-0d41e9d8a7eb)
|
||||
@@ -28,4 +28,6 @@ Your turn 👇
|
||||
» 26-October-2024 by [Yash-1511](https://oss.gg/Yash-1511) blog Link: [blog](https://medium.com/@yashp3020/a-comprehensive-guide-to-self-hosting-twenty-crm-with-docker-compose-40ea3fb4afdc)
|
||||
---
|
||||
|
||||
» 28-October-2024 by [harshsbhat](https://oss.gg/harshsbhat) blog Link: [blog](https://www.harshbhat.me/blog/twenty-self-host)
|
||||
» 28-October-2024 by [harshsbhat](https://oss.gg/harshsbhat) blog Link: [blog](https://www.harshbhat.me/blog/twenty-self-host)
|
||||
|
||||
» 28-October-2024 by [AshishViradiya153](https://oss.gg/AshishViradiya153) blog Link: [blog](https://medium.com/@ashishviradiya153/comprehensive-guide-to-self-hosting-twenty-crm-26e7fa36c846)
|
||||
@@ -20,4 +20,6 @@ Your turn 👇
|
||||
|
||||
» 22-October-2024 by [Khaan25](https://oss.gg/Khaan25)
|
||||
|
||||
» 26-October-2024 by [Naprila](https://oss.gg/Naprila)
|
||||
» 26-October-2024 by [Naprila](https://oss.gg/Naprila)
|
||||
|
||||
» 28-October-2024 by [Aditya Deshlahre](https://oss.gg/adityadeshlahre)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { gql } from '@apollo/client';
|
||||
import * as Apollo from '@apollo/client';
|
||||
import { gql } from '@apollo/client';
|
||||
export type Maybe<T> = T | null;
|
||||
export type InputMaybe<T> = Maybe<T>;
|
||||
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
|
||||
@@ -1283,6 +1283,7 @@ export type Workspace = {
|
||||
displayName?: Maybe<Scalars['String']>;
|
||||
domainName?: Maybe<Scalars['String']>;
|
||||
featureFlags?: Maybe<Array<FeatureFlag>>;
|
||||
hasValidEntrepriseKey: Scalars['Boolean'];
|
||||
id: Scalars['UUID'];
|
||||
inviteHash?: Maybe<Scalars['String']>;
|
||||
isPublicInviteLinkEnabled: Scalars['Boolean'];
|
||||
@@ -1688,7 +1689,7 @@ export type ImpersonateMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type ImpersonateMutation = { __typename?: 'Mutation', impersonate: { __typename?: 'Verify', user: { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> }, tokens: { __typename?: 'AuthTokenPair', accessToken: { __typename?: 'AuthToken', token: string, expiresAt: string }, refreshToken: { __typename?: 'AuthToken', token: string, expiresAt: string } } } };
|
||||
export type ImpersonateMutation = { __typename?: 'Mutation', impersonate: { __typename?: 'Verify', user: { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, hasValidEntrepriseKey: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> }, tokens: { __typename?: 'AuthTokenPair', accessToken: { __typename?: 'AuthToken', token: string, expiresAt: string }, refreshToken: { __typename?: 'AuthToken', token: string, expiresAt: string } } } };
|
||||
|
||||
export type RenewTokenMutationVariables = Exact<{
|
||||
appToken: Scalars['String'];
|
||||
@@ -1721,7 +1722,7 @@ export type VerifyMutationVariables = Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type VerifyMutation = { __typename?: 'Mutation', verify: { __typename?: 'Verify', user: { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> }, tokens: { __typename?: 'AuthTokenPair', accessToken: { __typename?: 'AuthToken', token: string, expiresAt: string }, refreshToken: { __typename?: 'AuthToken', token: string, expiresAt: string } } } };
|
||||
export type VerifyMutation = { __typename?: 'Mutation', verify: { __typename?: 'Verify', user: { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, hasValidEntrepriseKey: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> }, tokens: { __typename?: 'AuthTokenPair', accessToken: { __typename?: 'AuthToken', token: string, expiresAt: string }, refreshToken: { __typename?: 'AuthToken', token: string, expiresAt: string } } } };
|
||||
|
||||
export type CheckUserExistsQueryVariables = Exact<{
|
||||
email: Scalars['String'];
|
||||
@@ -1808,7 +1809,7 @@ export type ListSsoIdentityProvidersByWorkspaceIdQueryVariables = Exact<{ [key:
|
||||
|
||||
export type ListSsoIdentityProvidersByWorkspaceIdQuery = { __typename?: 'Query', listSSOIdentityProvidersByWorkspaceId: Array<{ __typename?: 'FindAvailableSSOIDPOutput', type: IdpType, id: string, name: string, issuer: string, status: SsoIdentityProviderStatus }> };
|
||||
|
||||
export type UserQueryFragmentFragment = { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> };
|
||||
export type UserQueryFragmentFragment = { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, hasValidEntrepriseKey: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> };
|
||||
|
||||
export type DeleteUserAccountMutationVariables = Exact<{ [key: string]: never; }>;
|
||||
|
||||
@@ -1825,7 +1826,7 @@ export type UploadProfilePictureMutation = { __typename?: 'Mutation', uploadProf
|
||||
export type GetCurrentUserQueryVariables = Exact<{ [key: string]: never; }>;
|
||||
|
||||
|
||||
export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> } };
|
||||
export type GetCurrentUserQuery = { __typename?: 'Query', currentUser: { __typename?: 'User', id: any, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, analyticsTinybirdJwt?: string | null, onboardingStatus?: OnboardingStatus | null, userVars: any, workspaceMember?: { __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, workspaceMembers?: Array<{ __typename?: 'WorkspaceMember', id: any, colorScheme: string, avatarUrl?: string | null, locale?: string | null, timeZone?: string | null, dateFormat?: WorkspaceMemberDateFormatEnum | null, timeFormat?: WorkspaceMemberTimeFormatEnum | null, name: { __typename?: 'FullName', firstName: string, lastName: string } }> | null, defaultWorkspace: { __typename?: 'Workspace', id: any, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, activationStatus: WorkspaceActivationStatus, isPublicInviteLinkEnabled: boolean, hasValidEntrepriseKey: boolean, metadataVersion: number, workspaceMembersCount?: number | null, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: any, key: string, value: boolean, workspaceId: string }> | null, currentBillingSubscription?: { __typename?: 'BillingSubscription', id: any, status: SubscriptionStatus, interval?: SubscriptionInterval | null } | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: any, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> } };
|
||||
|
||||
export type ActivateWorkflowVersionMutationVariables = Exact<{
|
||||
workflowVersionId: Scalars['String'];
|
||||
@@ -2062,6 +2063,7 @@ export const UserQueryFragmentFragmentDoc = gql`
|
||||
allowImpersonation
|
||||
activationStatus
|
||||
isPublicInviteLinkEnabled
|
||||
hasValidEntrepriseKey
|
||||
featureFlags {
|
||||
id
|
||||
key
|
||||
|
||||
@@ -14,6 +14,7 @@ export type CurrentWorkspace = Pick<
|
||||
| 'currentBillingSubscription'
|
||||
| 'workspaceMembersCount'
|
||||
| 'isPublicInviteLinkEnabled'
|
||||
| 'hasValidEntrepriseKey'
|
||||
| 'metadataVersion'
|
||||
>;
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ const Wrapper = getJestMetadataAndApolloMocksWrapper({
|
||||
featureFlags: [],
|
||||
allowImpersonation: false,
|
||||
activationStatus: WorkspaceActivationStatus.Active,
|
||||
hasValidEntrepriseKey: false,
|
||||
metadataVersion: 1,
|
||||
isPublicInviteLinkEnabled: false,
|
||||
});
|
||||
|
||||
@@ -13,7 +13,6 @@ import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownM
|
||||
import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem';
|
||||
import { SelectableList } from '@/ui/layout/selectable-list/components/SelectableList';
|
||||
import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList';
|
||||
import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem';
|
||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
|
||||
@@ -119,22 +118,15 @@ export const MultiRecordSelect = ({
|
||||
);
|
||||
})}
|
||||
</SelectableList>
|
||||
{objectRecordsIdsMultiSelect?.length === 0 &&
|
||||
!recordMultiSelectIsLoading && <MenuItem text="No result" />}
|
||||
</DropdownMenuItemsContainer>
|
||||
);
|
||||
|
||||
const createNewButton = isDefined(onCreate) && (
|
||||
<>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItemsContainer>
|
||||
<CreateNewButton
|
||||
onClick={() => onCreate?.(relationPickerSearchFilter)}
|
||||
LeftIcon={IconPlus}
|
||||
text="Add New"
|
||||
/>
|
||||
</DropdownMenuItemsContainer>
|
||||
</>
|
||||
<CreateNewButton
|
||||
onClick={() => onCreate?.(relationPickerSearchFilter)}
|
||||
LeftIcon={IconPlus}
|
||||
text="Add New"
|
||||
/>
|
||||
);
|
||||
|
||||
return (
|
||||
@@ -148,12 +140,20 @@ export const MultiRecordSelect = ({
|
||||
<DropdownMenu ref={containerRef} data-select-disable>
|
||||
{dropdownPlacement?.includes('end') && (
|
||||
<>
|
||||
{createNewButton}
|
||||
<DropdownMenuItemsContainer>
|
||||
{createNewButton}
|
||||
</DropdownMenuItemsContainer>
|
||||
<DropdownMenuSeparator />
|
||||
{results}
|
||||
{recordMultiSelectIsLoading && !relationPickerSearchFilter && (
|
||||
<DropdownMenuSkeletonItem />
|
||||
<>
|
||||
<DropdownMenuSkeletonItem />
|
||||
<DropdownMenuSeparator />
|
||||
</>
|
||||
)}
|
||||
{objectRecordsIdsMultiSelect?.length > 0 && (
|
||||
<DropdownMenuSeparator />
|
||||
)}
|
||||
<DropdownMenuSeparator />
|
||||
</>
|
||||
)}
|
||||
<DropdownMenuSearchInput
|
||||
@@ -166,10 +166,18 @@ export const MultiRecordSelect = ({
|
||||
<>
|
||||
<DropdownMenuSeparator />
|
||||
{recordMultiSelectIsLoading && !relationPickerSearchFilter && (
|
||||
<DropdownMenuSkeletonItem />
|
||||
<>
|
||||
<DropdownMenuSkeletonItem />
|
||||
<DropdownMenuSeparator />
|
||||
</>
|
||||
)}
|
||||
{results}
|
||||
{createNewButton}
|
||||
{objectRecordsIdsMultiSelect?.length > 0 && (
|
||||
<DropdownMenuSeparator />
|
||||
)}
|
||||
<DropdownMenuItemsContainer>
|
||||
{createNewButton}
|
||||
</DropdownMenuItemsContainer>
|
||||
</>
|
||||
)}
|
||||
</DropdownMenu>
|
||||
|
||||
@@ -1,61 +1,40 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { Link } from 'react-router-dom';
|
||||
|
||||
import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath';
|
||||
import { SettingsPath } from '@/types/SettingsPath';
|
||||
|
||||
import { SettingsSSOIdentitiesProvidersListEmptyStateCard } from '@/settings/security/components/SettingsSSOIdentitiesProvidersListEmptyStateCard';
|
||||
import { SettingsSSOIdentityProviderRowRightContainer } from '@/settings/security/components/SettingsSSOIdentityProviderRowRightContainer';
|
||||
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
|
||||
import { SettingsCard } from '@/settings/components/SettingsCard';
|
||||
import { SettingsSSOIdentitiesProvidersListCardWrapper } from '@/settings/security/components/SettingsSSOIdentitiesProvidersListCardWrapper';
|
||||
import { SSOIdentitiesProvidersState } from '@/settings/security/states/SSOIdentitiesProviders.state';
|
||||
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { useRecoilState } from 'recoil';
|
||||
import { useListSsoIdentityProvidersByWorkspaceIdQuery } from '~/generated/graphql';
|
||||
import { SettingsListCard } from '../../components/SettingsListCard';
|
||||
import { guessSSOIdentityProviderIconByUrl } from '../utils/guessSSOIdentityProviderIconByUrl';
|
||||
import styled from '@emotion/styled';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { IconKey } from 'twenty-ui';
|
||||
|
||||
const StyledLink = styled(Link)<{ isDisabled: boolean }>`
|
||||
pointer-events: ${({ isDisabled }) => (isDisabled ? 'none' : 'auto')};
|
||||
text-decoration: none;
|
||||
`;
|
||||
|
||||
export const SettingsSSOIdentitiesProvidersListCard = () => {
|
||||
const navigate = useNavigate();
|
||||
const { enqueueSnackBar } = useSnackBar();
|
||||
const currentWorkspace = useRecoilValue(currentWorkspaceState);
|
||||
|
||||
const [SSOIdentitiesProviders, setSSOIdentitiesProviders] = useRecoilState(
|
||||
SSOIdentitiesProvidersState,
|
||||
);
|
||||
const SSOIdentitiesProviders = useRecoilValue(SSOIdentitiesProvidersState);
|
||||
|
||||
const { loading } = useListSsoIdentityProvidersByWorkspaceIdQuery({
|
||||
onCompleted: (data) => {
|
||||
setSSOIdentitiesProviders(
|
||||
data?.listSSOIdentityProvidersByWorkspaceId ?? [],
|
||||
);
|
||||
},
|
||||
onError: (error: Error) => {
|
||||
enqueueSnackBar(error.message, {
|
||||
variant: SnackBarVariant.Error,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
return !SSOIdentitiesProviders.length && !loading ? (
|
||||
<SettingsSSOIdentitiesProvidersListEmptyStateCard />
|
||||
return !SSOIdentitiesProviders.length ? (
|
||||
<StyledLink
|
||||
to={getSettingsPagePath(SettingsPath.NewSSOIdentityProvider)}
|
||||
isDisabled={currentWorkspace?.hasValidEntrepriseKey !== true}
|
||||
>
|
||||
<SettingsCard
|
||||
title="Add SSO Identity Provider"
|
||||
disabled={currentWorkspace?.hasValidEntrepriseKey !== true}
|
||||
Icon={<IconKey />}
|
||||
/>
|
||||
</StyledLink>
|
||||
) : (
|
||||
<SettingsListCard
|
||||
items={SSOIdentitiesProviders}
|
||||
getItemLabel={(SSOIdentityProvider) =>
|
||||
`${SSOIdentityProvider.name} - ${SSOIdentityProvider.type}`
|
||||
}
|
||||
isLoading={loading}
|
||||
RowIconFn={(SSOIdentityProvider) =>
|
||||
guessSSOIdentityProviderIconByUrl(SSOIdentityProvider.issuer)
|
||||
}
|
||||
RowRightComponent={({ item: SSOIdp }) => (
|
||||
<SettingsSSOIdentityProviderRowRightContainer SSOIdp={SSOIdp} />
|
||||
)}
|
||||
hasFooter
|
||||
footerButtonLabel="Add SSO Identity Provider"
|
||||
onFooterButtonClick={() =>
|
||||
navigate(getSettingsPagePath(SettingsPath.NewSSOIdentityProvider))
|
||||
}
|
||||
/>
|
||||
<SettingsSSOIdentitiesProvidersListCardWrapper />
|
||||
);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { guessSSOIdentityProviderIconByUrl } from '@/settings/security/utils/guessSSOIdentityProviderIconByUrl';
|
||||
import { SettingsSSOIdentityProviderRowRightContainer } from '@/settings/security/components/SettingsSSOIdentityProviderRowRightContainer';
|
||||
import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath';
|
||||
import { SettingsPath } from '@/types/SettingsPath';
|
||||
import { SettingsListCard } from '@/settings/components/SettingsListCard';
|
||||
import { useListSsoIdentityProvidersByWorkspaceIdQuery } from '~/generated/graphql';
|
||||
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
|
||||
import { SSOIdentitiesProvidersState } from '@/settings/security/states/SSOIdentitiesProviders.state';
|
||||
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
|
||||
import { useRecoilState } from 'recoil';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
export const SettingsSSOIdentitiesProvidersListCardWrapper = () => {
|
||||
const { enqueueSnackBar } = useSnackBar();
|
||||
const navigate = useNavigate();
|
||||
|
||||
const [SSOIdentitiesProviders, setSSOIdentitiesProviders] = useRecoilState(
|
||||
SSOIdentitiesProvidersState,
|
||||
);
|
||||
|
||||
const { loading } = useListSsoIdentityProvidersByWorkspaceIdQuery({
|
||||
onCompleted: (data) => {
|
||||
setSSOIdentitiesProviders(
|
||||
data?.listSSOIdentityProvidersByWorkspaceId ?? [],
|
||||
);
|
||||
},
|
||||
onError: (error: Error) => {
|
||||
enqueueSnackBar(error.message, {
|
||||
variant: SnackBarVariant.Error,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
return (
|
||||
<SettingsListCard
|
||||
items={SSOIdentitiesProviders}
|
||||
getItemLabel={(SSOIdentityProvider) =>
|
||||
`${SSOIdentityProvider.name} - ${SSOIdentityProvider.type}`
|
||||
}
|
||||
isLoading={loading}
|
||||
RowIconFn={(SSOIdentityProvider) =>
|
||||
guessSSOIdentityProviderIconByUrl(SSOIdentityProvider.issuer)
|
||||
}
|
||||
RowRightComponent={({ item: SSOIdp }) => (
|
||||
<SettingsSSOIdentityProviderRowRightContainer SSOIdp={SSOIdp} />
|
||||
)}
|
||||
hasFooter
|
||||
footerButtonLabel="Add SSO Identity Provider"
|
||||
onFooterButtonClick={() =>
|
||||
navigate(getSettingsPagePath(SettingsPath.NewSSOIdentityProvider))
|
||||
}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -1,33 +0,0 @@
|
||||
/* @license Enterprise */
|
||||
|
||||
import { getSettingsPagePath } from '@/settings/utils/getSettingsPagePath';
|
||||
import { SettingsPath } from '@/types/SettingsPath';
|
||||
import styled from '@emotion/styled';
|
||||
import { Button, Card, CardContent, CardHeader, IconKey } from 'twenty-ui';
|
||||
|
||||
const StyledHeader = styled(CardHeader)`
|
||||
align-items: center;
|
||||
display: flex;
|
||||
height: ${({ theme }) => theme.spacing(6)};
|
||||
`;
|
||||
|
||||
const StyledBody = styled(CardContent)`
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
`;
|
||||
|
||||
export const SettingsSSOIdentitiesProvidersListEmptyStateCard = () => {
|
||||
return (
|
||||
<Card>
|
||||
<StyledHeader>{'No SSO Identity Providers Configured'}</StyledHeader>
|
||||
<StyledBody>
|
||||
<Button
|
||||
Icon={IconKey}
|
||||
title="Add SSO Identity Provider"
|
||||
variant="secondary"
|
||||
to={getSettingsPagePath(SettingsPath.NewSSOIdentityProvider)}
|
||||
/>
|
||||
</StyledBody>
|
||||
</Card>
|
||||
);
|
||||
};
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
size,
|
||||
useFloating,
|
||||
} from '@floating-ui/react';
|
||||
import { MouseEvent, useEffect, useRef, useState } from 'react';
|
||||
import { MouseEvent, useEffect, useRef } from 'react';
|
||||
import { Keys } from 'react-hotkeys-hook';
|
||||
import { Key } from 'ts-key-enum';
|
||||
|
||||
@@ -22,7 +22,6 @@ import { isDefined } from '~/utils/isDefined';
|
||||
import { useDropdown } from '../hooks/useDropdown';
|
||||
import { useInternalHotkeyScopeManagement } from '../hooks/useInternalHotkeyScopeManagement';
|
||||
|
||||
import { flushSync } from 'react-dom';
|
||||
import { DropdownMenu } from './DropdownMenu';
|
||||
import { DropdownOnToggleEffect } from './DropdownOnToggleEffect';
|
||||
|
||||
@@ -65,9 +64,6 @@ export const Dropdown = ({
|
||||
onOpen,
|
||||
}: DropdownProps) => {
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
const [maxHeight, setMaxHeight] = useState<string | number | undefined>(
|
||||
undefined,
|
||||
);
|
||||
|
||||
const {
|
||||
isDropdownOpen,
|
||||
@@ -75,6 +71,7 @@ export const Dropdown = ({
|
||||
closeDropdown,
|
||||
dropdownWidth,
|
||||
setDropdownPlacement,
|
||||
resetDropdown,
|
||||
} = useDropdown(dropdownId);
|
||||
|
||||
const offsetMiddlewares = [];
|
||||
@@ -93,8 +90,11 @@ export const Dropdown = ({
|
||||
flip(),
|
||||
size({
|
||||
padding: 12 + 20, // 12px for padding bottom, 20px for dropdown bottom margin target
|
||||
apply: ({ availableHeight }) => {
|
||||
flushSync(() => setMaxHeight(availableHeight));
|
||||
apply: ({ availableHeight, elements }) => {
|
||||
elements.floating.style.maxHeight =
|
||||
availableHeight >= elements.floating.scrollHeight
|
||||
? ''
|
||||
: `${availableHeight}px`;
|
||||
},
|
||||
}),
|
||||
...offsetMiddlewares,
|
||||
@@ -144,6 +144,12 @@ export const Dropdown = ({
|
||||
[closeDropdown],
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
resetDropdown();
|
||||
};
|
||||
}, [resetDropdown]);
|
||||
|
||||
return (
|
||||
<DropdownScope dropdownScopeId={getScopeIdFromComponentId(dropdownId)}>
|
||||
<div ref={containerRef} className={className}>
|
||||
@@ -169,7 +175,7 @@ export const Dropdown = ({
|
||||
width={dropdownMenuWidth ?? dropdownWidth}
|
||||
data-select-disable
|
||||
ref={refs.setFloating}
|
||||
style={{ ...floatingStyles, maxHeight }}
|
||||
style={floatingStyles}
|
||||
>
|
||||
{dropdownComponents}
|
||||
</DropdownMenu>
|
||||
@@ -181,7 +187,7 @@ export const Dropdown = ({
|
||||
width={dropdownMenuWidth ?? dropdownWidth}
|
||||
data-select-disable
|
||||
ref={refs.setFloating}
|
||||
style={{ ...floatingStyles, maxHeight }}
|
||||
style={floatingStyles}
|
||||
>
|
||||
{dropdownComponents}
|
||||
</DropdownMenu>
|
||||
|
||||
@@ -25,7 +25,7 @@ const StyledDropdownMenu = styled.div<{
|
||||
|
||||
flex-direction: column;
|
||||
z-index: 30;
|
||||
overflow-y: scroll;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
width: ${({ width = 160 }) =>
|
||||
typeof width === 'number' ? `${width}px` : width};
|
||||
|
||||
@@ -7,13 +7,13 @@ type StyledDropdownButtonProps = {
|
||||
|
||||
export const StyledDropdownButtonContainer = styled.div<StyledDropdownButtonProps>`
|
||||
align-items: center;
|
||||
background: ${({ theme }) => theme.background.primary};
|
||||
background: ${({ theme, isUnfolded }) =>
|
||||
isUnfolded ? theme.background.transparent.light : theme.background.primary};
|
||||
border-radius: ${({ theme }) => theme.border.radius.sm};
|
||||
color: ${({ isActive, theme, color }) =>
|
||||
color ?? (isActive ? theme.color.blue : 'none')};
|
||||
color: ${({ isActive, theme }) =>
|
||||
isActive ? theme.color.blue : theme.font.color.secondary};
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
filter: ${(props) => (props.isUnfolded ? 'brightness(0.95)' : 'none')};
|
||||
|
||||
padding: ${({ theme }) => theme.spacing(1)};
|
||||
padding-left: ${({ theme }) => theme.spacing(2)};
|
||||
@@ -22,6 +22,9 @@ export const StyledDropdownButtonContainer = styled.div<StyledDropdownButtonProp
|
||||
user-select: none;
|
||||
|
||||
&:hover {
|
||||
filter: brightness(0.95);
|
||||
background: ${({ theme, isUnfolded }) =>
|
||||
isUnfolded
|
||||
? theme.background.transparent.medium
|
||||
: theme.background.transparent.light};
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -8,14 +8,14 @@ type StyledDropdownButtonProps = {
|
||||
export const StyledHeaderDropdownButton = styled.button<StyledDropdownButtonProps>`
|
||||
font-family: inherit;
|
||||
align-items: center;
|
||||
background: ${({ theme }) => theme.background.primary};
|
||||
background: ${({ theme, isUnfolded }) =>
|
||||
isUnfolded ? theme.background.transparent.light : theme.background.primary};
|
||||
border: none;
|
||||
border-radius: ${({ theme }) => theme.border.radius.sm};
|
||||
color: ${({ isActive, theme, color }) =>
|
||||
color ?? (isActive ? theme.color.blue : theme.font.color.secondary)};
|
||||
color: ${({ isActive, theme }) =>
|
||||
isActive ? theme.color.blue : theme.font.color.secondary};
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
filter: ${(props) => (props.isUnfolded ? 'brightness(0.95)' : 'none')};
|
||||
|
||||
padding: ${({ theme }) => theme.spacing(1)};
|
||||
padding-left: ${({ theme }) => theme.spacing(2)};
|
||||
@@ -24,6 +24,9 @@ export const StyledHeaderDropdownButton = styled.button<StyledDropdownButtonProp
|
||||
user-select: none;
|
||||
|
||||
&:hover {
|
||||
filter: brightness(0.95);
|
||||
background: ${({ theme, isUnfolded }) =>
|
||||
isUnfolded
|
||||
? theme.background.transparent.medium
|
||||
: theme.background.transparent.light};
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useRecoilState } from 'recoil';
|
||||
import { useRecoilCallback, useRecoilState } from 'recoil';
|
||||
|
||||
import { useDropdownStates } from '@/ui/layout/dropdown/hooks/internal/useDropdownStates';
|
||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||
@@ -56,6 +56,16 @@ export const useDropdown = (dropdownId?: string) => {
|
||||
}
|
||||
};
|
||||
|
||||
const resetDropdown = useRecoilCallback(
|
||||
({ reset }) =>
|
||||
() => {
|
||||
reset(dropdownHotkeyScopeState);
|
||||
reset(dropdownWidthState);
|
||||
reset(isDropdownOpenState);
|
||||
},
|
||||
[dropdownHotkeyScopeState, dropdownWidthState, isDropdownOpenState],
|
||||
);
|
||||
|
||||
return {
|
||||
scopeId,
|
||||
isDropdownOpen,
|
||||
@@ -66,5 +76,6 @@ export const useDropdown = (dropdownId?: string) => {
|
||||
setDropdownWidth,
|
||||
dropdownPlacement,
|
||||
setDropdownPlacement,
|
||||
resetDropdown,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -20,6 +20,7 @@ const StyledContainer = styled.div`
|
||||
`;
|
||||
const StyledSingleWorkspaceContainer = styled(StyledContainer)`
|
||||
gap: ${({ theme }) => theme.spacing(2)};
|
||||
padding: ${({ theme }) => theme.spacing(1)};
|
||||
`;
|
||||
|
||||
const StyledLogo = styled.div<{ logo: string }>`
|
||||
|
||||
@@ -25,6 +25,7 @@ export const USER_QUERY_FRAGMENT = gql`
|
||||
allowImpersonation
|
||||
activationStatus
|
||||
isPublicInviteLinkEnabled
|
||||
hasValidEntrepriseKey
|
||||
featureFlags {
|
||||
id
|
||||
key
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { H2Title, Section } from 'twenty-ui';
|
||||
import { H2Title, Section, IconLock, Tag } from 'twenty-ui';
|
||||
|
||||
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
|
||||
import { SettingsReadDocumentationButton } from '@/settings/developers/components/SettingsReadDocumentationButton';
|
||||
@@ -23,7 +23,18 @@ export const SettingsSecurity = () => {
|
||||
>
|
||||
<SettingsPageContainer>
|
||||
<Section>
|
||||
<H2Title title="SSO" description="Configure an SSO connection" />
|
||||
<H2Title
|
||||
title="SSO"
|
||||
description="Configure an SSO connection"
|
||||
addornment={
|
||||
<Tag
|
||||
text={'Enterprise'}
|
||||
color={'transparent'}
|
||||
Icon={IconLock}
|
||||
variant={'border'}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
<SettingsSSOIdentitiesProvidersListCard />
|
||||
</Section>
|
||||
<Section>
|
||||
|
||||
@@ -43,6 +43,7 @@ export const mockDefaultWorkspace: Workspace = {
|
||||
isPublicInviteLinkEnabled: true,
|
||||
allowImpersonation: true,
|
||||
activationStatus: WorkspaceActivationStatus.Active,
|
||||
hasValidEntrepriseKey: false,
|
||||
featureFlags: [
|
||||
{
|
||||
id: '1492de61-5018-4368-8923-4f1eeaf988c4',
|
||||
|
||||
@@ -116,6 +116,7 @@ export class EnvironmentVariables {
|
||||
protocols: ['postgres'],
|
||||
require_tld: false,
|
||||
allow_underscores: true,
|
||||
require_host: false,
|
||||
})
|
||||
PG_DATABASE_URL: string;
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorat
|
||||
import { DemoEnvGuard } from 'src/engine/guards/demo.env.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { streamToBuffer } from 'src/utils/stream-to-buffer';
|
||||
import { isDefined } from 'src/utils/is-defined';
|
||||
|
||||
const getHMACKey = (email?: string, key?: string | null) => {
|
||||
if (!email || !key) return null;
|
||||
|
||||
@@ -14,6 +14,7 @@ import { FileFolder } from 'src/engine/core-modules/file/interfaces/file-folder.
|
||||
|
||||
import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity';
|
||||
import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service';
|
||||
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
|
||||
import { FileUploadService } from 'src/engine/core-modules/file/file-upload/services/file-upload.service';
|
||||
import { FileService } from 'src/engine/core-modules/file/services/file.service';
|
||||
import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service';
|
||||
@@ -26,6 +27,7 @@ import { DemoEnvGuard } from 'src/engine/guards/demo.env.guard';
|
||||
import { UserAuthGuard } from 'src/engine/guards/user-auth.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { assert } from 'src/utils/assert';
|
||||
import { isDefined } from 'src/utils/is-defined';
|
||||
import { streamToBuffer } from 'src/utils/stream-to-buffer';
|
||||
|
||||
import { Workspace } from './workspace.entity';
|
||||
@@ -38,6 +40,7 @@ export class WorkspaceResolver {
|
||||
constructor(
|
||||
private readonly workspaceService: WorkspaceService,
|
||||
private readonly userWorkspaceService: UserWorkspaceService,
|
||||
private readonly environmentService: EnvironmentService,
|
||||
private readonly fileUploadService: FileUploadService,
|
||||
private readonly fileService: FileService,
|
||||
private readonly billingSubscriptionService: BillingSubscriptionService,
|
||||
@@ -136,4 +139,9 @@ export class WorkspaceResolver {
|
||||
|
||||
return workspace.logo ?? '';
|
||||
}
|
||||
|
||||
@ResolveField(() => Boolean)
|
||||
hasValidEntrepriseKey(): boolean {
|
||||
return isDefined(this.environmentService.get('ENTERPRISE_KEY'));
|
||||
}
|
||||
}
|
||||
|
||||
2
packages/twenty-tinybird/.gitignore
vendored
Normal file
2
packages/twenty-tinybird/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.tinyb
|
||||
.venv
|
||||
18
packages/twenty-tinybird/.tinyenv
Normal file
18
packages/twenty-tinybird/.tinyenv
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
VERSION=0.0.0
|
||||
|
||||
|
||||
|
||||
##########
|
||||
# OPTIONAL env vars
|
||||
|
||||
# Don't print CLI version warning message if there's a new available version
|
||||
# TB_VERSION_WARNING=0
|
||||
|
||||
# Skip regression tests
|
||||
# TB_SKIP_REGRESSION=0
|
||||
|
||||
# Use `OBFUSCATE_REGEX_PATTERN` and `OBFUSCATE_PATTERN_SEPARATOR` environment variables to define a regex pattern and a separator (in case of a single string with multiple regex) to obfuscate secrets in the CLI output.
|
||||
# OBFUSCATE_REGEX_PATTERN="https://(www\.)?[^/]+||^Follow these instructions =>"
|
||||
# OBFUSCATE_PATTERN_SEPARATOR=||
|
||||
##########
|
||||
42
packages/twenty-tinybird/README.md
Normal file
42
packages/twenty-tinybird/README.md
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
## How to use
|
||||
Create a virtual enviroment and install tinybird
|
||||
```sh
|
||||
python3 -m venv .venv
|
||||
source .venv/bin/activate
|
||||
pip install tinybird-cli
|
||||
```
|
||||
Authenticate using your admin token from your workspace (twenty_analytics_cli_playground)
|
||||
```sh
|
||||
tb auth -i
|
||||
|
||||
** List of available regions:
|
||||
[1] us-east4 (gcp) (https://app.us-east.tinybird.co)
|
||||
[2] europe-west3 (gcp) (https://app.tinybird.co/gcp/europe-west3)
|
||||
[3] us-east-1 (aws) (https://app.tinybird.co/aws/us-east-1)
|
||||
[4] us-west-2 (aws) (https://app.tinybird.co/aws/us-west-2)
|
||||
[5] eu-central-1 (aws) (https://app.tinybird.co/aws/eu-central-1) <- this
|
||||
[0] Cancel
|
||||
|
||||
Use region [5]:
|
||||
Copy the "admin your@email" token from from https://app.tinybird.co/tokens and paste it here: <pasted Token>
|
||||
** Auth successful!
|
||||
** Configuration written to .tinyb file, consider adding it to .gitignore
|
||||
```
|
||||
To sync your changes to Tinybird use:
|
||||
```sh
|
||||
tb push --force --push-deps
|
||||
```
|
||||
To pull data from Tinybird use:
|
||||
```sh
|
||||
tb pull
|
||||
```
|
||||
Things I learned:
|
||||
|
||||
* When creating Materialied Views think about populating it first using the files from the fixtures
|
||||
* When pushing your pipes prefer to push one by one so you can have more coherent error messages
|
||||
* The Include files will be nodes that will be added at the start of your node in Tinybird UI
|
||||
* It's best to stick only with only the CLI or the UI when developping in Tinybird
|
||||
* If you want to format the data us the tb fmt command, perhaps we can add it to the linter in a next pull request.
|
||||
|
||||
|
||||
11
packages/twenty-tinybird/datasources/event.datasource
Normal file
11
packages/twenty-tinybird/datasources/event.datasource
Normal file
@@ -0,0 +1,11 @@
|
||||
SCHEMA >
|
||||
`action` String `json:$.action`,
|
||||
`timestamp` DateTime64(3) `json:$.timestamp`,
|
||||
`version` String `json:$.version`,
|
||||
`userId` String `json:$.userId` DEFAULT '',
|
||||
`workspaceId` String `json:$.workspaceId` DEFAULT '',
|
||||
`payload` String `json:$.payload`
|
||||
|
||||
ENGINE MergeTree
|
||||
ENGINE_PARTITION_KEY toYear(timestamp)
|
||||
ENGINE_SORTING_KEY action, timestamp
|
||||
283
packages/twenty-tinybird/datasources/fixtures/event.csv
Normal file
283
packages/twenty-tinybird/datasources/fixtures/event.csv
Normal file
@@ -0,0 +1,283 @@
|
||||
"action","timestamp","version","userId","workspaceId","payload"
|
||||
"apiKey.created","2024-10-24 15:55:35.177","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 15:55:35.178","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 15:55:35.212","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 15:57:42.810","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 15:57:42.812","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 15:57:42.989","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 16:03:18.134","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 16:03:18.135","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"apiKey.created","2024-10-24 16:03:18.205","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 15:55:31.949","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 15:55:31.950","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 15:55:32.027","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 15:57:31.970","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 15:57:31.979","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 15:57:34.033","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 16:03:17.602","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 16:03:17.602","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"attachment.created","2024-10-24 16:03:17.755","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 15:55:33.498","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 15:55:33.499","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 15:55:33.602","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 15:57:42.984","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 15:57:42.986","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 15:57:43.219","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 16:03:19.139","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 16:03:19.141","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"auditLog.created","2024-10-24 16:03:19.289","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 15:55:33.732","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 15:55:33.733","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 15:55:33.836","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 15:57:43.255","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 15:57:43.257","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 15:57:43.454","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 16:03:18.813","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 16:03:18.814","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"blocklist.created","2024-10-24 16:03:19.148","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:55:31.547","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:55:32.156","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:55:32.158","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:55:32.279","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:57:26.908","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:57:26.914","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:57:26.914","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 15:57:27.059","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 16:03:16.523","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 16:03:16.524","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 16:03:16.525","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannel.created","2024-10-24 16:03:16.686","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 15:55:32.230","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 15:55:32.231","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 15:55:32.334","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 15:57:27.238","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 15:57:27.238","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 15:57:27.611","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 16:03:16.756","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 16:03:16.757","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarChannelEventAssociation.created","2024-10-24 16:03:16.861","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEvent.created","2024-10-24 15:55:31.420","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEvent.created","2024-10-24 15:55:32.015","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEvent.created","2024-10-24 15:57:26.778","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEvent.created","2024-10-24 15:57:27.090","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEvent.created","2024-10-24 16:03:16.377","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEvent.created","2024-10-24 16:03:16.692","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 15:55:31.728","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 15:55:31.730","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 15:55:32.060","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 15:57:26.901","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 15:57:26.902","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 15:57:27.045","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 16:03:16.517","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 16:03:16.517","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"calendarEventParticipant.created","2024-10-24 16:03:16.682","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-22 09:31:13.563","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-22 10:17:00.671","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-22 13:16:50.935","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 15:55:36.922","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 15:55:36.927","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 15:55:38.123","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 15:57:34.430","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 15:57:34.443","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 15:57:37.343","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 16:03:17.741","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 16:03:17.742","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"company.created","2024-10-24 16:03:17.854","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:55:31.333","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:55:33.225","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:55:33.226","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:55:33.271","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:57:26.651","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:57:44.533","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:57:44.534","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 15:57:44.621","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 16:03:16.374","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 16:03:18.781","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 16:03:18.782","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"connectedAccount.created","2024-10-24 16:03:18.922","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 15:55:34.589","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 15:55:34.590","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 15:55:34.651","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 15:57:44.022","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 15:57:44.023","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 15:57:44.183","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 16:03:20.770","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 16:03:20.772","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"favorite.created","2024-10-24 16:03:20.964","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"function.execute","2024-10-22 14:51:25.149","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":37,""status"":""SUCCESS"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""testingMiVida""}"
|
||||
"function.execute","2024-10-22 14:54:59.296","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":38,""status"":""ERROR"",""errorType"":""ReferenceError"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""testingMiVida""}"
|
||||
"function.execute","2024-10-22 14:55:00.677","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":32,""status"":""ERROR"",""errorType"":""ReferenceError"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""testingMiVida""}"
|
||||
"function.execute","2024-10-22 14:55:03.512","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":34,""status"":""ERROR"",""errorType"":""ReferenceError"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""testingMiVida""}"
|
||||
"message.created","2024-10-24 15:55:32.004","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"message.created","2024-10-24 15:57:26.780","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"message.created","2024-10-24 16:03:16.384","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 15:55:32.169","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 15:55:32.170","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 15:55:32.281","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 15:57:26.872","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 15:57:26.872","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 15:57:27.035","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 16:03:16.506","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 16:03:16.507","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannel.created","2024-10-24 16:03:16.661","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 15:55:32.184","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 15:55:32.185","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 15:55:32.303","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 15:57:26.714","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 15:57:26.717","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 15:57:26.869","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 16:03:16.385","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 16:03:16.386","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageChannelMessageAssociation.created","2024-10-24 16:03:16.553","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 15:55:32.236","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 15:55:32.237","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 15:55:32.310","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 15:57:26.944","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 15:57:26.945","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 15:57:27.114","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 16:03:16.499","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 16:03:16.499","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageParticipant.created","2024-10-24 16:03:16.684","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 15:55:34.758","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 15:55:34.759","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 15:55:34.877","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 15:57:35.725","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 15:57:35.803","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 15:57:37.351","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 16:03:17.807","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 16:03:17.808","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"messageThread.created","2024-10-24 16:03:17.879","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 15:55:35.486","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 15:55:35.486","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 15:55:35.671","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 15:57:36.207","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 15:57:36.209","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 15:57:37.487","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 16:03:17.594","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 16:03:17.594","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"note.created","2024-10-24 16:03:17.762","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 15:55:33.621","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 15:55:33.622","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 15:55:33.734","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 15:57:42.859","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 15:57:42.859","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 15:57:43.174","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 16:03:18.800","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 16:03:18.802","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"noteTarget.created","2024-10-24 16:03:19.118","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 15:55:33.606","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 15:55:33.607","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 15:55:33.736","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 15:57:42.937","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 15:57:42.938","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 15:57:43.166","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 16:03:19.409","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 16:03:19.410","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"opportunity.created","2024-10-24 16:03:21.884","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:55:33.525","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:55:33.526","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:55:35.037","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:55:35.038","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:55:35.228","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:57:34.269","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:57:34.273","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:57:37.353","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:57:41.933","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 15:57:41.935","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 16:03:17.781","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 16:03:17.782","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 16:03:17.871","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 16:03:18.137","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"person.created","2024-10-24 16:03:18.137","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"serverlessFunction.executed","2024-10-22 16:08:22.853","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":49,""status"":""SUCCESS"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""""}"
|
||||
"serverlessFunction.executed","2024-10-22 16:08:25.262","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":33,""status"":""SUCCESS"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""""}"
|
||||
"serverlessFunction.executed","2024-10-22 16:08:38.831","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":1008,""status"":""SUCCESS"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""""}"
|
||||
"serverlessFunction.executed","2024-10-22 16:08:40.553","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":35,""status"":""ERROR"",""errorType"":""ReferenceError"",""functionId"":""a9fd87c0-af86-4e17-be3a-a6d3d961678a"",""functionName"":""""}"
|
||||
"serverlessFunction.executed","2024-10-22 16:17:42.534","1","serverless-function","20202020-1c25-4d02-bf25-6aeccf7ea419","{""duration"":42,""status"":""SUCCESS"",""functionId"":""01963805-b9e9-47c5-8bf0-b815c6ba5e1c"",""functionName"":""jjjj""}"
|
||||
"task.created","2024-10-24 15:55:35.469","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 15:55:35.469","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 15:55:35.672","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 15:57:32.646","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 15:57:32.649","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 15:57:33.949","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 16:03:17.587","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 16:03:17.589","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"task.created","2024-10-24 16:03:17.738","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 15:55:33.705","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 15:55:33.706","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 15:55:33.781","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 15:57:42.390","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 15:57:42.392","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 15:57:42.749","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 16:03:18.274","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 16:03:18.275","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"taskTarget.created","2024-10-24 16:03:18.362","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 15:55:32.239","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 15:55:32.239","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 15:55:32.319","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 15:57:26.541","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 15:57:26.581","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 15:57:26.836","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 16:03:16.284","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 16:03:16.310","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"timelineActivity.created","2024-10-24 16:03:16.469","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 15:55:33.555","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 15:55:33.557","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 15:55:33.665","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 15:57:42.752","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 15:57:42.753","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 15:57:42.864","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 16:03:18.825","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 16:03:18.826","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"view.created","2024-10-24 16:03:18.968","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 15:55:33.519","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 15:55:33.520","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 15:55:33.604","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 15:57:44.535","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 15:57:44.535","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 15:57:44.649","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 16:03:19.752","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 16:03:19.754","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewField.created","2024-10-24 16:03:19.872","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 15:55:33.521","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 15:55:33.522","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 15:55:33.652","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 15:57:43.289","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 15:57:43.290","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 15:57:43.419","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 16:03:21.314","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 16:03:21.315","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewFilter.created","2024-10-24 16:03:23.508","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 15:55:35.156","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 15:55:35.158","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 15:55:35.205","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 15:57:40.833","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 15:57:40.840","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 15:57:41.421","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 16:03:17.860","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 16:03:17.860","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"viewSort.created","2024-10-24 16:03:17.966","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"webhook.created","2024-10-24 15:57:26.784","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"webhook.created","2024-10-24 15:57:26.787","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"webhook.created","2024-10-24 15:57:26.947","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"webhook.created","2024-10-24 16:03:16.340","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"webhook.created","2024-10-24 16:03:16.341","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"webhook.created","2024-10-24 16:03:16.555","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"webhook.response","2024-10-22 09:31:14.307","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""status"":200,""success"":true,""url"":""https://enfcx639bne28.x.pipedream.net"",""webhookId"":""90f12aed-0276-4bea-bcaa-c21ea2763d7d"",""eventName"":""company.create""}"
|
||||
"webhook.response","2024-10-22 09:31:14.447","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""status"":405,""success"":false,""url"":""https://google.com"",""webhookId"":""57995a1c-7429-4846-ab9a-3073ddec7865"",""eventName"":""company.create""}"
|
||||
"webhook.response","2024-10-22 09:31:14.453","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""success"":false,""url"":""a.com"",""webhookId"":""c19ea782-417e-4d44-a486-fd794fc44a27"",""eventName"":""company.create""}"
|
||||
"webhook.response","2024-10-22 10:17:01.108","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""status"":200,""success"":true,""url"":""https://enfcx639bne28.x.pipedream.net"",""webhookId"":""90f12aed-0276-4bea-bcaa-c21ea2763d7d"",""eventName"":""company.create""}"
|
||||
"webhook.response","2024-10-22 10:17:01.271","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""status"":405,""success"":false,""url"":""https://google.com"",""webhookId"":""57995a1c-7429-4846-ab9a-3073ddec7865"",""eventName"":""company.create""}"
|
||||
"webhook.response","2024-10-22 10:17:01.277","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""success"":false,""url"":""a.com"",""webhookId"":""c19ea782-417e-4d44-a486-fd794fc44a27"",""eventName"":""company.create""}"
|
||||
"webhook.response","2024-10-22 13:16:51.473","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""status"":200,""success"":true,""url"":""https://enfcx639bne28.x.pipedream.net"",""webhookId"":""90f12aed-0276-4bea-bcaa-c21ea2763d7d"",""eventName"":""company.create""}"
|
||||
"webhook.response","2024-10-22 13:16:51.617","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""success"":false,""url"":""https://google.com"",""webhookId"":""57995a1c-7429-4846-ab9a-3073ddec7865"",""eventName"":""company.create"",""status"":405}"
|
||||
"webhook.response","2024-10-22 13:16:51.621","1","webhook","20202020-1c25-4d02-bf25-6aeccf7ea419","{""success"":false,""url"":""a.com"",""webhookId"":""c19ea782-417e-4d44-a486-fd794fc44a27"",""eventName"":""company.create""}"
|
||||
"workspaceMember.created","2024-10-24 15:55:32.038","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 15:55:32.039","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 15:55:32.223","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 15:57:26.646","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 15:57:26.647","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 15:57:26.854","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 16:03:16.337","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 16:03:16.337","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
"workspaceMember.created","2024-10-24 16:03:16.490","1","20202020-9e3b-46d4-a556-88b9ddc2b034","20202020-1c25-4d02-bf25-6aeccf7ea419","{}"
|
||||
|
11
packages/twenty-tinybird/datasources/fixtures/pageview.csv
Normal file
11
packages/twenty-tinybird/datasources/fixtures/pageview.csv
Normal file
@@ -0,0 +1,11 @@
|
||||
"href","locale","pathname","referrer","sessionId","timeZone","timestamp","userAgent","userId","version","workspaceId"
|
||||
"http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","en-US","/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","ebb6279c-c9a6-44c7-b751-6ee615e6a5fe","Europe/Paris","2024-10-17 12:30:33.604","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/objects/companies","en-US","/welcome","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:37:53.093","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/objects/companies","en-US","/objects/companies","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:37:53.184","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/settings/profile","en-US","/settings/profile","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:37:54.802","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/settings/integrations","en-US","/settings/integrations","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:37:56.686","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/settings/developers","en-US","/settings/developers","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:38:01.364","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","en-US","/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:38:02.518","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","en-US","/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:41:11.844","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/settings/profile","en-US","/settings/profile","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:41:23.864","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
"http://localhost:3001/settings/appearance","en-US","/settings/appearance","http://localhost:3001/settings/developers/webhooks/41a8ad80-265a-425a-93da-35452d0ac83d","8fc30143-b648-4fc0-afe7-e55e1c452003","Europe/Paris","2024-10-17 12:41:25.972","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36","20202020-9e3b-46d4-a556-88b9ddc2b034","1","20202020-1c25-4d02-bf25-6aeccf7ea419"
|
||||
|
16
packages/twenty-tinybird/datasources/pageview.datasource
Normal file
16
packages/twenty-tinybird/datasources/pageview.datasource
Normal file
@@ -0,0 +1,16 @@
|
||||
SCHEMA >
|
||||
`href` String `json:$.href`,
|
||||
`locale` String `json:$.locale`,
|
||||
`pathname` String `json:$.pathname`,
|
||||
`referrer` String `json:$.referrer`,
|
||||
`sessionId` String `json:$.sessionId`,
|
||||
`timeZone` String `json:$.timeZone`,
|
||||
`timestamp` DateTime64(3) `json:$.timestamp`,
|
||||
`userAgent` String `json:$.userAgent`,
|
||||
`userId` String `json:$.userId` DEFAULT '',
|
||||
`version` String `json:$.version`,
|
||||
`workspaceId` String `json:$.workspaceId`
|
||||
|
||||
ENGINE MergeTree
|
||||
ENGINE_PARTITION_KEY toYear(timestamp)
|
||||
ENGINE_SORTING_KEY timestamp, userId, version, workspaceId
|
||||
@@ -0,0 +1,11 @@
|
||||
SCHEMA >
|
||||
`timestamp` DateTime64(3),
|
||||
`workspaceId` String,
|
||||
`functionId` String,
|
||||
`durationInMs` Int64,
|
||||
`success` Bool,
|
||||
`errorType` String
|
||||
|
||||
ENGINE MergeTree
|
||||
ENGINE_PARTITION_KEY toYYYYMM(timestamp)
|
||||
ENGINE_SORTING_KEY timestamp, functionId, success
|
||||
@@ -0,0 +1,13 @@
|
||||
SCHEMA >
|
||||
`timestamp` DateTime64(3),
|
||||
`workspaceId` String,
|
||||
`webhookId` String,
|
||||
`url` String,
|
||||
`success` UInt8,
|
||||
`status` Int64,
|
||||
`eventName` String,
|
||||
`version` String
|
||||
|
||||
ENGINE MergeTree
|
||||
ENGINE_PARTITION_KEY toYYYYMM(timestamp)
|
||||
ENGINE_SORTING_KEY timestamp, workspaceId
|
||||
87
packages/twenty-tinybird/includes/timeSeries.incl
Normal file
87
packages/twenty-tinybird/includes/timeSeries.incl
Normal file
@@ -0,0 +1,87 @@
|
||||
DESCRIPTION >
|
||||
Inspired by DUB implementation
|
||||
|
||||
NODE dayIntervals
|
||||
SQL >
|
||||
%
|
||||
WITH
|
||||
toStartOfDay(
|
||||
toDateTime64({{ DateTime64(start, '2024-10-16 00:00:00.000') }}, 3),
|
||||
{{ String(timezone, 'UTC') }}
|
||||
) AS start,
|
||||
toStartOfDay(
|
||||
toDateTime64({{ DateTime64(end, '2024-10-23 00:00:00.000') }}, 3),
|
||||
{{ String(timezone, 'UTC') }}
|
||||
) AS
|
||||
end
|
||||
SELECT
|
||||
arrayJoin(
|
||||
arrayMap(
|
||||
x -> toDateTime64(toStartOfDay(toDateTime64(x, 3), {{ String(timezone, 'UTC') }}), 3),
|
||||
range(toUInt32(start + 86400), toUInt32(end + 86400),
|
||||
86400
|
||||
)
|
||||
)
|
||||
) as interval
|
||||
|
||||
NODE hourIntervals
|
||||
SQL >
|
||||
%
|
||||
WITH
|
||||
toStartOfHour(
|
||||
toDateTime64({{ DateTime64(start, '2024-10-22 00:00:00.000') }}, 3),
|
||||
{{ String(timezone, 'UTC') }}
|
||||
) AS start,
|
||||
toStartOfHour(
|
||||
toDateTime64({{ DateTime64(end, '2024-10-23 00:00:00.000') }}, 3),
|
||||
{{ String(timezone, 'UTC') }}
|
||||
) AS
|
||||
end
|
||||
SELECT
|
||||
arrayJoin(
|
||||
arrayMap(x -> toDateTime64(x, 3), range(toUInt32(start + 3600), toUInt32(end + 3600), 3600)
|
||||
)
|
||||
) as interval
|
||||
|
||||
NODE customIntervals
|
||||
SQL >
|
||||
%
|
||||
WITH
|
||||
time_series AS (
|
||||
SELECT
|
||||
toDateTime64(
|
||||
toDateTime(
|
||||
toStartOfInterval(
|
||||
toDateTime64({{ DateTime64(start, '2024-10-22 00:00:00.000') }}, 3),
|
||||
INTERVAL {{ Int32(tickIntervalInMinutes, 420) }} MINUTE
|
||||
)
|
||||
)
|
||||
+ INTERVAL number * {{ Int32(tickIntervalInMinutes, 420) }} MINUTE,
|
||||
3
|
||||
) AS interval
|
||||
FROM
|
||||
numbers(
|
||||
0,
|
||||
1 + intDiv(
|
||||
dateDiff(
|
||||
'minute',
|
||||
toDateTime64({{ DateTime64(start, '2024-10-22 00:00:00.000') }}, 3),
|
||||
toDateTime64({{ DateTime64(end, '2024-10-23 00:00:00.000') }}, 3)
|
||||
),
|
||||
{{ Int32(tickIntervalInMinutes, 420) }}
|
||||
)
|
||||
)
|
||||
WHERE interval <= toDateTime64({{ DateTime64(end, '2024-10-23 00:00:00.000') }}, 3)
|
||||
)
|
||||
SELECT interval
|
||||
FROM time_series
|
||||
|
||||
NODE selectIntervalByGranularity
|
||||
SQL >
|
||||
%
|
||||
SELECT *
|
||||
FROM
|
||||
{% if granularity == "custom" %} customIntervals
|
||||
{% elif granularity == "hour" %} hourIntervals
|
||||
{% else %} dayIntervals
|
||||
{% end %}
|
||||
@@ -0,0 +1,35 @@
|
||||
INCLUDE "../includes/timeSeries.incl"
|
||||
|
||||
NODE timeSeriesServerlessFunctionDurationData
|
||||
SQL >
|
||||
%
|
||||
SELECT
|
||||
{% if granularity == "hour" %} toStartOfHour(timestamp, {{ String(timezone, 'UTC') }})
|
||||
{% elif granularity == "custom" %}
|
||||
toDateTime64(
|
||||
toStartOfMinute(timestamp, {{ String(timezone, 'UTC') }}),
|
||||
3,
|
||||
{{ String(timezone, 'UTC') }}
|
||||
)
|
||||
{% else %} toDateTime64(toStartOfDay(timestamp, {{ String(timezone, 'UTC') }}), 3)
|
||||
{% end %} AS interval,
|
||||
avg(CAST(durationInMs AS Float64)) as average,
|
||||
min(durationInMs) as minimum,
|
||||
max(durationInMs) as maximum
|
||||
FROM serverlessFunctionEventMV
|
||||
WHERE
|
||||
true
|
||||
AND functionId = {{ String(functionId, 'a9fd87c0-af86-4e17-be3a-a6d3d961678a', required=True) }}
|
||||
AND workspaceId
|
||||
={{ String(workspaceId, '20202020-1c25-4d02-bf25-6aeccf7ea419', required=True) }}
|
||||
AND timestamp >= {{ DateTime(start, '2024-10-22 00:00:00') }}
|
||||
AND timestamp < {{ DateTime(end, '2024-10-23 00:00:00') }}
|
||||
GROUP BY interval
|
||||
ORDER BY interval
|
||||
|
||||
NODE endpoint
|
||||
SQL >
|
||||
%
|
||||
SELECT formatDateTime(interval, '%FT%T.000%z') as start, minimum, maximum, average
|
||||
FROM selectIntervalByGranularity
|
||||
LEFT JOIN timeSeriesServerlessFunctionDurationData USING interval
|
||||
@@ -0,0 +1,41 @@
|
||||
INCLUDE "../includes/timeSeries.incl"
|
||||
|
||||
NODE timeSeriesServerlessFunctionErrorsData
|
||||
SQL >
|
||||
%
|
||||
SELECT
|
||||
{% if granularity == "hour" %} toStartOfHour(timestamp, {{ String(timezone, 'UTC') }})
|
||||
{% elif granularity == "custom" %}
|
||||
toDateTime64(
|
||||
toStartOfMinute(timestamp, {{ String(timezone, 'UTC') }}),
|
||||
3,
|
||||
{{ String(timezone, 'UTC') }}
|
||||
)
|
||||
{% else %} toDateTime64(toStartOfDay(timestamp, {{ String(timezone, 'UTC') }}), 3)
|
||||
{% end %} AS interval,
|
||||
uniqIf(*, success = false) as error_count,
|
||||
round(
|
||||
if(
|
||||
uniqIf(*, success = true) = 0,
|
||||
0,
|
||||
(uniqIf(*, success = true) - uniqIf(*, success = false)) / uniqIf(*, success = true)
|
||||
),
|
||||
2
|
||||
) as success_rate
|
||||
FROM serverlessFunctionEventMV
|
||||
WHERE
|
||||
true
|
||||
AND functionId = {{ String(functionId, 'a9fd87c0-af86-4e17-be3a-a6d3d961678a', required=True) }}
|
||||
AND workspaceId
|
||||
={{ String(workspaceId, '20202020-1c25-4d02-bf25-6aeccf7ea419', required=True) }}
|
||||
AND timestamp >= {{ DateTime(start, '2024-10-22 00:00:00') }}
|
||||
AND timestamp < {{ DateTime(end, '2024-10-23 00:00:00') }}
|
||||
GROUP BY interval
|
||||
ORDER BY interval
|
||||
|
||||
NODE endpoint
|
||||
SQL >
|
||||
%
|
||||
SELECT formatDateTime(interval, '%FT%T.000%z') as start, error_count, success_rate
|
||||
FROM selectIntervalByGranularity
|
||||
LEFT JOIN timeSeriesServerlessFunctionErrorsData USING interval
|
||||
34
packages/twenty-tinybird/pipes/getWebhookAnalytics.pipe
Normal file
34
packages/twenty-tinybird/pipes/getWebhookAnalytics.pipe
Normal file
@@ -0,0 +1,34 @@
|
||||
INCLUDE "../includes/timeSeries.incl"
|
||||
|
||||
NODE timeSeriesWebhookData
|
||||
SQL >
|
||||
%
|
||||
SELECT
|
||||
{% if granularity == "hour" %} toStartOfHour(timestamp, {{ String(timezone, 'UTC') }})
|
||||
{% elif granularity == "custom" %}
|
||||
toDateTime64(
|
||||
toStartOfMinute(timestamp, {{ String(timezone, 'UTC') }}),
|
||||
3,
|
||||
{{ String(timezone, 'UTC') }}
|
||||
)
|
||||
{% else %} toDateTime64(toStartOfDay(timestamp, {{ String(timezone, 'UTC') }}), 3)
|
||||
{% end %} AS interval,
|
||||
uniqIf(*, success = true) as success_count,
|
||||
uniqIf(*, success = false) as failure_count
|
||||
FROM webhookEventMV
|
||||
WHERE
|
||||
true
|
||||
AND webhookId = {{ String(webhookId, '90f12aed-0276-4bea-bcaa-c21ea2763d7d', required=True) }}
|
||||
AND workspaceId
|
||||
={{ String(workspaceId, '20202020-1c25-4d02-bf25-6aeccf7ea419', required=True) }}
|
||||
AND timestamp >= {{ DateTime(start, '2024-10-22 00:00:00') }}
|
||||
AND timestamp < {{ DateTime(end, '2024-10-23 00:00:00') }}
|
||||
GROUP BY interval
|
||||
ORDER BY interval
|
||||
|
||||
NODE endpoint
|
||||
SQL >
|
||||
%
|
||||
SELECT formatDateTime(interval, '%FT%T.000%z') as start, success_count, failure_count
|
||||
FROM selectIntervalByGranularity
|
||||
LEFT JOIN timeSeriesWebhookData USING interval
|
||||
@@ -0,0 +1,14 @@
|
||||
NODE mv
|
||||
SQL >
|
||||
SELECT
|
||||
timestamp,
|
||||
workspaceId,
|
||||
JSONExtractString(payload, 'functionId') as functionId,
|
||||
JSONExtractInt(payload, 'duration') as durationInMs,
|
||||
if(JSONExtractString(payload, 'status') = 'SUCCESS', TRUE, FALSE) as success,
|
||||
JSONExtractString(payload, 'errorType') as errorType
|
||||
FROM event
|
||||
WHERE action = 'serverlessFunction.executed'
|
||||
|
||||
TYPE MATERIALIZED
|
||||
DATASOURCE serverlessFunctionEventMV
|
||||
16
packages/twenty-tinybird/pipes/materializeWebhookEvent.pipe
Normal file
16
packages/twenty-tinybird/pipes/materializeWebhookEvent.pipe
Normal file
@@ -0,0 +1,16 @@
|
||||
NODE mv
|
||||
SQL >
|
||||
SELECT
|
||||
timestamp,
|
||||
workspaceId,
|
||||
JSONExtractString(payload, 'webhookId') as webhookId,
|
||||
JSONExtractString(payload, 'url') as url,
|
||||
JSONExtractBool(payload, 'success') as success,
|
||||
JSONExtractInt(payload, 'status') as status,
|
||||
JSONExtractString(payload, 'eventName') as eventName,
|
||||
version
|
||||
FROM event
|
||||
WHERE action = 'webhook.response'
|
||||
|
||||
TYPE MATERIALIZED
|
||||
DATASOURCE webhookEventMV
|
||||
1
packages/twenty-tinybird/requirements.txt
Normal file
1
packages/twenty-tinybird/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
tinybird-cli==5.10.1
|
||||
21
packages/twenty-tinybird/scripts/append_fixtures.sh
Executable file
21
packages/twenty-tinybird/scripts/append_fixtures.sh
Executable file
@@ -0,0 +1,21 @@
|
||||
|
||||
#!/usr/bin/env bash
|
||||
set -euxo pipefail
|
||||
|
||||
directory="datasources/fixtures"
|
||||
extensions=("csv" "ndjson")
|
||||
|
||||
absolute_directory=$(realpath "$directory")
|
||||
|
||||
for extension in "${extensions[@]}"; do
|
||||
file_list=$(find "$absolute_directory" -type f -name "*.$extension")
|
||||
|
||||
for file_path in $file_list; do
|
||||
file_name=$(basename "$file_path")
|
||||
file_name_without_extension="${file_name%.*}"
|
||||
|
||||
command="tb datasource append $file_name_without_extension datasources/fixtures/$file_name"
|
||||
echo $command
|
||||
$command
|
||||
done
|
||||
done
|
||||
58
packages/twenty-tinybird/scripts/exec_test.sh
Executable file
58
packages/twenty-tinybird/scripts/exec_test.sh
Executable file
@@ -0,0 +1,58 @@
|
||||
|
||||
#!/usr/bin/env bash
|
||||
set -euxo pipefail
|
||||
|
||||
export TB_VERSION_WARNING=0
|
||||
|
||||
run_test() {
|
||||
t=$1
|
||||
echo "** Running $t **"
|
||||
echo "** $(cat $t)"
|
||||
tmpfile=$(mktemp)
|
||||
retries=0
|
||||
TOTAL_RETRIES=3
|
||||
|
||||
# When appending fixtures, we need to retry in case of the data is not replicated in time
|
||||
while [ $retries -lt $TOTAL_RETRIES ]; do
|
||||
# Run the test and store the output in a temporary file
|
||||
bash $t $2 >$tmpfile
|
||||
exit_code=$?
|
||||
if [ "$exit_code" -eq 0 ]; then
|
||||
# If the test passed, break the loop
|
||||
if diff -B ${t}.result $tmpfile >/dev/null 2>&1; then
|
||||
break
|
||||
# If the test failed, increment the retries counter and try again
|
||||
else
|
||||
retries=$((retries+1))
|
||||
fi
|
||||
# If the bash command failed, print an error message and break the loop
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if diff -B ${t}.result $tmpfile >/dev/null 2>&1; then
|
||||
echo "✅ Test $t passed"
|
||||
rm $tmpfile
|
||||
return 0
|
||||
elif [ $retries -eq $TOTAL_RETRIES ]; then
|
||||
echo "🚨 ERROR: Test $t failed, diff:";
|
||||
diff -B ${t}.result $tmpfile
|
||||
rm $tmpfile
|
||||
return 1
|
||||
else
|
||||
echo "🚨 ERROR: Test $t failed with bash command exit code $?"
|
||||
cat $tmpfile
|
||||
rm $tmpfile
|
||||
return 1
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
export -f run_test
|
||||
|
||||
fail=0
|
||||
find ./tests -name "*.test" -print0 | xargs -0 -I {} -P 4 bash -c 'run_test "$@"' _ {} || fail=1
|
||||
|
||||
if [ $fail == 1 ]; then
|
||||
exit -1;
|
||||
fi
|
||||
29
packages/twenty-tinybird/tests/example.yml
Normal file
29
packages/twenty-tinybird/tests/example.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
|
||||
##############################################################################################################################
|
||||
### Visit https://www.tinybird.co/docs/production/implementing-test-strategies.html#data-quality-tests ###
|
||||
### for more details on Data Quality tests ###
|
||||
##############################################################################################################################
|
||||
|
||||
- example_no_negative_numbers:
|
||||
max_bytes_read: null
|
||||
max_time: null
|
||||
sql: |
|
||||
SELECT
|
||||
number
|
||||
FROM numbers(10)
|
||||
WHERE
|
||||
number < 0
|
||||
|
||||
# - example_top_products_params_no_empty_top_10_on_2023:
|
||||
# max_bytes_read: null
|
||||
# max_time: null
|
||||
# sql: |
|
||||
# SELECT *
|
||||
# FROM top_products_params
|
||||
# WHERE empty(top_10)
|
||||
# pipe:
|
||||
# name: top_products_params
|
||||
# params:
|
||||
# start: '2023-01-01'
|
||||
# end: '2023-12-31'
|
||||
|
||||
25
packages/twenty-tinybird/tests/regression.yaml
Normal file
25
packages/twenty-tinybird/tests/regression.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
|
||||
############################################################################################################################
|
||||
### Visit https://www.tinybird.co/docs/production/implementing-test-strategies.html#regression-tests ###
|
||||
### for more details on Regression tests ###
|
||||
############################################################################################################################
|
||||
|
||||
###
|
||||
### New pipes are covered by this rule, rules below this one supersede this setting
|
||||
###
|
||||
- pipe: '.*'
|
||||
tests:
|
||||
- coverage:
|
||||
|
||||
|
||||
|
||||
###
|
||||
### These are rules to customize regression testing by pipe using regular expressions
|
||||
### For instance skip regression tests for the pipes matching `endpoint_name.*`
|
||||
###
|
||||
- pipe: 'endpoint_name.*'
|
||||
tests:
|
||||
- coverage:
|
||||
config:
|
||||
skip: True
|
||||
|
||||
@@ -41,7 +41,9 @@ const StyledTag = styled.h3<{
|
||||
overflow: hidden;
|
||||
padding: 0 ${spacing2};
|
||||
border: ${({ variant, theme }) =>
|
||||
variant === 'outline' ? `1px dashed ${theme.border.color.strong}` : ''};
|
||||
variant === 'outline' || variant === 'border'
|
||||
? `1px ${variant === 'border' ? 'solid' : 'dash'} ${theme.border.color.strong}`
|
||||
: ''};
|
||||
|
||||
gap: ${spacing1};
|
||||
|
||||
@@ -65,7 +67,7 @@ const StyledIconContainer = styled.div`
|
||||
`;
|
||||
|
||||
type TagWeight = 'regular' | 'medium';
|
||||
type TagVariant = 'solid' | 'outline';
|
||||
type TagVariant = 'solid' | 'outline' | 'border';
|
||||
export type TagColor = ThemeColor | 'transparent';
|
||||
|
||||
type TagProps = {
|
||||
|
||||
Reference in New Issue
Block a user