@lowdefy/docs-content 0.0.0-experimental-20260928120643 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/content/actions/link.md +0 -17
- package/content/actions/login.md +5 -23
- package/content/actions/logout.md +5 -5
- package/content/actions/pdfmake.md +2 -2
- package/content/actions/setdarkmode.md +2 -2
- package/content/agents/agent-properties.md +2 -4
- package/content/agents/agentchat.md +6 -21
- package/content/agents/agentconversations.md +2 -2
- package/content/concepts/ai-agent-docs.md +101 -313
- package/content/concepts/cli.md +3 -34
- package/content/concepts/connections-and-requests.md +0 -402
- package/content/concepts/custom-html.md +0 -40
- package/content/concepts/custom-styling.md +5 -50
- package/content/concepts/events-and-actions.md +2 -64
- package/content/concepts/i18n.md +2 -7
- package/content/concepts/keyboard-shortcuts.md +2 -2
- package/content/concepts/layout-overview.md +1 -1
- package/content/concepts/logger.md +0 -81
- package/content/concepts/lowdefy-schema.md +1 -4
- package/content/concepts/menus.md +7 -7
- package/content/concepts/module-authoring.md +2 -2
- package/content/connections/anthropic.md +2 -162
- package/content/connections/awss3.md +0 -54
- package/content/connections/google.md +2 -162
- package/content/connections/mongodb.md +3 -121
- package/content/connections/openai-connection.md +2 -162
- package/content/container-blocks/affix.md +7 -47
- package/content/container-blocks/alert.md +24 -76
- package/content/container-blocks/badge.md +24 -100
- package/content/container-blocks/box.md +9 -9
- package/content/container-blocks/card.md +25 -80
- package/content/container-blocks/carousel.md +7 -60
- package/content/container-blocks/collapse.md +9 -87
- package/content/container-blocks/configprovider.md +13 -35
- package/content/container-blocks/confirmmodal.md +23 -69
- package/content/container-blocks/content.md +98 -62
- package/content/container-blocks/descriptions.md +4 -45
- package/content/container-blocks/drawer.md +28 -92
- package/content/container-blocks/dropdownmenu.md +31 -119
- package/content/container-blocks/flex.md +62 -40
- package/content/container-blocks/footer.md +11 -15
- package/content/container-blocks/googlemapsheatmap.md +1 -1
- package/content/container-blocks/googlemapsscript.md +2 -2
- package/content/container-blocks/header.md +36 -71
- package/content/container-blocks/label.md +7 -34
- package/content/container-blocks/layout.md +34 -52
- package/content/container-blocks/masonry.md +71 -17
- package/content/container-blocks/mobilemenu.md +88 -131
- package/content/container-blocks/modal.md +26 -114
- package/content/container-blocks/pageheadermenu.md +31 -81
- package/content/container-blocks/pagesidebarlayout.md +26 -169
- package/content/container-blocks/pagesidermenu.md +42 -95
- package/content/container-blocks/popover.md +31 -34
- package/content/container-blocks/result.md +21 -32
- package/content/container-blocks/sider.md +122 -85
- package/content/container-blocks/span.md +7 -7
- package/content/container-blocks/spinner.md +3 -3
- package/content/container-blocks/splitter.md +68 -150
- package/content/container-blocks/tabs.md +12 -64
- package/content/container-blocks/tooltip.md +46 -22
- package/content/container-blocks/watermark.md +4 -22
- package/content/controls/reject.md +2 -4
- package/content/controls/throw.md +0 -1
- package/content/controls/try.md +2 -3
- package/content/deployment/deployment-environments.md +6 -8
- package/content/deployment/docker.md +7 -22
- package/content/deployment/node-server.md +0 -4
- package/content/deployment/vercel.md +6 -13
- package/content/display-blocks/aggrid.md +11 -26
- package/content/display-blocks/anchor.md +15 -15
- package/content/display-blocks/avatar.md +37 -57
- package/content/display-blocks/breadcrumb.md +21 -70
- package/content/display-blocks/button.md +18 -92
- package/content/display-blocks/calendar.md +0 -12
- package/content/display-blocks/dangeroushtml.md +1 -1
- package/content/display-blocks/difflist.md +1 -1
- package/content/display-blocks/difftimeline.md +1 -1
- package/content/display-blocks/divider.md +3 -64
- package/content/display-blocks/dropdownbutton.md +28 -79
- package/content/display-blocks/echart.md +1 -35
- package/content/display-blocks/floatbutton.md +42 -129
- package/content/display-blocks/html.md +1 -61
- package/content/display-blocks/icon.md +67 -250
- package/content/display-blocks/menu.md +73 -145
- package/content/display-blocks/message.md +124 -38
- package/content/display-blocks/notification.md +222 -94
- package/content/display-blocks/paragraph.md +9 -59
- package/content/display-blocks/progress.md +17 -96
- package/content/display-blocks/qrcode.md +4 -19
- package/content/display-blocks/s3download.md +1 -1
- package/content/display-blocks/search.md +7 -17
- package/content/display-blocks/skeletonbutton.md +0 -1
- package/content/display-blocks/skeletoninput.md +0 -1
- package/content/display-blocks/statistic.md +17 -75
- package/content/display-blocks/steps.md +25 -58
- package/content/display-blocks/tag.md +17 -102
- package/content/display-blocks/title.md +11 -50
- package/content/display-blocks/tour.md +23 -33
- package/content/input-blocks/autocomplete.md +9 -81
- package/content/input-blocks/buttonselector.md +8 -45
- package/content/input-blocks/checkboxselector.md +7 -97
- package/content/input-blocks/checkboxswitch.md +3 -33
- package/content/input-blocks/colorselector.md +14 -63
- package/content/input-blocks/daterangeselector.md +45 -165
- package/content/input-blocks/dateselector.md +41 -139
- package/content/input-blocks/datetimeselector.md +49 -158
- package/content/input-blocks/inputgallery.md +3 -3
- package/content/input-blocks/monthselector.md +52 -120
- package/content/input-blocks/multipleselector.md +39 -150
- package/content/input-blocks/numberinput.md +12 -98
- package/content/input-blocks/pagination.md +14 -70
- package/content/input-blocks/paragraphinput.md +37 -51
- package/content/input-blocks/passwordinput.md +6 -60
- package/content/input-blocks/phonenumberinput.md +26 -59
- package/content/input-blocks/radioselector.md +7 -83
- package/content/input-blocks/ratingslider.md +26 -57
- package/content/input-blocks/s3uploadbutton.md +24 -24
- package/content/input-blocks/s3uploaddragger.md +3 -3
- package/content/input-blocks/s3uploadphoto.md +5 -5
- package/content/input-blocks/segmentedselector.md +32 -72
- package/content/input-blocks/selector.md +21 -109
- package/content/input-blocks/switch.md +17 -65
- package/content/input-blocks/textarea.md +3 -32
- package/content/input-blocks/textinput.md +28 -69
- package/content/input-blocks/tiptapmentioninput.md +1 -1
- package/content/input-blocks/titleinput.md +12 -39
- package/content/input-blocks/treeinput.md +25 -49
- package/content/input-blocks/treemultipleselector.md +10 -127
- package/content/input-blocks/treeselector.md +9 -97
- package/content/input-blocks/upload.md +15 -64
- package/content/input-blocks/uploaddragger.md +1 -17
- package/content/input-blocks/uploadphoto.md +1 -18
- package/content/input-blocks/weekselector.md +55 -120
- package/content/list-blocks/controlledlist.md +15 -24
- package/content/list-blocks/list.md +11 -11
- package/content/list-blocks/masonrylist.md +34 -7
- package/content/migration/upgrade-guide.md +0 -1
- package/content/operators/_app.md +1 -2
- package/content/operators/_error.md +1 -23
- package/content/operators/_get.md +6 -6
- package/content/operators/_operator.md +3 -17
- package/content/operators/_ref.md +0 -258
- package/content/operators/_type.md +3 -14
- package/content/operators/_user.md +3 -3
- package/content/other/introduction.md +1 -1
- package/content/plugins/plugins-dev.md +0 -66
- package/content/plugins/plugins-introduction.md +1 -27
- package/content/testing/e2e-configuration.md +1 -8
- package/content/testing/e2e-getting-started.md +1 -1
- package/content/testing/e2e-introduction.md +1 -1
- package/content/tutorial/tutorial-actions-operators.md +2 -2
- package/content/tutorial/tutorial-add-blocks.md +2 -2
- package/content/tutorial/tutorial-create-page.md +2 -48
- package/content/tutorial/tutorial-display-data-page.md +3 -3
- package/content/tutorial/tutorial-requests-sql.md +0 -153
- package/content/tutorial/tutorial-start.md +1 -66
- package/content/user-authentication/login-and-logout.md +8 -158
- package/content/user-authentication/users-introduction.md +0 -8
- package/index.json +2 -6065
- package/package.json +1 -7
- package/scripts/extractAgentDocs.js +4 -36
- package/content/actions/emailotpsend.md +0 -58
- package/content/actions/emailotpverify.md +0 -77
- package/content/actions/getlocalstorage.md +0 -41
- package/content/actions/magiclinkverify.md +0 -113
- package/content/actions/posthogalias.md +0 -29
- package/content/actions/posthogcapture.md +0 -49
- package/content/actions/posthogcapturepageleave.md +0 -38
- package/content/actions/posthogfeatureflag.md +0 -50
- package/content/actions/posthoggroup.md +0 -37
- package/content/actions/posthogidentify.md +0 -54
- package/content/actions/posthoginit.md +0 -66
- package/content/actions/posthogoptin.md +0 -29
- package/content/actions/posthogoptout.md +0 -29
- package/content/actions/posthogpageview.md +0 -37
- package/content/actions/posthogreloadfeatureflags.md +0 -47
- package/content/actions/posthogreset.md +0 -28
- package/content/actions/posthogsetpersonproperties.md +0 -36
- package/content/actions/removelocalstorage.md +0 -26
- package/content/actions/setlocalstorage.md +0 -32
- package/content/adapter-reference/mongodbauthadapter.md +0 -46
- package/content/agents/agents-introduction.md +0 -107
- package/content/callback-reference/auth0logoutcallback.md +0 -54
- package/content/concepts/blocks.md +0 -150
- package/content/concepts/dynamic-page-content.md +0 -304
- package/content/concepts/html-attributes.md +0 -285
- package/content/concepts/lowdefy-api.md +0 -1110
- package/content/concepts/notifications.md +0 -155
- package/content/concepts/page-and-app-state.md +0 -244
- package/content/concepts/theming.md +0 -582
- package/content/connections/aigateway.md +0 -368
- package/content/connections/axioshttp.md +0 -181
- package/content/controls/while.md +0 -46
- package/content/display-blocks/clickablehtml.md +0 -239
- package/content/display-blocks/eventlog.md +0 -363
- package/content/display-blocks/pollingtimer.md +0 -263
- package/content/input-blocks/captcha.md +0 -40
- package/content/input-blocks/placesautocomplete.md +0 -319
- package/content/input-blocks/tagmultipleselector.md +0 -114
- package/content/input-blocks/tagselector.md +0 -114
- package/content/migration/auth-upgrade.md +0 -327
- package/content/migration/v3-to-v4.md +0 -417
- package/content/migration/v6-to-v7.md +0 -222
- package/content/operators/_cron.md +0 -292
- package/content/other/mongodbadapter.md +0 -3
- package/content/plugins/plugins-icon-sets.md +0 -267
- package/content/plugins/posthog.md +0 -275
- package/content/provider-reference/auth-js-providers.md +0 -107
- package/content/provider-reference/openidconnectprovider.md +0 -44
- package/content/testing/config-tests.md +0 -278
- package/content/tutorial/tutorial-requests-api.md +0 -155
- package/content/user-authentication/auth-configuration.md +0 -266
- package/content/user-authentication/auth-steps.md +0 -138
- package/content/user-authentication/mcp-oauth.md +0 -292
- package/content/user-authentication/organizations.md +0 -221
- package/content/user-authentication/protected-pages-apis.md +0 -97
- package/content/user-authentication/roles.md +0 -49
- package/content/user-authentication/two-factor.md +0 -229
- package/content/user-authentication/user-object.md +0 -58
- package/content/websockets/websocket-publish.md +0 -108
- package/content/websockets/websocket-subscriptions.md +0 -100
- package/content/websockets/websockets-introduction.md +0 -97
- package/hazards.json +0 -44
- package/scripts/hashDocSources.js +0 -38
- package/scripts/recordSourceHashes.js +0 -88
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
# PostHog
|
|
2
|
-
|
|
3
|
-
The `@lowdefy/plugin-posthog` plugin adds [PostHog](https://posthog.com) product analytics to a Lowdefy app. It wraps the `posthog-js` browser SDK in a set of actions: initialise PostHog, capture events, identify people and groups, manage consent and read feature flags.
|
|
4
|
-
|
|
5
|
-
The plugin bundles `posthog-js` as a module, so no script tag, snippet or reverse proxy configuration is needed.
|
|
6
|
-
|
|
7
|
-
## Install
|
|
8
|
-
|
|
9
|
-
The `@lowdefy/plugin-posthog` package is included by default, so no `plugins` entry is needed in `lowdefy.yaml`. The `posthog-js` SDK is loaded lazily: it is downloaded the first time [`PostHogInit`](/PostHogInit) runs with PostHog enabled, so an app with analytics switched off never downloads or runs it.
|
|
10
|
-
|
|
11
|
-
## Initialise PostHog
|
|
12
|
-
|
|
13
|
-
The [`PostHogInit`](/PostHogInit) action loads and configures `posthog-js`. Every other action in this package does nothing until it has run. A user can open the app on any page, so run it from the `onInit` event of every page. Keep the actions in one file and reference it from each page with `_ref`:
|
|
14
|
-
|
|
15
|
-
```yaml
|
|
16
|
-
# shared/posthog_init.yaml
|
|
17
|
-
- id: init_posthog
|
|
18
|
-
type: PostHogInit
|
|
19
|
-
params:
|
|
20
|
-
apiKey:
|
|
21
|
-
_build.env: POSTHOG_API_KEY
|
|
22
|
-
enabled:
|
|
23
|
-
_build.ne:
|
|
24
|
-
- _build.env: POSTHOG_API_KEY
|
|
25
|
-
- null
|
|
26
|
-
options:
|
|
27
|
-
capture_pageview: history_change
|
|
28
|
-
person_profiles: identified_only
|
|
29
|
-
- id: identify_person
|
|
30
|
-
type: PostHogIdentify
|
|
31
|
-
params:
|
|
32
|
-
id:
|
|
33
|
-
_user: id
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
```yaml
|
|
37
|
-
# pages/reports.yaml
|
|
38
|
-
id: reports
|
|
39
|
-
type: PageHeaderMenu
|
|
40
|
-
events:
|
|
41
|
-
onInit:
|
|
42
|
-
_ref: shared/posthog_init.yaml
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
When a page has `onInit` actions of its own, concatenate the lists at build time:
|
|
46
|
-
|
|
47
|
-
```yaml
|
|
48
|
-
events:
|
|
49
|
-
onInit:
|
|
50
|
-
_build.array.concat:
|
|
51
|
-
- _ref: shared/posthog_init.yaml
|
|
52
|
-
- - id: get_report
|
|
53
|
-
type: Request
|
|
54
|
-
params: get_report
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
`PostHogInit` is idempotent. The first call downloads and initialises `posthog-js`; later calls with the same `apiKey` do nothing, so running it on every page is safe. Calling it with a different `apiKey` throws, because a second PostHog instance would split the session.
|
|
58
|
-
|
|
59
|
-
The PostHog project API key is a public, write only key that is meant to ship in the browser bundle, so [`_build.env`](/_build) is the right operator for it. Never use a personal API key here.
|
|
60
|
-
|
|
61
|
-
###### Turning analytics off
|
|
62
|
-
|
|
63
|
-
With `enabled: false`, `PostHogInit` does not load `posthog-js` and every other action in this package becomes a silent no-op, so `apiKey` is not required. The example above sets `enabled` from the key itself: leave `POSTHOG_API_KEY` unset in local development and set it in the deployments that should send data. Any other build time switch works too, for example a `POSTHOG_ENABLED` environment variable:
|
|
64
|
-
|
|
65
|
-
```yaml
|
|
66
|
-
enabled:
|
|
67
|
-
_build.eq:
|
|
68
|
-
- _build.env: POSTHOG_ENABLED
|
|
69
|
-
- 'true'
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
A later `PostHogInit` call with `enabled: true` and an `apiKey` still loads PostHog after a disabled call. The reverse throws: once PostHog is running, use [`PostHogOptOut`](/PostHogOptOut) to stop capturing for a person.
|
|
73
|
-
|
|
74
|
-
## Analytics never breaks the app
|
|
75
|
-
|
|
76
|
-
Every action in this package, except `PostHogInit`, does nothing and returns `null` when PostHog is disabled or `posthog-js` could not be downloaded. A disabled environment or a flaky network can never throw from an analytics action and can never stop an event chain. [`PostHogFeatureFlag`](/PostHogFeatureFlag) returns its configured `default` instead of `null`, so flag driven config keeps working with PostHog switched off, and [`PostHogReloadFeatureFlags`](/PostHogReloadFeatureFlags) returns `{ flags: [], variants: {} }`.
|
|
77
|
-
|
|
78
|
-
Two kinds of config mistake are still reported:
|
|
79
|
-
|
|
80
|
-
- __Invalid params__ always throw, whether PostHog is enabled or not, so a mistake shows up in development even when analytics is switched off there.
|
|
81
|
-
- __A PostHog action that runs before `PostHogInit`__ does nothing, and logs a warning to the browser console once.
|
|
82
|
-
|
|
83
|
-
An action that runs while `PostHogInit` is still downloading `posthog-js` waits for it to finish.
|
|
84
|
-
|
|
85
|
-
## Never send personal data
|
|
86
|
-
|
|
87
|
-
Never send personally identifiable information to PostHog: no names, no email addresses, no phone numbers, and no free text a user typed into a form. Send stable ids and low cardinality attributes such as a plan name, a role, a locale or an organization id.
|
|
88
|
-
|
|
89
|
-
## Pageviews
|
|
90
|
-
|
|
91
|
-
A Lowdefy app routes on the client without a page load, so the `posthog-js` default, `capture_pageview: true`, only captures the first page. Set `capture_pageview: history_change` in the `PostHogInit` options, as in the example above, and `posthog-js` captures a `$pageview` every time the path changes. It also captures a `$pageleave` when the tab is closed, which PostHog needs for bounce rate and time on page.
|
|
92
|
-
|
|
93
|
-
To capture pageviews by hand instead, for example to add properties to them, set `capture_pageview: false` and run [`PostHogPageview`](/PostHogPageview) from each page's `onMountAsync` event, which runs every time the page is shown without holding it in a loading state:
|
|
94
|
-
|
|
95
|
-
```yaml
|
|
96
|
-
# pages/reports.yaml
|
|
97
|
-
id: reports
|
|
98
|
-
type: PageHeaderMenu
|
|
99
|
-
events:
|
|
100
|
-
onInit:
|
|
101
|
-
_ref: shared/posthog_init.yaml
|
|
102
|
-
onMountAsync:
|
|
103
|
-
- id: capture_pageview
|
|
104
|
-
type: PostHogPageview
|
|
105
|
-
params:
|
|
106
|
-
properties:
|
|
107
|
-
section: reports
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
With automatic pageviews off, `posthog-js` also stops capturing pageleaves, because `capture_pageleave` defaults to `if_capture_pageview`. Set `capture_pageleave: true` in the options to keep them, or capture one by hand with [`PostHogCapturePageLeave`](/PostHogCapturePageLeave), for example before a `Link` or `Logout` action. The page `onHidden` event is not a page leave: it also fires when the browser window loses focus.
|
|
111
|
-
|
|
112
|
-
## Identify a person
|
|
113
|
-
|
|
114
|
-
[`PostHogIdentify`](/PostHogIdentify) ties the current browser session to a person. Run it once the user is known, usually right after `PostHogInit` in the shared page `onInit` actions, as in the example above, or after a successful login.
|
|
115
|
-
|
|
116
|
-
```yaml
|
|
117
|
-
- id: identify_person
|
|
118
|
-
type: PostHogIdentify
|
|
119
|
-
params:
|
|
120
|
-
id:
|
|
121
|
-
_user: id
|
|
122
|
-
properties:
|
|
123
|
-
role:
|
|
124
|
-
_user: role
|
|
125
|
-
locale:
|
|
126
|
-
_locale: active
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
A missing or empty `id` is a no-op, so on a public page the anonymous session is left alone. That anonymous session is what a later `PostHogIdentify` merges into the person, which is what makes signup funnels work. `null` and `undefined` property values are dropped, so an absent value never overwrites one PostHog already has.
|
|
130
|
-
|
|
131
|
-
The action is safe to run on every page. It reads the identity `posthog-js` already holds:
|
|
132
|
-
|
|
133
|
-
- __Same person__: when the id is already the current `distinct_id`, it only updates the person properties, if any are given. `posthog-js` skips a property update identical to the previous one.
|
|
134
|
-
- __Person swap__: PostHog refuses to move an identified `distinct_id` onto a different person, so when the browser is identified as someone else, `PostHogIdentify` calls `reset()` before identifying the new person.
|
|
135
|
-
- __Anonymous visitor__: identified without a reset, so the anonymous session merges into the person.
|
|
136
|
-
|
|
137
|
-
Use [`PostHogSetPersonProperties`](/PostHogSetPersonProperties) to update a person's properties on their own, and [`PostHogAlias`](/PostHogAlias) to point a second id at the person PostHog already knows.
|
|
138
|
-
|
|
139
|
-
## Sign out
|
|
140
|
-
|
|
141
|
-
[`PostHogReset`](/PostHogReset) forgets the current person and starts a fresh anonymous session. Run it on sign out so the next person on a shared browser is not merged into this one.
|
|
142
|
-
|
|
143
|
-
```yaml
|
|
144
|
-
- id: reset_posthog
|
|
145
|
-
type: PostHogReset
|
|
146
|
-
- id: logout
|
|
147
|
-
type: Logout
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Capture events
|
|
151
|
-
|
|
152
|
-
[`PostHogCapture`](/PostHogCapture) captures a named product event.
|
|
153
|
-
|
|
154
|
-
```yaml
|
|
155
|
-
- id: submit_report
|
|
156
|
-
type: Button
|
|
157
|
-
properties:
|
|
158
|
-
title: Submit report
|
|
159
|
-
events:
|
|
160
|
-
onClick:
|
|
161
|
-
- id: submit
|
|
162
|
-
type: Request
|
|
163
|
-
params: submit_report
|
|
164
|
-
- id: capture_event
|
|
165
|
-
type: PostHogCapture
|
|
166
|
-
params:
|
|
167
|
-
event: report_submitted
|
|
168
|
-
properties:
|
|
169
|
-
report_type:
|
|
170
|
-
_state: report_type
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Autocapture already records clicks and pageviews, so keep the set of named events small. Every event is billable, and a funnel of thirty near identical events tells you less than one of five.
|
|
174
|
-
|
|
175
|
-
## Groups
|
|
176
|
-
|
|
177
|
-
[`PostHogGroup`](/PostHogGroup) associates the current person with a group, so events can be analysed per organization, team or account. The association sticks until `PostHogReset` is called, so run it after `PostHogIdentify`.
|
|
178
|
-
|
|
179
|
-
```yaml
|
|
180
|
-
- id: set_group
|
|
181
|
-
type: PostHogGroup
|
|
182
|
-
params:
|
|
183
|
-
type: organization
|
|
184
|
-
key:
|
|
185
|
-
_user: organizationId
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
## Feature flags
|
|
189
|
-
|
|
190
|
-
[`PostHogFeatureFlag`](/PostHogFeatureFlag) reads a feature flag and returns its value, so it can be used further down the action chain with the [`_actions`](/_actions) operator. The value is whatever PostHog resolved for this person when flags were last loaded; the action does not wait for a network call. When the person or their groups just changed, reload the flags first with [`PostHogReloadFeatureFlags`](/PostHogReloadFeatureFlags), which resolves once the new flags have arrived.
|
|
191
|
-
|
|
192
|
-
```yaml
|
|
193
|
-
events:
|
|
194
|
-
onMount:
|
|
195
|
-
- id: read_flag
|
|
196
|
-
type: PostHogFeatureFlag
|
|
197
|
-
params:
|
|
198
|
-
key: new-checkout
|
|
199
|
-
default: control
|
|
200
|
-
- id: store_flag
|
|
201
|
-
type: SetState
|
|
202
|
-
params:
|
|
203
|
-
checkout_variant:
|
|
204
|
-
_actions: read_flag.response
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
After a change that affects flag targeting, reload before reading:
|
|
208
|
-
|
|
209
|
-
```yaml
|
|
210
|
-
- id: switch_organization
|
|
211
|
-
type: Button
|
|
212
|
-
events:
|
|
213
|
-
onClick:
|
|
214
|
-
- id: set_group
|
|
215
|
-
type: PostHogGroup
|
|
216
|
-
params:
|
|
217
|
-
type: organization
|
|
218
|
-
key:
|
|
219
|
-
_state: organization_id
|
|
220
|
-
- id: reload_flags
|
|
221
|
-
type: PostHogReloadFeatureFlags
|
|
222
|
-
- id: store_flags
|
|
223
|
-
type: SetState
|
|
224
|
-
params:
|
|
225
|
-
feature_flags:
|
|
226
|
-
_actions: reload_flags.response.variants
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Consent
|
|
230
|
-
|
|
231
|
-
When consent is required before any data is sent, initialise PostHog with capturing switched off, and turn it on with [`PostHogOptIn`](/PostHogOptIn) when the user accepts, or keep it off with [`PostHogOptOut`](/PostHogOptOut):
|
|
232
|
-
|
|
233
|
-
```yaml
|
|
234
|
-
# shared/posthog_init.yaml
|
|
235
|
-
- id: init_posthog
|
|
236
|
-
type: PostHogInit
|
|
237
|
-
params:
|
|
238
|
-
apiKey:
|
|
239
|
-
_build.env: POSTHOG_API_KEY
|
|
240
|
-
options:
|
|
241
|
-
capture_pageview: history_change
|
|
242
|
-
opt_out_capturing_by_default: true
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
```yaml
|
|
246
|
-
# the consent banner
|
|
247
|
-
- id: accept_analytics
|
|
248
|
-
type: Button
|
|
249
|
-
properties:
|
|
250
|
-
title: Accept
|
|
251
|
-
events:
|
|
252
|
-
onClick:
|
|
253
|
-
- id: opt_in
|
|
254
|
-
type: PostHogOptIn
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
The choice is remembered in the persistence store configured on `PostHogInit`.
|
|
258
|
-
|
|
259
|
-
## Actions
|
|
260
|
-
|
|
261
|
-
| Action | Params | Response |
|
|
262
|
-
| --- | --- | --- |
|
|
263
|
-
| [`PostHogInit`](/PostHogInit) | `apiKey`, `apiHost`, `options`, `debug`, `enabled` | `null` |
|
|
264
|
-
| [`PostHogCapture`](/PostHogCapture) | `event`, `properties`, `groups` | `null` |
|
|
265
|
-
| [`PostHogPageview`](/PostHogPageview) | `properties` | `null` |
|
|
266
|
-
| [`PostHogCapturePageLeave`](/PostHogCapturePageLeave) | `properties` | `null` |
|
|
267
|
-
| [`PostHogIdentify`](/PostHogIdentify) | `id`, `properties`, `propertiesOnce` | `null` |
|
|
268
|
-
| [`PostHogSetPersonProperties`](/PostHogSetPersonProperties) | `set`, `setOnce` | `null` |
|
|
269
|
-
| [`PostHogAlias`](/PostHogAlias) | `alias` | `null` |
|
|
270
|
-
| [`PostHogGroup`](/PostHogGroup) | `type`, `key`, `properties` | `null` |
|
|
271
|
-
| [`PostHogReset`](/PostHogReset) | `resetDeviceId` | `null` |
|
|
272
|
-
| [`PostHogOptIn`](/PostHogOptIn) | none | `null` |
|
|
273
|
-
| [`PostHogOptOut`](/PostHogOptOut) | none | `null` |
|
|
274
|
-
| [`PostHogFeatureFlag`](/PostHogFeatureFlag) | `key`, `default`, `enabled`, `payload` | the flag value, or `default` |
|
|
275
|
-
| [`PostHogReloadFeatureFlags`](/PostHogReloadFeatureFlags) | `timeout` | `{ flags, variants }` |
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# Auth.js Providers
|
|
2
|
-
|
|
3
|
-
All Auth.js preconfigured OAuth providers can be used in a Lowdefy app. The provider properties are mapped through directly, so the Auth.js documentation can be used as reference. They usually only need a few configuration properties to be used. Since these properties include secrets, the [`_secret`](/_secret) operator should be used to configure these properties.
|
|
4
|
-
|
|
5
|
-
For most OAuth providers, a callback URL must be configured with the provider for security reasons. This URL is the URL to which the user will be redirected to complete the login flow. This URL should be set to `<app-domain>/api/auth/callback/<providerId>` where the `providerId` is the Lowdefy providerId.
|
|
6
|
-
|
|
7
|
-
> This is not the same as the callback URL specified in the Login action, which is where the user is redirected by the Lowdefy app once login is complete.
|
|
8
|
-
|
|
9
|
-
The providers that can be used are:
|
|
10
|
-
|
|
11
|
-
- [FortyTwoProvider](https://authjs.dev/reference/core/providers/42-school)
|
|
12
|
-
- [AppleProvider](https://authjs.dev/reference/core/providers/apple)
|
|
13
|
-
- [AtlassianProvider](https://authjs.dev/reference/core/providers/atlassian)
|
|
14
|
-
- [Auth0Provider](https://authjs.dev/reference/core/providers/auth0)
|
|
15
|
-
- [AuthentikProvider](https://authjs.dev/reference/core/providers/authentik)
|
|
16
|
-
- [AzureADB2CProvider](https://authjs.dev/reference/core/providers/azure-ad-b2c)
|
|
17
|
-
- [AzureADProvider](https://authjs.dev/reference/core/providers/azure-ad)
|
|
18
|
-
- [BattleNetProvider](https://authjs.dev/reference/core/providers/battlenet)
|
|
19
|
-
- [BoxProvider](https://authjs.dev/reference/core/providers/box)
|
|
20
|
-
- [BoxyHQSAMLProvider](https://authjs.dev/reference/core/providers/boxyhq-saml)
|
|
21
|
-
- [BungieProvider](https://authjs.dev/reference/core/providers/bungie)
|
|
22
|
-
- [CognitoProvider](https://authjs.dev/reference/core/providers/cognito)
|
|
23
|
-
- [CoinbaseProvider](https://authjs.dev/reference/core/providers/coinbase)
|
|
24
|
-
- [DiscordProvider](https://authjs.dev/reference/core/providers/discord)
|
|
25
|
-
- [DropboxProvider](https://authjs.dev/reference/core/providers/dropbox)
|
|
26
|
-
- [EVEOnlineProvider](https://authjs.dev/reference/core/providers/eveonline)
|
|
27
|
-
- [FacebookProvider](https://authjs.dev/reference/core/providers/facebook)
|
|
28
|
-
- [FaceItProvider](https://authjs.dev/reference/core/providers/faceit)
|
|
29
|
-
- [FourSquareProvider](https://authjs.dev/reference/core/providers/foursquare)
|
|
30
|
-
- [FreshbooksProvider](https://authjs.dev/reference/core/providers/freshbooks)
|
|
31
|
-
- [FusionAuthProvider](https://authjs.dev/reference/core/providers/fusionauth)
|
|
32
|
-
- [GitHubProvider](https://authjs.dev/reference/core/providers/github)
|
|
33
|
-
- [GitlabProvider](https://authjs.dev/reference/core/providers/gitlab)
|
|
34
|
-
- [GoogleProvider](https://authjs.dev/reference/core/providers/google)
|
|
35
|
-
- [HubspotProvider](https://authjs.dev/reference/core/providers/hubspot)
|
|
36
|
-
- [InstagramProvider](https://authjs.dev/reference/core/providers/instagram)
|
|
37
|
-
- [KakaoProvider](https://authjs.dev/reference/core/providers/kakao)
|
|
38
|
-
- [KeycloakProvider](https://authjs.dev/reference/core/providers/keycloak)
|
|
39
|
-
- [LineProvider](https://authjs.dev/reference/core/providers/line)
|
|
40
|
-
- [LinkedInProvider](https://authjs.dev/reference/core/providers/linkedin)
|
|
41
|
-
- [MailchimpProvider](https://authjs.dev/reference/core/providers/mailchimp)
|
|
42
|
-
- [MailRuProvider](https://authjs.dev/reference/core/providers/mailru)
|
|
43
|
-
- [MediumProvider](https://authjs.dev/reference/core/providers/medium)
|
|
44
|
-
- [NaverProvider](https://authjs.dev/reference/core/providers/naver)
|
|
45
|
-
- [NetlifyProvider](https://authjs.dev/reference/core/providers/netlify)
|
|
46
|
-
- [OktaProvider](https://authjs.dev/reference/core/providers/okta)
|
|
47
|
-
- [OneLoginProvider](https://authjs.dev/reference/core/providers/onelogin)
|
|
48
|
-
- [OssoProvider](https://authjs.dev/reference/core/providers/osso)
|
|
49
|
-
- [OsuProvider](https://authjs.dev/reference/core/providers/osu)
|
|
50
|
-
- [PassageProvider](https://authjs.dev/reference/core/providers/passage)
|
|
51
|
-
- [PatreonProvider](https://authjs.dev/reference/core/providers/patreon)
|
|
52
|
-
- [PinterestProvider](https://authjs.dev/reference/core/providers/pinterest)
|
|
53
|
-
- [PipedriveProvider](https://authjs.dev/reference/core/providers/pipedrive)
|
|
54
|
-
- [RedditProvider](https://authjs.dev/reference/core/providers/reddit)
|
|
55
|
-
- [SalesforceProvider](https://authjs.dev/reference/core/providers/salesforce)
|
|
56
|
-
- [SlackProvider](https://authjs.dev/reference/core/providers/slack)
|
|
57
|
-
- [SpotifyProvider](https://authjs.dev/reference/core/providers/spotify)
|
|
58
|
-
- [StravaProvider](https://authjs.dev/reference/core/providers/strava)
|
|
59
|
-
- [TodoistProvider](https://authjs.dev/reference/core/providers/todoist)
|
|
60
|
-
- [TraktProvider](https://authjs.dev/reference/core/providers/trakt)
|
|
61
|
-
- [TwitchProvider](https://authjs.dev/reference/core/providers/twitch)
|
|
62
|
-
- [TwitterProvider](https://authjs.dev/reference/core/providers/twitter)
|
|
63
|
-
- [UnitedEffects](https://authjs.dev/reference/core/providers/united-effects)
|
|
64
|
-
- [VkProvider](https://authjs.dev/reference/core/providers/vk)
|
|
65
|
-
- [WikimediaProvider](https://authjs.dev/reference/core/providers/wikimedia)
|
|
66
|
-
- [WordpressProvider](https://authjs.dev/reference/core/providers/wordpress)
|
|
67
|
-
- [WorkOSProvider](https://authjs.dev/reference/core/providers/workos)
|
|
68
|
-
- [YandexProvider](https://authjs.dev/reference/core/providers/yandex)
|
|
69
|
-
- [ZitadelProvider](https://authjs.dev/reference/core/providers/zitadel)
|
|
70
|
-
- [ZohoProvider](https://authjs.dev/reference/core/providers/zoho)
|
|
71
|
-
- [ZoomProvider](https://authjs.dev/reference/core/providers/zoom)
|
|
72
|
-
|
|
73
|
-
#### Examples
|
|
74
|
-
|
|
75
|
-
###### Auth0 configuration:
|
|
76
|
-
|
|
77
|
-
```yaml
|
|
78
|
-
lowdefy: 6.0.0
|
|
79
|
-
auth:
|
|
80
|
-
providers:
|
|
81
|
-
- id: auth0
|
|
82
|
-
type: Auth0Provider
|
|
83
|
-
properties:
|
|
84
|
-
clientId:
|
|
85
|
-
_secret: AUTH0_CLIENT_ID
|
|
86
|
-
clientSecret:
|
|
87
|
-
_secret: AUTH0_CLIENT_SECRET
|
|
88
|
-
issuer:
|
|
89
|
-
_secret: AUTH0_ISSUER
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
In Auth0, the callback URL should be configured to `https://example.com/api/auth/callback/auth0` for production and `http://localhost:3000/api/auth/callback/auth0` for development.
|
|
93
|
-
|
|
94
|
-
###### GitHub configuration:
|
|
95
|
-
|
|
96
|
-
```yaml
|
|
97
|
-
lowdefy: 6.0.0
|
|
98
|
-
auth:
|
|
99
|
-
providers:
|
|
100
|
-
- id: github
|
|
101
|
-
type: GitHubProvider
|
|
102
|
-
properties:
|
|
103
|
-
clientId:
|
|
104
|
-
_secret: GITHUB_CLIENT_ID
|
|
105
|
-
clientSecret:
|
|
106
|
-
_secret: GITHUB_CLIENT_SECRET
|
|
107
|
-
```
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# OpenIDConnectProvider
|
|
2
|
-
|
|
3
|
-
The OpenIDConnectProvider can be used to authenticate with a OpenID Connect compliant identity provider that is not already included as a default Auth.js provider, without the need to develop a custom provider plugin.
|
|
4
|
-
|
|
5
|
-
#### Properties
|
|
6
|
-
|
|
7
|
-
###### object
|
|
8
|
-
- `wellKnown: string`
|
|
9
|
-
- `authorization: string | object`: The default is `{ params: { scope: 'openid email profile' } }`.
|
|
10
|
-
- `token: string | object`
|
|
11
|
-
- `userinfo: string | object`
|
|
12
|
-
- `version: string`
|
|
13
|
-
- `checks: string | string[]`: The default is `['pkce', 'state']`
|
|
14
|
-
- `clientId: string`
|
|
15
|
-
- `clientSecret: string`
|
|
16
|
-
- `idToken: boolean`: The default is `true`.
|
|
17
|
-
- `region: string`
|
|
18
|
-
- `issuer: string`
|
|
19
|
-
- `allowDangerousEmailAccountLinking: boolean`
|
|
20
|
-
- `style: object`
|
|
21
|
-
|
|
22
|
-
###### See the [Auth.js OAuth provider guide](https://authjs.dev/guides/configuring-oauth-providers) for more details on provider properties.
|
|
23
|
-
|
|
24
|
-
#### Examples
|
|
25
|
-
|
|
26
|
-
###### Simple configuration.
|
|
27
|
-
|
|
28
|
-
Usually only the `wellKnown`, `clientId` and `clientSecret` properties need to be configured:
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
lowdefy: 6.0.0
|
|
32
|
-
providers:
|
|
33
|
-
- id: my_provider
|
|
34
|
-
type: OpenIDConnectProvider
|
|
35
|
-
properties:
|
|
36
|
-
wellKnown:
|
|
37
|
-
_secret: OPENID_CONNECT_WELLKNOWN
|
|
38
|
-
clientId:
|
|
39
|
-
_secret: OPENID_CONNECT_CLIENT_ID
|
|
40
|
-
clientSecret:
|
|
41
|
-
_secret: OPENID_CONNECT_CLIENT_SECRET
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
where `LOWDEFY_SECRET_OPENID_CONNECT_WELLKNOWN` usually has the format `https://my-provider.com/.well-known/openid-configuration`
|