@atlasauth/embed 0.12.0 → 0.14.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/dist/index.d.ts CHANGED
@@ -14,6 +14,9 @@ export { AtlasWidget, type WidgetOptions } from './widget';
14
14
  export type { PasskeyPrfEventDetail } from './widget/passkey';
15
15
  export { defineElements, AtlasSignInElement, AtlasSignUpElement } from './element';
16
16
  export { mountSignIn, mountSignUp, type MountTarget } from './mount';
17
+ export { mountLeadForm, type LeadFormOptions } from './lead-form';
18
+ export { mountPricingTable, type PricingTableOptions } from './pricing';
19
+ export { mountOrganizationAdmin, type OrgAdminOptions, type OrgAdminSection } from './org-admin';
17
20
  export { setScriptDefaults, readScriptTag, type ScriptDefaults } from './config';
18
21
  export { validateRedirect } from './redirect';
19
22
  export { resolveTokens, cssVariables, orderedProviders, providerLabel, classFor, resolveSocialButtons, type DesignTokens, type ElementKey, type WidgetAppearance, type WidgetVariables, type PublicAppearance, type PublicStrategies, type AppearanceResponse, type EmailDeliveryAvailability, type SocialButtonsConfig, type SocialButtonVariant, type SocialButtonSize, type SocialButtonLayout, type ResolvedSocialButtons, } from './appearance';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ATLAS_EMBED_VERSION = exports.ATLAS_EMBED_SDK = exports.widgetDesign = exports.providerIcon = exports.resolveSocialButtons = exports.classFor = exports.providerLabel = exports.orderedProviders = exports.cssVariables = exports.resolveTokens = exports.validateRedirect = exports.readScriptTag = exports.setScriptDefaults = exports.mountSignUp = exports.mountSignIn = exports.AtlasSignUpElement = exports.AtlasSignInElement = exports.defineElements = exports.AtlasWidget = void 0;
