@atlasauth/solid 0.6.0 → 0.8.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/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlasauth/solid changelog
2
2
 
3
+ ## 0.8.0 — 2026-10-23
4
+
5
+ ### Added
6
+
7
+ - `<OrganizationAuditLog/>` and `useOrganizationAuditLog()`: the active organization's audit trail for its admins, paged, with labels as props. Renders nothing for a member who may not read it.
8
+
9
+ ### Changed
10
+
11
+ - Built on `@atlasauth/js` 0.16.0.
12
+
13
+ ## 0.7.0
14
+
15
+ ### Changed
16
+
17
+ - `@atlasauth/js` 0.15.0: referral capture for any referral program and any consent manager (pass a custom program's reader page-wide with `configureReferralCapture({ referralSource })`).
18
+
3
19
  ## 0.6.0
4
20
  - **Referral attribution.** The prebuilt forms send the referral the visitor arrived with on sign-in and sign-up (through `@atlasauth/js` 0.13.0) when the instance has referrals on, and show the captcha for a referred sign-up when the instance requires it. New `<AtlasProvider>` props: `referral?: false` and `referralConsent?`.
5
21
 
package/dist/index.d.ts CHANGED
@@ -4,6 +4,8 @@ export * from './provider';
4
4
  export * from './accessors';
5
5
  export * from './control-components';
6
6
  export * from './widgets';
7
+ export * from './organization';
8
+ export type { OrganizationAuditLogEntry, OrganizationAuditLogState } from '@atlasauth/js';
7
9
  export { SIGN_OUT_EVENT, onAtlasSignOut } from '@atlasauth/js';
8
10
  export type { SignOutEvent, SignOutReason } from '@atlasauth/js';
9
11
  export { ATLAS_SOLID_SDK, ATLAS_SOLID_VERSION } from './version';
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export * from './provider';
4
4
  export * from './accessors';
5
5
  export * from './control-components';
6
6
  export * from './widgets';
7
+ export * from './organization';
7
8
  // `onSignOut({ reason })` event types + the `atlas:signout` window event; this SDK's version.
8
9
  export { SIGN_OUT_EVENT, onAtlasSignOut } from '@atlasauth/js';
9
10
  export { ATLAS_SOLID_SDK, ATLAS_SOLID_VERSION } from './version';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAE1B,8FAA8F;AAC9F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAG/B,8FAA8F;AAC9F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type JSX } from 'solid-js';
