@mindful-web/marko-web-identity-x 1.76.7 → 1.78.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/CLAUDE.md +139 -0
- package/README.md +48 -0
- package/browser/access.vue +13 -2
- package/browser/comments/create.vue +8 -0
- package/browser/comments/stream.vue +20 -2
- package/browser/download.vue +13 -2
- package/components/access.marko.js +2 -2
- package/components/comment-stream.marko.js +2 -2
- package/components/context.marko.js +2 -2
- package/components/form-access.marko +4 -0
- package/components/form-access.marko.js +7 -2
- package/components/form-authenticate.marko +2 -0
- package/components/form-authenticate.marko.js +14 -2
- package/components/form-change-email.marko.js +2 -2
- package/components/form-login.marko +2 -0
- package/components/form-login.marko.js +14 -2
- package/components/form-logout.marko.js +2 -2
- package/components/form-profile.marko.js +2 -2
- package/components/form-register.marko.js +2 -2
- package/components/google-init.marko +73 -0
- package/components/google-init.marko.js +95 -0
- package/components/google-sign-in-button.marko +24 -0
- package/components/google-sign-in-button.marko.js +44 -0
- package/components/identify.marko.js +2 -2
- package/components/marko.json +11 -0
- package/components/non-auth-identify.marko.js +2 -2
- package/components/subscribe.marko.js +2 -2
- package/config.js +17 -0
- package/package.json +3 -2
- package/routes/google.js +206 -0
- package/routes/index.js +2 -0
- package/routes/logout.js +5 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# marko-web-identity-x — Claude Code Context
|
|
2
|
+
|
|
3
|
+
The Marko/Express wrapper for **IdentityX** (Parameter1's identity + access platform) on Mindful
|
|
4
|
+
Web sites. Owns the whole authenticated-user surface: login / register / authenticate (email-link)
|
|
5
|
+
/ profile / logout, content access + download gating, comments, and the server-side IdentityX API
|
|
6
|
+
client. Add-ons layer on top: `marko-web-omeda-identity-x` (wraps this and adds Omeda hooks —
|
|
7
|
+
how most sites install it), `marko-web-auth0-identity-x`, `marko-web-identity-x-mailchimp`. Google
|
|
8
|
+
Sign-In (One-Tap + button) is **built in** here (see below).
|
|
9
|
+
|
|
10
|
+
## Config model — the `IdentityXConfiguration` instance (`config.js`)
|
|
11
|
+
|
|
12
|
+
Unlike most Mindful packages, config is **not** read from `site.getAsObject(...)` — it's an
|
|
13
|
+
instance of `IdentityXConfiguration` (`new IdentityX({...})`), passed to the installer and injected
|
|
14
|
+
onto every request as `req.identityX.config`. Read in templates via
|
|
15
|
+
`req.identityX.config.get(...)` / `.getAsObject(...)` / typed getters.
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
const IdentityX = require('@mindful-web/marko-web-identity-x/config');
|
|
19
|
+
const config = new IdentityX({
|
|
20
|
+
appId: '<APP-ID>', // required
|
|
21
|
+
apiToken: process.env.IDENTITYX_API_TOKEN, // required for write ops
|
|
22
|
+
requiredServerFields: ['organization', 'countryCode'],
|
|
23
|
+
requiredClientFields: [...], // gate access until present
|
|
24
|
+
hiddenFields: [...], defaultCountryCode, booleanQuestionsLabel, gtmUserFields,
|
|
25
|
+
onHookError: newrelic.noticeError.bind(newrelic), // hook + google-auth error reporter
|
|
26
|
+
googleAuth: { clientId, missingFieldsBehavior, autoPrompt, signInButtonEnabled }, // opt-in; see below
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Arbitrary extra keys pass through `...rest` into `options` and are reachable via `config.get(path)`.
|
|
31
|
+
`endpointTypes` (`authenticate|changeEmail|login|logout|register|profile`) map to `/user/<type>`
|
|
32
|
+
routes via `getEndpointFor(type)` (override with an `endpoints` config key).
|
|
33
|
+
|
|
34
|
+
## Wiring (`index.js`)
|
|
35
|
+
|
|
36
|
+
`IdentityX(app, config, { templates })`:
|
|
37
|
+
1. `app.use(middleware(config))` — injects the service (below).
|
|
38
|
+
2. `app.use('/__idx', routes)` — the JSON API router.
|
|
39
|
+
3. For each `endpointType` with a supplied `template`, registers `GET <endpoint>` to render it
|
|
40
|
+
(the `authenticate` endpoint redirects to profile when a token is already present).
|
|
41
|
+
|
|
42
|
+
Most sites don't call this directly — they call `omedaIdentityX(app, { idxConfig, idxRouteTemplates, … })`,
|
|
43
|
+
which adds Omeda integration hooks to `idxConfig` and then calls `identityX(app, idxConfig, …)`
|
|
44
|
+
internally. So **`googleAuth` goes on the `idxConfig` instance**, not the omeda params and not site config.
|
|
45
|
+
|
|
46
|
+
## Middleware (`middleware.js`)
|
|
47
|
+
|
|
48
|
+
Injects a per-request `IdentityX` **service** instance as `req.identityX` (+ `res.locals.identityX`),
|
|
49
|
+
reads the token cookie, and sets the identity cookie for logged-in users. `IdentityXRequest.identityX`
|
|
50
|
+
is the type every route/template relies on.
|
|
51
|
+
|
|
52
|
+
## Routes — `/__idx/*` (`routes/index.js`)
|
|
53
|
+
|
|
54
|
+
JSON API behind the Vue components: `authenticate`, `login`, `login-fields`, `logout`, `profile`,
|
|
55
|
+
`access`, `download`, `change-email/{initiate,confirm}`, `comment(s)`/`comment-count`/`flag`,
|
|
56
|
+
`countries`/`regions`, and **`google`** (see below). `logout.js` removes the context cookie, calls
|
|
57
|
+
`onLogout` (tokenless) or `logoutAppUser`, and **clears the GIS `g_state` cookie** unconditionally.
|
|
58
|
+
|
|
59
|
+
## Components / tags (`components/marko.json`)
|
|
60
|
+
|
|
61
|
+
Marko wrappers (`<marko-web-identity-x-*>`) that render a matching **browser Vue component**
|
|
62
|
+
(`browser/*.vue`, registered in `browser/index.js` as `IdentityX*`, overridable via
|
|
63
|
+
`Custom*Component`): `form-login`, `form-authenticate`, `form-register`, `form-profile`,
|
|
64
|
+
`form-change-email`, `form-logout`, `form-access`, `access`, `comment-stream`, `identify` /
|
|
65
|
+
`non-auth-identify`, `context` (a `|{ user, application, fields, isEnabled }|` provider), and the
|
|
66
|
+
Google tags. Vue components emit an EventBus stream bridged to `dataLayer` + p1events (see
|
|
67
|
+
`browser/index.js`).
|
|
68
|
+
|
|
69
|
+
## Service (`service.js`)
|
|
70
|
+
|
|
71
|
+
Server-side IdentityX GraphQL client (Apollo, idx-compat). Key methods: `loadActiveContext`,
|
|
72
|
+
`loadAppUserByEmail` / `findUserById` / `findUserByExternalId`, `createAppUser`,
|
|
73
|
+
`impersonateAppUser`, `logoutAppUser`, `addExternalUserId`, `setUnverifiedAppUserData`,
|
|
74
|
+
`generateEntityId`, `sendLoginLink`, `checkContentAccess`, cookie helpers (`setToken`,
|
|
75
|
+
`setIdentityCookie`, `getIdentity`). Org-scoped writes use `getOrgUserApiToken()`.
|
|
76
|
+
|
|
77
|
+
## Hooks (`hooks.js`)
|
|
78
|
+
|
|
79
|
+
`onLoadActiveContext`, `onLoginLinkSent`, `onAuthenticationSuccess`, `onLogout`,
|
|
80
|
+
`onChangeEmailLinkSent`, `onChangeEmailSuccess`, `onUserProfileUpdate`. Registered via
|
|
81
|
+
`config.addHook({ name, fn, shouldAwait })` and invoked with `utils/call-hooks-for`. This is the
|
|
82
|
+
seam Omeda uses for rapid-identify + subscription sync. **Note:** `onLogout` currently fires only
|
|
83
|
+
in the tokenless logout branch — a "fire `onLogout` always" change would let the `g_state` clear
|
|
84
|
+
become a hook rather than inline route code.
|
|
85
|
+
|
|
86
|
+
## Google Sign-In (One-Tap + button) — folded in 2026-07
|
|
87
|
+
|
|
88
|
+
Verifies a Google Identity Services (GIS) credential server-side and drops the user into the
|
|
89
|
+
standard IdentityX session, bypassing the email-link step. Handles the One-Tap prompt **and** the
|
|
90
|
+
rendered "Sign in with Google" button; both post to `POST /__idx/google`. **Dormant until
|
|
91
|
+
`googleAuth.clientId` is set** — no client id ⇒ nothing renders and the route 400s. Previously a
|
|
92
|
+
standalone `marko-web-google-identity-x` package; folded in here because it was ~all ceremony gated
|
|
93
|
+
on a client id and already depended on idx internals.
|
|
94
|
+
|
|
95
|
+
**Config** (on the IdentityX config, above): `clientId` (master gate — per-deploy env),
|
|
96
|
+
`missingFieldsBehavior` (`profile-gate` default | `immediate` | `relaxed`; `relaxed` is a doc-only
|
|
97
|
+
alias of `immediate` — only `profile-gate` is special-cased), `autoPrompt` (site-wide floating
|
|
98
|
+
overlay), `signInButtonEnabled` (button; default true).
|
|
99
|
+
|
|
100
|
+
**Route — `routes/google.js` (`POST /__idx/google`).** Verify the JWT →
|
|
101
|
+
`loadAppUserByEmail`/`createAppUser` (**email is the primary key**) → link the Google `sub` as a
|
|
102
|
+
supplementary external id under `{ provider:'google', tenant:'oauth', type:'account' }` (idempotent;
|
|
103
|
+
conflict-guarded; non-fatal via `config.get('onHookError')`) → `impersonateAppUser({ method:'GOOGLE_ONE_TAP', verify:true })`
|
|
104
|
+
→ backfill given/family name only if absent → fire `onLoginLinkSent` **then** (re-fetch)
|
|
105
|
+
`onAuthenticationSuccess`, same order/hooks as email-link so Omeda rapid-identify + subscription
|
|
106
|
+
sync run identically. `profile-gate` computes `requiresUserInput` by checking required fields are
|
|
107
|
+
non-empty (deliberately not `forceProfileReVerification`). Responds `{ ok, requiresUserInput,
|
|
108
|
+
redirectTo, user, entity, … }`; the client redirects to `/user/profile` when input is required.
|
|
109
|
+
|
|
110
|
+
**Tags** (`components/marko.json`, config read from `req.identityX.config`):
|
|
111
|
+
- `<marko-web-identity-x-google-init>` — loads the GSI client + defines `window.handleGoogleOneTapCredential`;
|
|
112
|
+
shows the One-Tap prompt when `autoPrompt`. The button depends on this being on the page.
|
|
113
|
+
- `<marko-web-identity-x-google-sign-in-button client-id= redirect-to= label=>` — the button; self-hides
|
|
114
|
+
when unconfigured or `signInButtonEnabled` is false.
|
|
115
|
+
|
|
116
|
+
**Auto-rendering.** Both tags render inside `form-login.marko` + `form-authenticate.marko`, so the
|
|
117
|
+
login/authenticate pages get the button with **no per-site edit**. For the site-wide floating prompt
|
|
118
|
+
(`autoPrompt: true`), a site additionally drops `<marko-web-identity-x-google-init/>` once in its
|
|
119
|
+
document layout, gated on `!req.identityX.token`. The button tag can also be placed in a content
|
|
120
|
+
meter / gate.
|
|
121
|
+
|
|
122
|
+
**CSS.** `.google-sign-in` styles ship in `marko-web-theme-monorail/scss/components/_identity-x.scss`
|
|
123
|
+
(with the rest of the auth CSS) — no separate import.
|
|
124
|
+
|
|
125
|
+
**Logout.** `routes/logout.js` clears the GIS `g_state` cookie so a later sign-in with a *different*
|
|
126
|
+
Google account isn't blocked by stale auto-select state (harmless no-op when Google Sign-In is unused).
|
|
127
|
+
|
|
128
|
+
**Deliberate decisions / limitations.** `loginSource: 'google-one-tap'` and
|
|
129
|
+
`method: 'GOOGLE_ONE_TAP'` are emitted for BOTH surfaces (don't distinguish button vs prompt) —
|
|
130
|
+
kept for analytics/enum continuity. One success p1event (`Identity / Authenticate`, label
|
|
131
|
+
`Google Sign In` for the button via GIS `select_by` `btn*`, else `Google One Tap`), fired client-side
|
|
132
|
+
after `setIdentity`. `google-auth-library` is now a base-idx dependency (every site pulls it,
|
|
133
|
+
server-only) — accepted because the feature is gated on the client id. The Google OAuth app must
|
|
134
|
+
list each site origin as an authorized JavaScript origin or the surfaces silently no-show.
|
|
135
|
+
|
|
136
|
+
## Fleet / rollout
|
|
137
|
+
|
|
138
|
+
Not tracked in-repo. The Google-auth architecture change + fleet rollout plan lives outside the repo
|
|
139
|
+
at `../GOOGLE-AUTH-ROLLOUT.md` (mindful working dir).
|
package/README.md
CHANGED
|
@@ -197,4 +197,52 @@ Each component will emit an event when an error is encountered and include the e
|
|
|
197
197
|
| `identity-x-profile-errored` | `{ label, message: '...', ...additionalEventData }`
|
|
198
198
|
| `identity-x-comment-post-errored` | `{ label, message: '...', ...additionalEventData }`
|
|
199
199
|
| `identity-x-comment-report-errored` | `{ label, message: '...', ...additionalEventData }`
|
|
200
|
+
|
|
201
|
+
## Google Sign-In (One-Tap + button)
|
|
202
|
+
|
|
203
|
+
Built in. Verifies a Google Identity Services (GIS) credential server-side and drops the user
|
|
204
|
+
into the standard IdentityX session, bypassing the email-link step. Handles both the One-Tap
|
|
205
|
+
prompt and the rendered "Sign in with Google" button; both post to `POST /__idx/google`.
|
|
206
|
+
|
|
207
|
+
**Dormant until configured** — with no `clientId`, nothing renders and the route 400s. Enable
|
|
208
|
+
per-site by adding a `googleAuth` block to the IdentityX config:
|
|
209
|
+
|
|
210
|
+
```js
|
|
211
|
+
const config = new IdentityX({
|
|
212
|
+
appId: '<MY-APPLICATION-ID>',
|
|
213
|
+
googleAuth: {
|
|
214
|
+
clientId: process.env.GOOGLE_AUTH_CLIENT_ID || '', // GIS OAuth client id — the master gate
|
|
215
|
+
missingFieldsBehavior: 'profile-gate', // 'profile-gate' | 'immediate' | 'relaxed'
|
|
216
|
+
autoPrompt: false, // floating One-Tap overlay
|
|
217
|
+
signInButtonEnabled: true, // render the button
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Reading the values from env is optional — set literals here if you'd rather not manage infra
|
|
223
|
+
env vars. The client id's Google OAuth app must list each site origin as an **authorized
|
|
224
|
+
JavaScript origin**, or the prompt/button silently no-shows.
|
|
225
|
+
|
|
226
|
+
`missingFieldsBehavior`: `profile-gate` authenticates immediately but forces profile completion
|
|
227
|
+
before gated content; `immediate`/`relaxed` grant access with fields left blank (`relaxed` is a
|
|
228
|
+
doc-only alias of `immediate`).
|
|
229
|
+
|
|
230
|
+
**Rendering.** The button + GIS init are rendered automatically inside the `form-login` and
|
|
231
|
+
`form-authenticate` templates — no per-site placement, and both self-hide when unconfigured. For
|
|
232
|
+
the **site-wide floating One-Tap prompt** (`autoPrompt: true`), also drop
|
|
233
|
+
`<marko-web-identity-x-google-init/>` once in your document layout, gated on an unauthenticated
|
|
234
|
+
user, e.g. `<if(!req.identityX.token)> <marko-web-identity-x-google-init/> </if>`. The button tag
|
|
235
|
+
(`<marko-web-identity-x-google-sign-in-button redirect-to=... />`) can also be placed in a content meter
|
|
236
|
+
or gate if desired.
|
|
237
|
+
|
|
238
|
+
**CSS.** Styles ship with the rest of the auth CSS in `marko-web-theme-monorail`
|
|
239
|
+
(`scss/components/_identity-x.scss`) — no separate import.
|
|
240
|
+
|
|
241
|
+
**Logout.** The idx logout route clears the GIS `g_state` cookie so a later sign-in with a
|
|
242
|
+
*different* Google account isn't blocked by stale auto-select state (harmless no-op when Google
|
|
243
|
+
Sign-In isn't used).
|
|
244
|
+
|
|
245
|
+
The Google account id (JWT `sub`) is persisted as a supplementary idx external id under
|
|
246
|
+
`{ provider: 'google', tenant: 'oauth', type: 'account' }`; email stays the primary key.
|
|
247
|
+
Non-fatal linkage errors report through the config's `onHookError`.
|
|
200
248
|
| `identity-x-comment-stream-errored` | `{ label, message: '...', ...additionalEventData }`
|
package/browser/access.vue
CHANGED
|
@@ -231,6 +231,10 @@ export default {
|
|
|
231
231
|
type: Object,
|
|
232
232
|
default: null,
|
|
233
233
|
},
|
|
234
|
+
contentEntity: {
|
|
235
|
+
type: String,
|
|
236
|
+
default: null,
|
|
237
|
+
},
|
|
234
238
|
customBooleanFieldAnswers: {
|
|
235
239
|
type: Array,
|
|
236
240
|
default: () => [],
|
|
@@ -351,7 +355,11 @@ export default {
|
|
|
351
355
|
this.isLoading = true;
|
|
352
356
|
this.didSubmit = false;
|
|
353
357
|
try {
|
|
354
|
-
const additionalEventData = {
|
|
358
|
+
const additionalEventData = {
|
|
359
|
+
...this.additionalEventData,
|
|
360
|
+
actionSource: this.loginSource,
|
|
361
|
+
...(this.contentEntity && { ent: this.contentEntity }),
|
|
362
|
+
};
|
|
355
363
|
let data = {};
|
|
356
364
|
if (this.canUpdateProfile) {
|
|
357
365
|
const res = await post('/profile', { ...this.user, additionalEventData });
|
|
@@ -421,7 +429,10 @@ export default {
|
|
|
421
429
|
contentId: content.id,
|
|
422
430
|
contentType: content.type,
|
|
423
431
|
userId: this.user.id,
|
|
424
|
-
additionalEventData
|
|
432
|
+
additionalEventData: {
|
|
433
|
+
...additionalEventData,
|
|
434
|
+
...(this.contentEntity && { ent: this.contentEntity }),
|
|
435
|
+
},
|
|
425
436
|
}, data.entity);
|
|
426
437
|
} catch (e) {
|
|
427
438
|
this.error = e;
|
|
@@ -57,6 +57,10 @@ export default {
|
|
|
57
57
|
type: String,
|
|
58
58
|
default: 'en',
|
|
59
59
|
},
|
|
60
|
+
contentEntity: {
|
|
61
|
+
type: String,
|
|
62
|
+
default: null,
|
|
63
|
+
},
|
|
60
64
|
},
|
|
61
65
|
|
|
62
66
|
/**
|
|
@@ -96,10 +100,14 @@ export default {
|
|
|
96
100
|
this.isLoading = true;
|
|
97
101
|
const { currentDisplayName, body, stream } = this;
|
|
98
102
|
try {
|
|
103
|
+
const additionalEventData = {
|
|
104
|
+
...(this.contentEntity && { ent: this.contentEntity }),
|
|
105
|
+
};
|
|
99
106
|
const res = await post('/comment', {
|
|
100
107
|
displayName: currentDisplayName,
|
|
101
108
|
body,
|
|
102
109
|
stream,
|
|
110
|
+
additionalEventData,
|
|
103
111
|
});
|
|
104
112
|
const data = await res.json();
|
|
105
113
|
if (!res.ok) throw new FormError(data.message, res.status);
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<create
|
|
21
21
|
v-else
|
|
22
22
|
:display-name="activeUser.displayName"
|
|
23
|
-
:stream="{ identifier, title, description, url }"
|
|
23
|
+
:stream="{ identifier, type, title, description, url }"
|
|
24
24
|
@comment-post-submitted="load"
|
|
25
25
|
:lang="lang"
|
|
26
26
|
/>
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
</p>
|
|
35
35
|
<login
|
|
36
36
|
:class="element('login-form')"
|
|
37
|
-
:additional-event-data="
|
|
37
|
+
:additional-event-data="enrichedAdditionalEventData"
|
|
38
38
|
:source="loginSource"
|
|
39
39
|
:endpoints="endpoints"
|
|
40
40
|
:custom-select-field-answers="loginCustomSelectFieldAnswers"
|
|
@@ -133,6 +133,10 @@ export default {
|
|
|
133
133
|
type: String,
|
|
134
134
|
required: true,
|
|
135
135
|
},
|
|
136
|
+
type: {
|
|
137
|
+
type: String,
|
|
138
|
+
default: undefined,
|
|
139
|
+
},
|
|
136
140
|
title: {
|
|
137
141
|
type: String,
|
|
138
142
|
default: undefined,
|
|
@@ -241,6 +245,10 @@ export default {
|
|
|
241
245
|
type: String,
|
|
242
246
|
default: 'en',
|
|
243
247
|
},
|
|
248
|
+
contentEntity: {
|
|
249
|
+
type: String,
|
|
250
|
+
default: null,
|
|
251
|
+
},
|
|
244
252
|
},
|
|
245
253
|
|
|
246
254
|
data: () => ({
|
|
@@ -280,6 +288,16 @@ export default {
|
|
|
280
288
|
approvedComments() {
|
|
281
289
|
return this.comments.filter((comment) => comment.approved);
|
|
282
290
|
},
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
*
|
|
294
|
+
*/
|
|
295
|
+
enrichedAdditionalEventData() {
|
|
296
|
+
return {
|
|
297
|
+
...(this.additionalEventData || {}),
|
|
298
|
+
...(this.contentEntity && { ent: this.contentEntity }),
|
|
299
|
+
};
|
|
300
|
+
},
|
|
283
301
|
},
|
|
284
302
|
|
|
285
303
|
/**
|
package/browser/download.vue
CHANGED
|
@@ -238,6 +238,10 @@ export default {
|
|
|
238
238
|
type: Object,
|
|
239
239
|
default: null,
|
|
240
240
|
},
|
|
241
|
+
contentEntity: {
|
|
242
|
+
type: String,
|
|
243
|
+
default: null,
|
|
244
|
+
},
|
|
241
245
|
customBooleanFieldAnswers: {
|
|
242
246
|
type: Array,
|
|
243
247
|
default: () => [],
|
|
@@ -354,7 +358,11 @@ export default {
|
|
|
354
358
|
this.isLoading = true;
|
|
355
359
|
this.didSubmit = false;
|
|
356
360
|
try {
|
|
357
|
-
const additionalEventData = {
|
|
361
|
+
const additionalEventData = {
|
|
362
|
+
...this.additionalEventData,
|
|
363
|
+
actionSource: this.loginSource,
|
|
364
|
+
...(this.contentEntity && { ent: this.contentEntity }),
|
|
365
|
+
};
|
|
358
366
|
let data = {};
|
|
359
367
|
if (this.canUpdateProfile) {
|
|
360
368
|
const res = await post('/profile', { ...this.user, additionalEventData });
|
|
@@ -422,7 +430,10 @@ export default {
|
|
|
422
430
|
contentType: content.type,
|
|
423
431
|
companyId: company.id,
|
|
424
432
|
userId: this.user.id,
|
|
425
|
-
additionalEventData
|
|
433
|
+
additionalEventData: {
|
|
434
|
+
...additionalEventData,
|
|
435
|
+
...(this.contentEntity && { ent: this.contentEntity }),
|
|
436
|
+
},
|
|
426
437
|
}, entity);
|
|
427
438
|
this.downloaded.push(content.id);
|
|
428
439
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/access.marko",
|
|
6
6
|
marko_component = require("./access.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -53,7 +53,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
53
53
|
}, marko_component);
|
|
54
54
|
|
|
55
55
|
marko_template.meta = {
|
|
56
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
56
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/access.marko",
|
|
57
57
|
component: "./access.marko",
|
|
58
58
|
tags: [
|
|
59
59
|
"@mindful-web/marko-core/components/resolve.marko"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/comment-stream.marko",
|
|
6
6
|
marko_component = require("./comment-stream.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -85,7 +85,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
85
85
|
}, marko_component);
|
|
86
86
|
|
|
87
87
|
marko_template.meta = {
|
|
88
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
88
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/comment-stream.marko",
|
|
89
89
|
component: "./comment-stream.marko",
|
|
90
90
|
tags: [
|
|
91
91
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/context.marko",
|
|
6
6
|
marko_component = require("./context.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
marko_dynamicTag = require("marko/dist/runtime/helpers/dynamic-tag"),
|
|
@@ -49,7 +49,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
49
49
|
}, marko_component);
|
|
50
50
|
|
|
51
51
|
marko_template.meta = {
|
|
52
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
52
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/context.marko",
|
|
53
53
|
component: "./context.marko",
|
|
54
54
|
tags: [
|
|
55
55
|
"@mindful-web/marko-core/components/resolve.marko"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import defaultValue from "@mindful-web/marko-core/utils/default-value";
|
|
3
3
|
import { get, getAsArray, getAsObject } from "@mindful-web/object-path";
|
|
4
|
+
import baseContentEntity from "@mindful-web/marko-web-p1-events/utils/base-content-entity";
|
|
4
5
|
|
|
5
6
|
import getCreateUserCustomFields from '../utils/get-create-user-custom-fields'
|
|
6
7
|
import getFormCustomFields from '../utils/get-form-custom-fields'
|
|
@@ -53,9 +54,12 @@ $ const loginButtonLabels = defaultValue(input.loginButtonLabels, {
|
|
|
53
54
|
siteContext: content.siteContext,
|
|
54
55
|
});
|
|
55
56
|
|
|
57
|
+
$ const contentEntity = (content && content.id && content.type) ? baseContentEntity(content.id, content.type) : null;
|
|
58
|
+
|
|
56
59
|
$ const props = {
|
|
57
60
|
// Access form props
|
|
58
61
|
content: formAccessContent(content),
|
|
62
|
+
contentEntity: contentEntity,
|
|
59
63
|
title: form.title,
|
|
60
64
|
fieldRows: form.fieldRows,
|
|
61
65
|
loginSource: "contentAccess",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/form-access.marko",
|
|
6
6
|
marko_component = require("./form-access.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_defaultValue = require("@mindful-web/marko-core/utils/default-value"),
|
|
@@ -12,6 +12,8 @@ var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
|
12
12
|
get = module_objectPath_module.get,
|
|
13
13
|
getAsArray = module_objectPath_module.getAsArray,
|
|
14
14
|
getAsObject = module_objectPath_module.getAsObject,
|
|
15
|
+
module_baseContentEntity = require("@mindful-web/marko-web-p1-events/utils/base-content-entity"),
|
|
16
|
+
baseContentEntity = module_baseContentEntity.default || module_baseContentEntity,
|
|
15
17
|
module_getCreateUserCustomFields = require("../utils/get-create-user-custom-fields"),
|
|
16
18
|
getCreateUserCustomFields = module_getCreateUserCustomFields.default || module_getCreateUserCustomFields,
|
|
17
19
|
module_getFormCustomFields = require("../utils/get-form-custom-fields"),
|
|
@@ -93,9 +95,12 @@ function render(input, out, __component, component, state) {
|
|
|
93
95
|
siteContext: content.siteContext,
|
|
94
96
|
});
|
|
95
97
|
|
|
98
|
+
const contentEntity = (content && content.id && content.type) ? baseContentEntity(content.id, content.type) : null;
|
|
99
|
+
|
|
96
100
|
const props = {
|
|
97
101
|
// Access form props
|
|
98
102
|
content: formAccessContent(content),
|
|
103
|
+
contentEntity: contentEntity,
|
|
99
104
|
title: form.title,
|
|
100
105
|
fieldRows: form.fieldRows,
|
|
101
106
|
loginSource: "contentAccess",
|
|
@@ -174,7 +179,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
174
179
|
}, marko_component);
|
|
175
180
|
|
|
176
181
|
marko_template.meta = {
|
|
177
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
182
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/form-access.marko",
|
|
178
183
|
component: "./form-access.marko",
|
|
179
184
|
tags: [
|
|
180
185
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -32,5 +32,7 @@ $ const lang = input.lang || defaultValue(site.config.lang, "en");
|
|
|
32
32
|
lang
|
|
33
33
|
};
|
|
34
34
|
<marko-web-browser-component name="IdentityXAuthenticate" props=props />
|
|
35
|
+
<marko-web-identity-x-google-init/>
|
|
36
|
+
<marko-web-identity-x-google-sign-in-button redirect-to=query.redirectTo/>
|
|
35
37
|
</marko-web-identity-x-context>
|
|
36
38
|
</if>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/form-authenticate.marko",
|
|
6
6
|
marko_component = require("./form-authenticate.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -13,6 +13,10 @@ var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
|
13
13
|
marko_web_browser_component_template = require("@mindful-web/marko-web/components/browser-component.marko"),
|
|
14
14
|
marko_loadTag = require("marko/dist/runtime/helpers/load-tag"),
|
|
15
15
|
marko_web_browser_component_tag = marko_loadTag(marko_web_browser_component_template),
|
|
16
|
+
marko_web_identity_x_google_init_template = require("./google-init.marko"),
|
|
17
|
+
marko_web_identity_x_google_init_tag = marko_loadTag(marko_web_identity_x_google_init_template),
|
|
18
|
+
marko_web_identity_x_google_sign_in_button_template = require("./google-sign-in-button.marko"),
|
|
19
|
+
marko_web_identity_x_google_sign_in_button_tag = marko_loadTag(marko_web_identity_x_google_sign_in_button_template),
|
|
16
20
|
marko_web_identity_x_context_template = require("./context.marko"),
|
|
17
21
|
marko_web_identity_x_context_tag = marko_loadTag(marko_web_identity_x_context_template);
|
|
18
22
|
|
|
@@ -61,6 +65,12 @@ function render(input, out, __component, component, state) {
|
|
|
61
65
|
name: "IdentityXAuthenticate",
|
|
62
66
|
props: props
|
|
63
67
|
}, out, __component, "1");
|
|
68
|
+
|
|
69
|
+
marko_web_identity_x_google_init_tag({}, out, __component, "2");
|
|
70
|
+
|
|
71
|
+
marko_web_identity_x_google_sign_in_button_tag({
|
|
72
|
+
redirectTo: query.redirectTo
|
|
73
|
+
}, out, __component, "3");
|
|
64
74
|
}
|
|
65
75
|
}, out, __component, "0");
|
|
66
76
|
}
|
|
@@ -71,10 +81,12 @@ marko_template._ = marko_renderer(render, {
|
|
|
71
81
|
}, marko_component);
|
|
72
82
|
|
|
73
83
|
marko_template.meta = {
|
|
74
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
84
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/form-authenticate.marko",
|
|
75
85
|
component: "./form-authenticate.marko",
|
|
76
86
|
tags: [
|
|
77
87
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
88
|
+
"./google-init.marko",
|
|
89
|
+
"./google-sign-in-button.marko",
|
|
78
90
|
"./context.marko"
|
|
79
91
|
]
|
|
80
92
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/form-change-email.marko",
|
|
6
6
|
marko_component = require("./form-change-email.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -59,7 +59,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
59
59
|
}, marko_component);
|
|
60
60
|
|
|
61
61
|
marko_template.meta = {
|
|
62
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
62
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/form-change-email.marko",
|
|
63
63
|
component: "./form-change-email.marko",
|
|
64
64
|
tags: [
|
|
65
65
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -40,6 +40,8 @@ $ const withFields = defaultValue(input.withFields, false);
|
|
|
40
40
|
};
|
|
41
41
|
<if(isEnabled)>
|
|
42
42
|
<marko-web-browser-component name="IdentityXLogin" props=props />
|
|
43
|
+
<marko-web-identity-x-google-init/>
|
|
44
|
+
<marko-web-identity-x-google-sign-in-button redirect-to=input.redirect/>
|
|
43
45
|
</if>
|
|
44
46
|
</marko-web-identity-x-context>
|
|
45
47
|
</if>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/form-login.marko",
|
|
6
6
|
marko_component = require("./form-login.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -15,6 +15,10 @@ var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
|
15
15
|
marko_web_browser_component_template = require("@mindful-web/marko-web/components/browser-component.marko"),
|
|
16
16
|
marko_loadTag = require("marko/dist/runtime/helpers/load-tag"),
|
|
17
17
|
marko_web_browser_component_tag = marko_loadTag(marko_web_browser_component_template),
|
|
18
|
+
marko_web_identity_x_google_init_template = require("./google-init.marko"),
|
|
19
|
+
marko_web_identity_x_google_init_tag = marko_loadTag(marko_web_identity_x_google_init_template),
|
|
20
|
+
marko_web_identity_x_google_sign_in_button_template = require("./google-sign-in-button.marko"),
|
|
21
|
+
marko_web_identity_x_google_sign_in_button_tag = marko_loadTag(marko_web_identity_x_google_sign_in_button_template),
|
|
18
22
|
marko_web_identity_x_context_template = require("./context.marko"),
|
|
19
23
|
marko_web_identity_x_context_tag = marko_loadTag(marko_web_identity_x_context_template);
|
|
20
24
|
|
|
@@ -71,6 +75,12 @@ function render(input, out, __component, component, state) {
|
|
|
71
75
|
name: "IdentityXLogin",
|
|
72
76
|
props: props
|
|
73
77
|
}, out, __component, "1");
|
|
78
|
+
|
|
79
|
+
marko_web_identity_x_google_init_tag({}, out, __component, "2");
|
|
80
|
+
|
|
81
|
+
marko_web_identity_x_google_sign_in_button_tag({
|
|
82
|
+
redirectTo: input.redirect
|
|
83
|
+
}, out, __component, "3");
|
|
74
84
|
}
|
|
75
85
|
}
|
|
76
86
|
}, out, __component, "0");
|
|
@@ -82,10 +92,12 @@ marko_template._ = marko_renderer(render, {
|
|
|
82
92
|
}, marko_component);
|
|
83
93
|
|
|
84
94
|
marko_template.meta = {
|
|
85
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
95
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/form-login.marko",
|
|
86
96
|
component: "./form-login.marko",
|
|
87
97
|
tags: [
|
|
88
98
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
99
|
+
"./google-init.marko",
|
|
100
|
+
"./google-sign-in-button.marko",
|
|
89
101
|
"./context.marko"
|
|
90
102
|
]
|
|
91
103
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/form-logout.marko",
|
|
6
6
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
7
7
|
module_defaultValue = require("@mindful-web/marko-core/utils/default-value"),
|
|
8
8
|
defaultValue = module_defaultValue.default || module_defaultValue,
|
|
@@ -29,7 +29,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
marko_template.meta = {
|
|
32
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
32
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/form-logout.marko",
|
|
33
33
|
tags: [
|
|
34
34
|
"@mindful-web/marko-web/components/browser-component.marko"
|
|
35
35
|
]
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/form-profile.marko",
|
|
6
6
|
marko_component = require("./form-profile.marko"),
|
|
7
7
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
8
8
|
module_objectPath_module = require("@mindful-web/object-path"),
|
|
@@ -84,7 +84,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
84
84
|
}, marko_component);
|
|
85
85
|
|
|
86
86
|
marko_template.meta = {
|
|
87
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
87
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/form-profile.marko",
|
|
88
88
|
component: "./form-profile.marko",
|
|
89
89
|
tags: [
|
|
90
90
|
"@mindful-web/marko-web/components/browser-component.marko",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
|
|
4
4
|
var marko_template = module.exports = require("marko/dist/html").t(__filename),
|
|
5
|
-
marko_componentType = "/@mindful-web/marko-web-identity-x$1.
|
|
5
|
+
marko_componentType = "/@mindful-web/marko-web-identity-x$1.78.0/components/form-register.marko",
|
|
6
6
|
marko_renderer = require("marko/dist/runtime/components/renderer"),
|
|
7
7
|
marko_assign = require("marko/dist/runtime/helpers/assign"),
|
|
8
8
|
marko_web_identity_x_form_login_template = require("./form-login.marko"),
|
|
@@ -25,7 +25,7 @@ marko_template._ = marko_renderer(render, {
|
|
|
25
25
|
});
|
|
26
26
|
|
|
27
27
|
marko_template.meta = {
|
|
28
|
-
id: "/@mindful-web/marko-web-identity-x$1.
|
|
28
|
+
id: "/@mindful-web/marko-web-identity-x$1.78.0/components/form-register.marko",
|
|
29
29
|
tags: [
|
|
30
30
|
"./form-login.marko"
|
|
31
31
|
]
|