3
+ exports.ATLAS_EMBED_VERSION = exports.ATLAS_EMBED_SDK = exports.widgetDesign = exports.providerIcon = exports.resolveSocialButtons = exports.classFor = exports.providerLabel = exports.orderedProviders = exports.cssVariables = exports.resolveTokens = exports.validateRedirect = exports.readScriptTag = exports.setScriptDefaults = exports.mountOrganizationAdmin = exports.mountPricingTable = exports.mountLeadForm = exports.mountSignUp = exports.mountSignIn = exports.AtlasSignUpElement = exports.AtlasSignInElement = exports.defineElements = exports.AtlasWidget = void 0;
4
4
  /**
5
5
  * `@atlasauth/embed` — the universal, framework-agnostic sign-in widget.
6
6
  *
@@ -22,6 +22,12 @@ Object.defineProperty(exports, "AtlasSignUpElement", { enumerable: true, get: fu
22
22
  var mount_1 = require("./mount");
23
23
  Object.defineProperty(exports, "mountSignIn", { enumerable: true, get: function () { return mount_1.mountSignIn; } });
24
24
  Object.defineProperty(exports, "mountSignUp", { enumerable: true, get: function () { return mount_1.mountSignUp; } });
25
+ var lead_form_1 = require("./lead-form");
26
+ Object.defineProperty(exports, "mountLeadForm", { enumerable: true, get: function () { return lead_form_1.mountLeadForm; } });
27
+ var pricing_1 = require("./pricing");
28
+ Object.defineProperty(exports, "mountPricingTable", { enumerable: true, get: function () { return pricing_1.mountPricingTable; } });
29
+ var org_admin_1 = require("./org-admin");
30
+ Object.defineProperty(exports, "mountOrganizationAdmin", { enumerable: true, get: function () { return org_admin_1.mountOrganizationAdmin; } });
25
31
  var config_1 = require("./config");
26
32
  Object.defineProperty(exports, "setScriptDefaults", { enumerable: true, get: function () { return config_1.setScriptDefaults; } });
27
33
  Object.defineProperty(exports, "readScriptTag", { enumerable: true, get: function () { return config_1.readScriptTag; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,mCAA2D;AAAlD,qGAAA,WAAW,OAAA;AAEpB,qCAAmF;AAA1E,yGAAA,cAAc,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAC/D,iCAAqE;AAA5D,oGAAA,WAAW,OAAA;AAAE,oGAAA,WAAW,OAAA;AACjC,mCAAiF;AAAxE,2GAAA,iBAAiB,OAAA;AAAE,uGAAA,aAAa,OAAA;AACzC,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA;AACzB,2CAoBsB;AAnBpB,2GAAA,aAAa,OAAA;AACb,0GAAA,YAAY,OAAA;AACZ,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AACb,sGAAA,QAAQ,OAAA;AACR,kHAAA,oBAAoB,OAAA;AAetB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,mCAA2D;AAAlD,sGAAA,YAAY,OAAA;AAErB,qCAAiE;AAAxD,0GAAA,eAAe,OAAA;AAAE,8GAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;GAWG;AACH,mCAA2D;AAAlD,qGAAA,WAAW,OAAA;AAEpB,qCAAmF;AAA1E,yGAAA,cAAc,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAC/D,iCAAqE;AAA5D,oGAAA,WAAW,OAAA;AAAE,oGAAA,WAAW,OAAA;AACjC,yCAAkE;AAAzD,0GAAA,aAAa,OAAA;AACtB,qCAAwE;AAA/D,4GAAA,iBAAiB,OAAA;AAC1B,yCAAiG;AAAxF,mHAAA,sBAAsB,OAAA;AAC/B,mCAAiF;AAAxE,2GAAA,iBAAiB,OAAA;AAAE,uGAAA,aAAa,OAAA;AACzC,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA;AACzB,2CAoBsB;AAnBpB,2GAAA,aAAa,OAAA;AACb,0GAAA,YAAY,OAAA;AACZ,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AACb,sGAAA,QAAQ,OAAA;AACR,kHAAA,oBAAoB,OAAA;AAetB,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,mCAA2D;AAAlD,sGAAA,YAAY,OAAA;AAErB,qCAAiE;AAAxD,0GAAA,eAAe,OAAA;AAAE,8GAAA,mBAAmB,OAAA"}
@@ -0,0 +1,30 @@
1
+ import type { MountTarget } from './mount';
2
+ export interface LeadFormOptions {
3
+ publishableKey?: string;
4
+ frontendApi?: string;
5
+ /** Which form this is (default `default`); one row per email per form. */
6
+ form?: string;
7
+ showName?: boolean;
8
+ /** Show the consent checkbox and require it. */
9
+ requireConsent?: boolean;
10
+ labels?: Partial<{
11
+ email: string;
12
+ name: string;
13
+ submit: string;
14
+ consent: string;
15
+ thanks: string;
16
+ invalid: string;
17
+ failed: string;
18
+ }>;
19
+ locale?: string;
20
+ fetchImpl?: typeof fetch;
21
+ onSubmitted?: (email: string) => void;
22
+ }
23
+ /**
24
+ * Mount a lead / newsletter signup into an element. Stores the address with the
25
+ * campaign attribution captured on the page (when the instance captures it and the
26
+ * visitor consented) and starts that capture itself, so one script tag is enough.
27
+ */
28
+ export declare function mountLeadForm(target: MountTarget, options?: LeadFormOptions): {
29
+ destroy(): void;
30
+ } | null;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mountLeadForm = mountLeadForm;
4
+ const js_1 = require("@atlasauth/js");
5
+ const client_1 = require("./client");
6
+ const config_1 = require("./config");
7
+ const h = (tag, props = {}, ...kids) => {
8
+ const node = document.createElement(tag);
9
+ for (const [k, v] of Object.entries(props))
10
+ node.setAttribute(k, v);
11
+ for (const kid of kids)
12
+ if (kid !== null)
13
+ node.append(kid);
14
+ return node;
15
+ };
16
+ /**
17
+ * Mount a lead / newsletter signup into an element. Stores the address with the
18
+ * campaign attribution captured on the page (when the instance captures it and the
19
+ * visitor consented) and starts that capture itself, so one script tag is enough.
20
+ */
21
+ function mountLeadForm(target, options = {}) {
22
+ const host = typeof target === 'string' ? document.querySelector(target) : target;
23
+ const defaults = (0, config_1.getScriptDefaults)();
24
+ const publishableKey = options.publishableKey ?? defaults.publishableKey;
25
+ const frontendApi = options.frontendApi ?? defaults.frontendApi;
26
+ if (!host)
27
+ return null;
28
+ if (!publishableKey || !frontendApi) {
29
+ host.textContent = 'Atlas: a publishable key and a frontend API origin are required.';
30
+ return null;
31
+ }
32
+ const client = (0, client_1.createClient)({ publishableKey, frontendApi, locale: options.locale ?? defaults.locale, fetchImpl: options.fetchImpl });
33
+ void (0, js_1.captureMarketing)(client).catch(() => undefined);
34
+ const L = {
35
+ email: 'Email address', name: 'Name', submit: 'Subscribe', consent: 'I agree to receive emails',
36
+ thanks: 'Thanks — you are on the list.', invalid: 'Enter a valid email address.', failed: 'Could not subscribe. Try again.',
37
+ ...options.labels,
38
+ };
39
+ const form = h('form', { class: 'atlas-card', 'data-atlas': 'lead-form', novalidate: 'true' });
40
+ const field = (label, name, type, autocomplete) => {
41
+ const input = h('input', { class: 'atlas-input', type, name, autocomplete });
42
+ return [h('label', { class: 'atlas-field' }, h('span', { class: 'atlas-field-label' }, label), input), input];
43
+ };
44
+ const [nameLabel, nameInput] = field(L.name, 'name', 'text', 'name');
45
+ const [emailLabel, emailInput] = field(L.email, 'email', 'email', 'email');
46
+ const consent = h('input', { type: 'checkbox' });
47
+ const honeypot = h('input', { name: 'website', 'aria-hidden': 'true', tabindex: '-1', autocomplete: 'off', style: 'position:absolute;left:-10000px;width:1px;height:1px;opacity:0' });
48
+ const error = h('p', { class: 'atlas-error', role: 'alert' });
49
+ error.hidden = true;
50
+ const button = h('button', { class: 'atlas-button', type: 'submit' }, L.submit);
51
+ if (options.showName)
52
+ form.append(nameLabel);
53
+ form.append(emailLabel);
54
+ if (options.requireConsent) {
55
+ button.disabled = true;
56
+ consent.addEventListener('change', () => {
57
+ button.disabled = !consent.checked;
58
+ });
59
+ form.append(h('label', { class: 'atlas-field' }, consent, ` ${L.consent}`));
60
+ }
61
+ form.append(honeypot, error, button);
62
+ form.addEventListener('submit', async (event) => {
63
+ event.preventDefault();
64
+ const email = emailInput.value.trim();
65
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
66
+ error.textContent = L.invalid;
67
+ error.hidden = false;
68
+ return;
69
+ }
70
+ button.disabled = true;
71
+ error.hidden = true;
72
+ const out = await (0, js_1.submitLead)(client, { email, name: nameInput.value.trim() || undefined, form: options.form, consent: consent.checked, website: honeypot.value });
73
+ if (out.ok) {
74
+ host.replaceChildren(h('div', { class: 'atlas-card', 'data-atlas': 'lead-form', role: 'status' }, L.thanks));
75
+ options.onSubmitted?.(email);
76
+ }
77
+ else {
78
+ button.disabled = options.requireConsent ? !consent.checked : false;
79
+ error.textContent = out.error ?? L.failed;
80
+ error.hidden = false;
81
+ }
82
+ });
83
+ host.replaceChildren(form);
84
+ return { destroy: () => host.replaceChildren() };
85
+ }
86
+ //# sourceMappingURL=lead-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lead-form.js","sourceRoot":"","sources":["../src/lead-form.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { MountTarget } from './mount';
2
+ /** The tenant-admin sections the embed can mount for an organization. */
3
+ export type OrgAdminSection = 'sso' | 'directory' | 'domains' | 'logStreams' | 'apiKeys' | 'ipAllowlist' | 'webhooks';
4
+ export interface OrgAdminOptions {
5
+ section: OrgAdminSection;
6
+ /** The organization to manage; the signed-in user must be an admin of it (the active one). */
7
+ organizationId: string;
8
+ publishableKey?: string;
9
+ frontendApi?: string;
10
+ locale?: string;
11
+ fetchImpl?: typeof fetch;
12
+ }
13
+ /**
14
+ * Mount one tenant-admin section (SSO, directory sync, domains, log streams, API
15
+ * keys, sign-in IP allowlist or webhooks) into an element. Plain DOM, no
16
+ * framework: it re-renders itself after every change, shows a secret the server
17
+ * returns once exactly once, and renders nothing for a caller the server refuses
18
+ * (not an admin, or not the active organization).
19
+ */
20
+ export declare function mountOrganizationAdmin(target: MountTarget, options: OrgAdminOptions): {
21
+ destroy(): void;
22
+ } | null;
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mountOrganizationAdmin = mountOrganizationAdmin;
4
+ const js_1 = require("@atlasauth/js");
5
+ const client_1 = require("./client");
6
+ const config_1 = require("./config");
7
+ const h = (tag, props = {}, ...kids) => {
8
+ const node = document.createElement(tag);
9
+ for (const [k, v] of Object.entries(props))
10
+ node.setAttribute(k, v);
11
+ for (const kid of kids)
12
+ if (kid !== null)
13
+ node.append(kid);
14
+ return node;
15
+ };
16
+ /** A column of plain-text rows with a trailing action button per row. */
17
+ function rows(items, action, run) {
18
+ const list = h('ul', { class: 'atlas-list' });
19
+ for (const item of items) {
20
+ const li = h('li', { 'data-id': item.id }, item.text);
21
+ const btn = h('button', { type: 'button', class: 'atlas-button-secondary' }, action);
22
+ btn.addEventListener('click', () => void run(item.id));
23
+ li.append(' ', btn);
24
+ list.append(li);
25
+ }
26
+ return list;
27
+ }
28
+ /**
29
+ * Mount one tenant-admin section (SSO, directory sync, domains, log streams, API
30
+ * keys, sign-in IP allowlist or webhooks) into an element. Plain DOM, no
31
+ * framework: it re-renders itself after every change, shows a secret the server
32
+ * returns once exactly once, and renders nothing for a caller the server refuses
33
+ * (not an admin, or not the active organization).
34
+ */
35
+ function mountOrganizationAdmin(target, options) {
36
+ const host = typeof target === 'string' ? document.querySelector(target) : target;
37
+ const defaults = (0, config_1.getScriptDefaults)();
38
+ const publishableKey = options.publishableKey ?? defaults.publishableKey;
39
+ const frontendApi = options.frontendApi ?? defaults.frontendApi;
40
+ if (!host)
41
+ return null;
42
+ if (!publishableKey || !frontendApi) {
43
+ host.textContent = 'Atlas: a publishable key and a frontend API origin are required.';
44
+ return null;
45
+ }
46
+ const client = (0, client_1.createClient)({ publishableKey, frontendApi, locale: options.locale ?? defaults.locale, fetchImpl: options.fetchImpl });
47
+ const org = options.organizationId;
48
+ let secret = null;
49
+ let message = null;
50
+ let alive = true;
51
+ const guarded = async (fn) => {
52
+ try {
53
+ await fn();
54
+ message = null;
55
+ }
56
+ catch (err) {
57
+ message = err instanceof Error ? err.message : 'The request failed.';
58
+ }
59
+ await render();
60
+ };
61
+ const withSecret = (fn) => guarded(async () => {
62
+ const out = await fn();
63
+ secret = out.secret ?? out.token ?? null;
64
+ });
65
+ const input = (label, type = 'text', placeholder = '') => {
66
+ const field = h('input', { type, placeholder, 'aria-label': label });
67
+ return [h('label', { class: 'atlas-field' }, h('span', {}, label), field), field];
68
+ };
69
+ const button = (label, run, primary = true) => {
70
+ const b = h('button', { type: 'button', class: primary ? 'atlas-button' : 'atlas-button-secondary' }, label);
71
+ b.addEventListener('click', run);
72
+ return b;
73
+ };
74
+ async function body() {
75
+ switch (options.section) {
76
+ case 'domains': {
77
+ const list = await js_1.organizationAdmin.listDomains(client, org);
78
+ const [label, field] = input('Email domain', 'text', 'acme.com');
79
+ return [
80
+ rows(list.map((d) => ({ id: d.id, text: `${d.domain} — ${d.status}${d.status === 'verified' ? '' : ` (TXT ${d.verification.record_name} = ${d.verification.record_value})`}` })), 'Remove', (id) => guarded(() => js_1.organizationAdmin.removeDomain(client, org, id))),
81
+ ...list.filter((d) => d.status !== 'verified').map((d) => button(`Verify ${d.domain}`, () => void guarded(() => js_1.organizationAdmin.verifyDomain(client, org, d.id)), false)),
82
+ label,
83
+ button('Add domain', () => void guarded(() => js_1.organizationAdmin.addDomain(client, org, field.value.trim()))),
84
+ ];
85
+ }
86
+ case 'logStreams': {
87
+ const list = await js_1.organizationAdmin.listLogStreams(client, org);
88
+ const [label, field] = input('HTTPS endpoint', 'url', 'https://siem.example.com/ingest');
89
+ return [
90
+ rows(list.map((s) => ({ id: s.id, text: s.url })), 'Remove', (id) => guarded(() => js_1.organizationAdmin.removeLogStream(client, org, id))),
91
+ label,
92
+ button('Add destination', () => void withSecret(() => js_1.organizationAdmin.addLogStream(client, org, { url: field.value.trim() }))),
93
+ ];
94
+ }
95
+ case 'apiKeys': {
96
+ const list = await js_1.organizationAdmin.listApiKeys(client, org);
97
+ const [label, field] = input('Key name');
98
+ return [
99
+ rows(list.map((k) => ({ id: k.id, text: `${k.name ?? k.prefix} (${k.prefix})` })), 'Revoke', (id) => guarded(() => js_1.organizationAdmin.revokeApiKey(client, org, id))),
100
+ label,
101
+ button('Create key', () => void withSecret(() => js_1.organizationAdmin.createApiKey(client, org, { name: field.value.trim() || undefined }))),
102
+ ];
103
+ }
104
+ case 'webhooks': {
105
+ const list = await js_1.organizationAdmin.listWebhooks(client, org);
106
+ const [label, field] = input('HTTPS endpoint', 'url', 'https://example.com/hooks/atlas');
107
+ return [
108
+ rows(list.map((w) => ({ id: w.id, text: `${w.url} — ${w.health}` })), 'Remove', (id) => guarded(() => js_1.organizationAdmin.deleteWebhook(client, org, id))),
109
+ label,
110
+ button('Add endpoint', () => void withSecret(() => js_1.organizationAdmin.createWebhook(client, org, { url: field.value.trim() }))),
111
+ ];
112
+ }
113
+ case 'directory': {
114
+ const dir = await js_1.organizationAdmin.getDirectory(client, org);
115
+ return [
116
+ h('p', {}, `SCIM base URL: ${dir.base_url}`),
117
+ rows(dir.tokens.map((t) => ({ id: t.id, text: t.prefix })), 'Revoke', (id) => guarded(() => js_1.organizationAdmin.revokeDirectoryToken(client, org, id))),
118
+ button('Generate token', () => void withSecret(() => js_1.organizationAdmin.createDirectoryToken(client, org))),
119
+ ];
120
+ }
121
+ case 'ipAllowlist': {
122
+ const list = await js_1.organizationAdmin.getIpAllowlist(client, org);
123
+ const area = h('textarea', { rows: '5', 'aria-label': 'Sign-in IP allowlist' });
124
+ area.value = list.entries.join('\n');
125
+ return [
126
+ h('p', {}, `One IP or CIDR per line; empty allows anywhere. Your IP: ${list.your_ip}`),
127
+ area,
128
+ button('Save', () => void guarded(() => js_1.organizationAdmin.setIpAllowlist(client, org, area.value.split(/[\s,]+/).filter(Boolean)))),
129
+ ];
130
+ }
131
+ case 'sso': {
132
+ const view = await js_1.organizationAdmin.getSso(client, org);
133
+ const type = view.connection?.type ?? 'oidc';
134
+ const fields = type === 'oidc'
135
+ ? [['oidc_issuer', 'Issuer URL', 'text'], ['oidc_client_id', 'Client ID', 'text'], ['oidc_client_secret', 'Client secret', 'password']]
136
+ : [['saml_metadata_xml', 'IdP metadata XML', 'text'], ['saml_idp_certificate', 'IdP certificate (PEM)', 'text']];
137
+ const inputs = fields.map(([key, label, kind]) => {
138
+ const [l, f] = input(label, kind);
139
+ return { key, l, f };
140
+ });
141
+ return [
142
+ h('p', {}, view.connection ? `${view.connection.type.toUpperCase()} — ${view.connection.status}` : 'No connection yet.'),
143
+ h('p', {}, `ACS URL: ${view.sp.acs_url} · Redirect URI: ${view.sp.oidc_redirect_uri}`),
144
+ ...inputs.map((i) => i.l),
145
+ button('Save connection', () => {
146
+ const payload = {};
147
+ for (const i of inputs)
148
+ if (i.f.value)
149
+ payload[i.key] = i.f.value;
150
+ void guarded(() => js_1.organizationAdmin.saveSso(client, org, { type, ...payload }));
151
+ }),
152
+ ];
153
+ }
154
+ }
155
+ }
156
+ async function render() {
157
+ if (!alive)
158
+ return;
159
+ let children;
160
+ try {
161
+ children = await body();
162
+ }
163
+ catch (err) {
164
+ // 403/404 → the server says this caller may not manage the organization: show nothing.
165
+ const status = err.status;
166
+ host.replaceChildren(...(status === 403 || status === 404 ? [] : [h('p', { role: 'alert' }, err instanceof Error ? err.message : 'The request failed.')]));
167
+ return;
168
+ }
169
+ const extra = [];
170
+ if (message)
171
+ extra.push(h('p', { role: 'alert' }, message));
172
+ if (secret)
173
+ extra.push(h('p', { 'data-atlas': 'one-time-secret' }, 'Copy this now — it will not be shown again: ', h('code', {}, secret)));
174
+ host.dataset.atlas = `organization-admin-${options.section}`;
175
+ host.replaceChildren(...extra, ...children);
176
+ }
177
+ void render();
178
+ return {
179
+ destroy() {
180
+ alive = false;
181
+ host.replaceChildren();
182
+ },
183
+ };
184
+ }
185
+ //# sourceMappingURL=org-admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-admin.js","sourceRoot":"","sources":["../src/org-admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { MountTarget } from './mount';
2
+ export interface PricingTableOptions {
3
+ publishableKey?: string;
4
+ frontendApi?: string;
5
+ /** `user` or `org` plans only (default: every plan). */
6
+ audience?: 'user' | 'org';
7
+ /** An organization to buy for (its admin). */
8
+ organizationId?: string;
9
+ /** Currency formatting language; default the page's. */
10
+ locale?: string;
11
+ /** Where the provider returns on success (default the current page). */
12
+ successUrl?: string;
13
+ /** Replace the English text the table adds. */
14
+ labels?: Partial<{
15
+ monthly: string;
16
+ yearly: string;
17
+ perMonth: string;
18
+ perYear: string;
19
+ free: string;
20
+ subscribe: string;
21
+ trial: (days: number) => string;
22
+ useCode: (code: string) => string;
23
+ }>;
24
+ fetchImpl?: typeof fetch;
25
+ /** Navigate to the Checkout URL (default `location.assign`). */
26
+ navigate?: (url: string) => void;
27
+ /** Called when checkout cannot start (not signed in, provider error). */
28
+ onError?: (message: string) => void;
29
+ }
30
+ /**
31
+ * Mount the instance's pricing table into an element: locale-formatted prices, a
32
+ * free-trial badge, a monthly/yearly switch when a plan has an annual price, and a
33
+ * plan's promotion (label, struck-through price, code to use at checkout). The
34
+ * subscribe button starts the provider's hosted Checkout for the signed-in visitor.
35
+ */
36
+ export declare function mountPricingTable(target: MountTarget, options?: PricingTableOptions): {
37
+ destroy(): void;
38
+ } | null;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mountPricingTable = mountPricingTable;
4
+ const js_1 = require("@atlasauth/js");
5
+ const client_1 = require("./client");
6
+ const config_1 = require("./config");
7
+ const h = (tag, props = {}, ...kids) => {
8
+ const node = document.createElement(tag);
9
+ for (const [k, v] of Object.entries(props))
10
+ node.setAttribute(k, v);
11
+ for (const kid of kids)
12
+ if (kid !== null)
13
+ node.append(kid);
14
+ return node;
15
+ };
16
+ /**
17
+ * Mount the instance's pricing table into an element: locale-formatted prices, a
18
+ * free-trial badge, a monthly/yearly switch when a plan has an annual price, and a
19
+ * plan's promotion (label, struck-through price, code to use at checkout). The
20
+ * subscribe button starts the provider's hosted Checkout for the signed-in visitor.
21
+ */
22
+ function mountPricingTable(target, options = {}) {
23
+ const host = typeof target === 'string' ? document.querySelector(target) : target;
24
+ const defaults = (0, config_1.getScriptDefaults)();
25
+ const publishableKey = options.publishableKey ?? defaults.publishableKey;
26
+ const frontendApi = options.frontendApi ?? defaults.frontendApi;
27
+ if (!host)
28
+ return null;
29
+ if (!publishableKey || !frontendApi) {
30
+ host.textContent = 'Atlas: a publishable key and a frontend API origin are required.';
31
+ return null;
32
+ }
33
+ const client = (0, client_1.createClient)({ publishableKey, frontendApi, locale: options.locale ?? defaults.locale, fetchImpl: options.fetchImpl });
34
+ const L = {
35
+ monthly: 'Monthly', yearly: 'Yearly', perMonth: 'month', perYear: 'year', free: 'Free', subscribe: 'Subscribe',
36
+ trial: (d) => `${d}-day free trial`, useCode: (c) => `Use code ${c} at checkout`,
37
+ ...options.labels,
38
+ };
39
+ const locale = options.locale ?? (document.documentElement.lang || undefined);
40
+ let interval = 'month';
41
+ let plans = [];
42
+ let alive = true;
43
+ const render = () => {
44
+ if (!alive)
45
+ return;
46
+ const children = [];
47
+ if (plans.some((p) => p.annual_available)) {
48
+ const group = h('div', { role: 'group', 'aria-label': 'Billing interval', 'data-atlas': 'pricing-interval' });
49
+ for (const i of ['month', 'year']) {
50
+ const b = h('button', { type: 'button', class: 'atlas-button-secondary', 'aria-pressed': String(interval === i) }, i === 'month' ? L.monthly : L.yearly);
51
+ b.addEventListener('click', () => {
52
+ interval = i;
53
+ render();
54
+ });
55
+ group.append(b);
56
+ }
57
+ children.push(group);
58
+ }
59
+ for (const plan of plans) {
60
+ const view = (0, js_1.planPriceView)(plan, { interval, locale });
61
+ const price = h('p', { class: 'atlas-price' });
62
+ if (view.originalPrice)
63
+ price.append(h('s', { 'data-atlas': 'pricing-original' }, view.originalPrice), ' ');
64
+ price.append(view.free ? L.free : view.price);
65
+ if (!view.free)
66
+ price.append(h('span', { class: 'atlas-interval' }, ` / ${view.interval === 'year' ? L.perYear : L.perMonth}`));
67
+ const button = h('button', { type: 'button', class: 'atlas-button' }, L.subscribe);
68
+ button.addEventListener('click', async () => {
69
+ const out = await (0, js_1.startPlanCheckout)(client, {
70
+ planId: plan.id,
71
+ orgId: options.organizationId,
72
+ ...(plan.annual_available ? { interval } : {}),
73
+ successUrl: options.successUrl ?? window.location.href,
74
+ });
75
+ if (out.url)
76
+ (options.navigate ?? ((u) => window.location.assign(u)))(out.url);
77
+ else
78
+ options.onError?.(out.error ?? 'Could not start checkout.');
79
+ });
80
+ children.push(h('div', { class: 'atlas-card', 'data-atlas': 'pricing-plan' }, h('h3', { class: 'atlas-plan-name' }, plan.name), view.promotionLabel ? h('p', { 'data-atlas': 'pricing-promotion', class: 'atlas-badge' }, view.promotionLabel) : null, price, view.trialDays ? h('p', { 'data-atlas': 'pricing-trial', class: 'atlas-badge' }, L.trial(view.trialDays)) : null, view.promotionCode ? h('p', { 'data-atlas': 'pricing-code' }, L.useCode(view.promotionCode)) : null, plan.features.length ? h('ul', { class: 'atlas-list' }, ...plan.features.map((f) => h('li', {}, f))) : null, button));
81
+ }
82
+ host.dataset.atlas = 'pricing-table';
83
+ host.replaceChildren(...children);
84
+ };
85
+ void (0, js_1.listPublicPlans)(client, { audience: options.audience }).then((list) => {
86
+ plans = list;
87
+ render();
88
+ });
89
+ return {
90
+ destroy() {
91
+ alive = false;
92
+ host.replaceChildren();
93
+ },
94
+ };
95
+ }
96
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,18 @@
13
13
  */