2
+ import { type OrganizationAuditLogOptions, type OrganizationAuditLogState } from '@atlasauth/js';
3
+ /**
4
+ * The active organization's audit trail, for its admins: one page at a time,
5
+ * newest first, with `loadMore()`. `action` narrows it (exact, or a prefix
6
+ * ending in `.`). `state().forbidden` is true when the signed-in member may not
7
+ * read it, so the caller can hide the surface. Follows the active organization.
8
+ */
9
+ export declare function useOrganizationAuditLog(options?: OrganizationAuditLogOptions): {
10
+ state: () => OrganizationAuditLogState;
11
+ loadMore: () => Promise<void>;
12
+ reload: () => Promise<void>;
13
+ };
14
+ export interface OrganizationAuditLogProps extends OrganizationAuditLogOptions {
15
+ labels?: {
16
+ title?: string;
17
+ empty?: string;
18
+ loadMore?: string;
19
+ actor?: string;
20
+ };
21
+ formatDate?: (ms: number) => string;
22
+ }
23
+ /**
24
+ * `<OrganizationAuditLog/>` — the active organization's audit trail for its
25
+ * admins. Renders nothing for a member who may not read it (the server is the
26
+ * authority; the component just follows it). Labels are props so an app can
27
+ * localise them.
28
+ */
29
+ export declare function OrganizationAuditLog(props?: OrganizationAuditLogProps): JSX.Element;
@@ -0,0 +1,67 @@
1
+ import { createEffect, createSignal, on, onCleanup } from 'solid-js';
2
+ import { FapiClient, createOrganizationAuditLog, describeAuditAction, } from '@atlasauth/js';
3
+ import { h } from './h';
4
+ import { useAtlas } from './context';
5
+ import { ATLAS_SOLID_SDK } from './version';
6
+ /** The active organization's id: the session's `org_id`, when the user is a member of it. */
7
+ function activeOrganizationId(client) {
8
+ const orgId = client.state.claims?.org_id;
9
+ if (!orgId)
10
+ return null;
11
+ return client.state.memberships.some((m) => m.organization.id === orgId) ? orgId : null;
12
+ }
13
+ /**
14
+ * The active organization's audit trail, for its admins: one page at a time,
15
+ * newest first, with `loadMore()`. `action` narrows it (exact, or a prefix
16
+ * ending in `.`). `state().forbidden` is true when the signed-in member may not
17
+ * read it, so the caller can hide the surface. Follows the active organization.
18
+ */
19
+ export function useOrganizationAuditLog(options = {}) {
20
+ const client = useAtlas();
21
+ const log = createOrganizationAuditLog(new FapiClient({
22
+ publishableKey: client.publishableKey,
23
+ baseUrl: client.frontendApi,
24
+ locale: client.locale,
25
+ sdk: ATLAS_SOLID_SDK,
26
+ }), options);
27
+ const [state, setState] = createSignal(log.getState());
28
+ onCleanup(log.subscribe((next) => setState(next)));
29
+ createEffect(on(() => activeOrganizationId(client), (id) => void log.load(id)));
30
+ return { state, loadMore: log.loadMore, reload: log.reload };
31
+ }
32
+ /**
33
+ * `<OrganizationAuditLog/>` — the active organization's audit trail for its
34
+ * admins. Renders nothing for a member who may not read it (the server is the
35
+ * authority; the component just follows it). Labels are props so an app can
36
+ * localise them.
37
+ */
38
+ export function OrganizationAuditLog(props = {}) {
39
+ const client = useAtlas();
40
+ const log = useOrganizationAuditLog({ pageSize: props.pageSize, action: props.action });
41
+ const formatDate = (ms) => (props.formatDate ?? ((v) => new Date(v).toLocaleString()))(ms);
42
+ return (() => {
43
+ const state = log.state();
44
+ if (!activeOrganizationId(client) || state.forbidden)
45
+ return null;
46
+ const labels = props.labels ?? {};
47
+ return h('div', { class: 'atlas-card', 'data-atlas': 'organization-audit-log' }, [
48
+ h('h2', { class: 'atlas-title' }, labels.title ?? 'Audit log'),
49
+ state.entries.length === 0 && !state.loading
50
+ ? h('p', { class: 'atlas-subtitle' }, labels.empty ?? 'No activity recorded yet.')
51
+ : h('ul', { class: 'atlas-audit-list' }, state.entries.map((entry) => h('li', { class: 'atlas-audit-item', 'data-action': entry.action }, [
52
+ h('strong', describeAuditAction(entry.action)),
53
+ h('span', { class: 'atlas-audit-meta' }, ` · ${formatDate(entry.created_at)}` +
54
+ (entry.actor.id ? ` · ${labels.actor ?? 'by'} ${entry.actor.type} ${entry.actor.id}` : '')),
55
+ ]))),
56
+ state.hasMore
57
+ ? h('button', {
58
+ type: 'button',
59
+ class: 'atlas-button-secondary',
60
+ disabled: state.loading,
61
+ onClick: () => void log.loadMore(),
62
+ }, labels.loadMore ?? 'Load more')
63
+ : null,
64
+ ]);
65
+ });
66
+ }
67
+ //# sourceMappingURL=organization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.js","sourceRoot":"","sources":["../src/organization.ts"],"names":[],"mappings":"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"}
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_SOLID_VERSION = "0.6.0";
3
+ export declare const ATLAS_SOLID_VERSION = "0.8.0";
4
4
  export declare const ATLAS_SOLID_SDK: AtlasSdkInfo;
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /** This package's version, sent as `X-Atlas-SDK` (kept in step with package.json by a test). */
2
- export const ATLAS_SOLID_VERSION = '0.6.0';
2
+ export const ATLAS_SOLID_VERSION = '0.8.0';
3
3
  export const ATLAS_SOLID_SDK = { name: '@atlasauth/solid', version: ATLAS_SOLID_VERSION };
4
4
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasauth/solid",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  }
12
12
  },
13
13
  "dependencies": {
14
- "@atlasauth/js": "0.13.0"
14
+ "@atlasauth/js": "0.16.0"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "solid-js": ">=1.8"