14
14
  import { defineElements } from './element';
15
15
  import { mountSignIn, mountSignUp } from './mount';
16
+ import { mountOrganizationAdmin } from './org-admin';
17
+ import { mountPricingTable } from './pricing';
18
+ import { mountLeadForm } from './lead-form';
16
19
  export interface AtlasGlobal {
17
20
  mountSignIn: typeof mountSignIn;
18
21
  mountSignUp: typeof mountSignUp;
22
+ /** Mount a tenant-admin section (SSO, directory, domains, log streams, API keys, IP allowlist, webhooks). */
23
+ mountOrganizationAdmin: typeof mountOrganizationAdmin;
24
+ /** Mount the instance's pricing table (plans, trial, promotion, checkout). */
25
+ mountPricingTable: typeof mountPricingTable;
26
+ /** Mount a lead / newsletter signup form. */
27
+ mountLeadForm: typeof mountLeadForm;
19
28
  defineElements: typeof defineElements;
20
29
  }
21
30
  declare global {
@@ -15,6 +15,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  */
16
16
  const element_1 = require("./element");
17
17
  const mount_1 = require("./mount");
18
+ const org_admin_1 = require("./org-admin");
19
+ const pricing_1 = require("./pricing");
20
+ const lead_form_1 = require("./lead-form");
18
21
  const config_1 = require("./config");
19
22
  function currentScript() {
20
23
  const active = document.currentScript;
@@ -28,7 +31,7 @@ function currentScript() {
28
31
  function boot() {
29
32
  (0, config_1.setScriptDefaults)((0, config_1.readScriptTag)(currentScript()));
30
33
  (0, element_1.defineElements)();
31
- window.Atlas = { mountSignIn: mount_1.mountSignIn, mountSignUp: mount_1.mountSignUp, defineElements: element_1.defineElements };
34
+ window.Atlas = { mountSignIn: mount_1.mountSignIn, mountSignUp: mount_1.mountSignUp, mountOrganizationAdmin: org_admin_1.mountOrganizationAdmin, mountPricingTable: pricing_1.mountPricingTable, mountLeadForm: lead_form_1.mountLeadForm, defineElements: element_1.defineElements };
32
35
  }
33
36
  boot();
34
37
  //# sourceMappingURL=standalone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;GAYG;AACH,uCAA2C;AAC3C,mCAAmD;AACnD,qCAA4D;AAc5D,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;IACtC,IAAI,MAAM,YAAY,iBAAiB;QAAE,OAAO,MAAM,CAAC;IACvD,wEAAwE;IACxE,uEAAuE;IACvE,OAAO,CACL,QAAQ,CAAC,aAAa,CAAoB,wBAAwB,CAAC;QACnE,QAAQ,CAAC,aAAa,CAAoB,yBAAyB,CAAC,CACrE,CAAC;AACJ,CAAC;AAED,SAAS,IAAI;IACX,IAAA,0BAAiB,EAAC,IAAA,sBAAa,EAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAClD,IAAA,wBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,KAAK,GAAG,EAAE,WAAW,EAAX,mBAAW,EAAE,WAAW,EAAX,mBAAW,EAAE,cAAc,EAAd,wBAAc,EAAE,CAAC;AAC9D,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../src/standalone.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;GAYG;AACH,uCAA2C;AAC3C,mCAAmD;AACnD,2CAAqD;AACrD,uCAA8C;AAC9C,2CAA4C;AAC5C,qCAA4D;AAoB5D,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC;IACtC,IAAI,MAAM,YAAY,iBAAiB;QAAE,OAAO,MAAM,CAAC;IACvD,wEAAwE;IACxE,uEAAuE;IACvE,OAAO,CACL,QAAQ,CAAC,aAAa,CAAoB,wBAAwB,CAAC;QACnE,QAAQ,CAAC,aAAa,CAAoB,yBAAyB,CAAC,CACrE,CAAC;AACJ,CAAC;AAED,SAAS,IAAI;IACX,IAAA,0BAAiB,EAAC,IAAA,sBAAa,EAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAClD,IAAA,wBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,KAAK,GAAG,EAAE,WAAW,EAAX,mBAAW,EAAE,WAAW,EAAX,mBAAW,EAAE,sBAAsB,EAAtB,kCAAsB,EAAE,iBAAiB,EAAjB,2BAAiB,EAAE,aAAa,EAAb,yBAAa,EAAE,cAAc,EAAd,wBAAc,EAAE,CAAC;AACxH,CAAC;AAED,IAAI,EAAE,CAAC"}
package/dist/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { AtlasSdkInfo } from '@atlasauth/js';
2
2
  /** This package's version, sent as `X-Atlas-SDK` (kept in step with package.json by a test). */
3
- export declare const ATLAS_EMBED_VERSION = "0.11.0";
3
+ export declare const ATLAS_EMBED_VERSION = "0.14.0";
4
4
  export declare const ATLAS_EMBED_SDK: AtlasSdkInfo;
package/dist/version.js CHANGED
@@ -2,6 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ATLAS_EMBED_SDK = exports.ATLAS_EMBED_VERSION = void 0;
4
4
  /** This package's version, sent as `X-Atlas-SDK` (kept in step with package.json by a test). */
5
- exports.ATLAS_EMBED_VERSION = '0.11.0';
5
+ exports.ATLAS_EMBED_VERSION = '0.14.0';
6
6
  exports.ATLAS_EMBED_SDK = { name: '@atlasauth/embed', version: exports.ATLAS_EMBED_VERSION };
7
7
  //# sourceMappingURL=version.js.map