@simplr-ai/angular 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tokens.ts","../src/services/simplr.service.ts","../src/services/simplr-flags.service.ts","../src/services/simplr-profiles.service.ts","../src/services/simplr-rum.service.ts","../src/services/simplr-ai.service.ts","../src/services/simplr-error-handler.ts","../src/directives/simplr-protect.directive.ts","../src/directives/simplr-rum-view.directive.ts","../src/directives/simplr-protected-form.component.ts","../src/provider.ts"],"names":["SIMPLR_CONFIG","InjectionToken","SimplrService","core","config","SimplrFraud","apiKey","fraud","isReady","initialize","startTracking","stopTracking","reset","trackInput","fieldName","getDeviceSignals","collectDeviceSignals","getDeviceSignals$","from","getBehaviorSignals","collectBehaviorSignals","collect","collect$","check","input","signals","baseUrl","replace","res","fetch","method","headers","body","JSON","stringify","device","behavior","json","catch","ok","Error","message","error","status","content","check$","ngOnDestroy","providedIn","SimplrFlagsService","SimplrFlags","flags$","BehaviorSubject","refreshTimer","autoInitDone","overrides","refreshIntervalMs","flags","cfg","emit","setInterval","refresh","setUser","userId","refresh$","isEnabled","key","ctx","observeFlag","pipe","map","distinctUntilChanged","getAll","next","clearInterval","dispose","complete","SimplrProfilesService","SimplrProfiles","profiles","collectBiometrics","autoStart","setDeviceSignalCollector","identify","externalId","options","identify$","submitOrder","order","submitOrder$","getProfileRisk","getProfileRisk$","reportOutcome","outcome","reportOutcome$","SimplrRumService","SimplrRUM","getInstance","merged","rum","isInitialized","attributes","clearUser","addAttribute","value","removeAttribute","trackView","name","trackAction","type","trackError","context","log","level","stopSession","flush","getSessionId","getViewId","SimplrAIService","SimplrAI","endpoint","ai","connect","connect$","createDelegation","createDelegation$","validate","token","validate$","revoke","delegationId","reason","revoke$","list","list$","get","get$","stats","stats$","revokeAllForUser","revokeAllForUser$","SimplrErrorHandler","handleError","err","source","console","SimplrProtectDirective","simplrPreventDefault","simplrSignals","EventEmitter","simplrError","simplr","onSubmit","event","preventDefault","selector","standalone","SimplrRumViewDirective","viewName","simplrRumViewAttributes","ngOnInit","SimplrProtectedFormComponent","submitWithSignals","collectError","template","buildProviders","providers","provide","useValue","errorHandler","push","ErrorHandler","useClass","provideSimplr","makeEnvironmentProviders","SIMPLR_DIRECTIVES","SimplrModule","forRoot","ngModule","imports","exports"],"mappings":"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","file":"index.js","sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { SimplrFraudConfig } from \"@simplr-ai/js\";\nimport type { SimplrFlagsConfig } from \"@simplr-ai/js\";\nimport type { SimplrRUMConfig } from \"@simplr-ai/js\";\nimport type { SimplrProfilesConfig } from \"@simplr-ai/js\";\nimport type { AIDelegationConfig } from \"@simplr-ai/js\";\n\n/**\n * Unified configuration for the Simplr Angular adapter. A single config object\n * configures every feature surface: fraud/biometrics, feature flags, profiles,\n * RUM and AI delegation. All keys are optional except `apiKey` (your public\n * `pk_*` key) which most features require.\n */\nexport interface SimplrConfig {\n /** Public API key (`pk_live_…` / `pk_test_…`). Safe for the client. */\n apiKey: string;\n /** Override the API base URL (default `https://api.simplr.sh`). */\n baseUrl?: string;\n\n /** Options forwarded to the core `SimplrFraud` device/biometrics collector. */\n fraud?: Omit<SimplrFraudConfig, \"apiKey\">;\n\n /** Options forwarded to the core `SimplrFlags` feature-flag engine. */\n flags?: Partial<Omit<SimplrFlagsConfig, \"apiKey\">>;\n\n /**\n * Options forwarded to the core `SimplrProfiles` SDK.\n * Falls back to the top-level `apiKey`/`baseUrl`.\n */\n profiles?: Partial<Omit<SimplrProfilesConfig, \"apiKey\">>;\n\n /**\n * Options forwarded to the core `SimplrRUM` SDK. `applicationId` is required\n * by the core when RUM is initialized.\n */\n rum?: Partial<SimplrRUMConfig>;\n\n /** Options forwarded to the core `SimplrAI` delegation client. */\n ai?: Partial<Omit<AIDelegationConfig, \"apiKey\">>;\n}\n\n/**\n * DI token holding the resolved {@link SimplrConfig}. Provided by\n * `provideSimplr()` or `SimplrModule.forRoot()`.\n */\nexport const SIMPLR_CONFIG = new InjectionToken<SimplrConfig>(\"SIMPLR_CONFIG\");\n","import { Inject, Injectable, OnDestroy, Optional } from \"@angular/core\";\nimport { Observable, from } from \"rxjs\";\nimport {\n SimplrFraud,\n type CollectedSignals,\n type DeviceSignals,\n type BehaviorSignals,\n} from \"@simplr-ai/js\";\nimport { SIMPLR_CONFIG, type SimplrConfig } from \"../tokens\";\n\n/**\n * Wraps the core `SimplrFraud` instance: device fingerprinting + behavioral\n * biometrics + signal collection used for `/v1/check` fraud/identity checks.\n *\n * The constructor accepts the resolved {@link SimplrConfig} directly so it can be\n * unit-tested without Angular's DI runtime: `new SimplrService(config)`.\n */\n@Injectable({ providedIn: \"root\" })\nexport class SimplrService implements OnDestroy {\n /** The underlying core SDK instance. Exposed for advanced/escape-hatch use. */\n readonly core: SimplrFraud;\n\n private readonly config?: SimplrConfig;\n\n constructor(@Optional() @Inject(SIMPLR_CONFIG) config?: SimplrConfig) {\n this.config = config;\n this.core = new SimplrFraud({\n apiKey: config?.apiKey,\n ...config?.fraud,\n });\n }\n\n /** Whether the SDK has been initialized and is ready to collect. */\n get isReady(): boolean {\n return this.core.isReady;\n }\n\n /** Initialize the SDK and start biometric tracking (no-op if auto-started). */\n initialize(): void {\n this.core.initialize();\n }\n\n /** Start behavioral biometric tracking. */\n startTracking(): void {\n this.core.startTracking();\n }\n\n /** Stop behavioral biometric tracking. */\n stopTracking(): void {\n this.core.stopTracking();\n }\n\n /** Reset all collected behavioral data. */\n reset(): void {\n this.core.reset();\n }\n\n /** Event handlers + `data-simplr-field` attr to wire up an input for keystroke biometrics. */\n trackInput(fieldName: string) {\n return this.core.trackInput(fieldName);\n }\n\n /** Collect the full device fingerprint only (Promise). */\n getDeviceSignals(): Promise<DeviceSignals> {\n return this.core.collectDeviceSignals();\n }\n\n /** Collect the full device fingerprint only (Observable). */\n getDeviceSignals$(): Observable<DeviceSignals> {\n return from(this.core.collectDeviceSignals());\n }\n\n /** Collect behavioral signals synchronously. */\n getBehaviorSignals(): BehaviorSignals {\n return this.core.collectBehaviorSignals();\n }\n\n /** Collect device + behavior signals (Promise). */\n collect(): Promise<CollectedSignals> {\n return this.core.collect();\n }\n\n /** Collect device + behavior signals (Observable). */\n collect$(): Observable<CollectedSignals> {\n return from(this.core.collect());\n }\n\n /**\n * Convenience: run a fraud/identity check against `/v1/check`. Collects fresh\n * device + behavior signals and posts them with the configured public key.\n * Returns the unwrapped `content` from the response envelope.\n */\n async check(input: Record<string, unknown> = {}): Promise<unknown> {\n const config = this.config;\n const signals = await this.core.collect();\n const baseUrl = (config?.baseUrl || \"https://api.simplr.sh\").replace(/\\/+$/, \"\");\n const res = await fetch(`${baseUrl}/v1/check`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": config?.apiKey ?? \"\",\n },\n body: JSON.stringify({\n ...input,\n device: signals.device,\n behavior: signals.behavior,\n }),\n });\n const body = await res.json().catch(() => null);\n if (!res.ok) {\n throw new Error(body?.message || body?.error || `Simplr API error ${res.status}`);\n }\n return body && \"content\" in body ? body.content : body;\n }\n\n /** Observable variant of {@link check}. */\n check$(input: Record<string, unknown> = {}): Observable<unknown> {\n return from(this.check(input));\n }\n\n ngOnDestroy(): void {\n this.core.stopTracking();\n }\n}\n","import { Inject, Injectable, OnDestroy, Optional } from \"@angular/core\";\nimport { BehaviorSubject, Observable, from } from \"rxjs\";\nimport { distinctUntilChanged, map } from \"rxjs/operators\";\nimport {\n SimplrFlags,\n type FlagDefinition,\n type EvalContext,\n type SimplrFlagsConfig,\n} from \"@simplr-ai/js\";\nimport { SIMPLR_CONFIG, type SimplrConfig } from \"../tokens\";\n\n/**\n * Wraps the core `SimplrFlags` engine (feature flags with deterministic\n * per-user rollout + targeting, evaluated locally). Adds an RxJS surface:\n * `flags$` emits the full flag map whenever flags refresh, and\n * `observeFlag(key, ctx?)` emits a boolean that re-evaluates on every refresh.\n *\n * Unit-testable without Angular DI: `new SimplrFlagsService(config)`.\n */\n@Injectable({ providedIn: \"root\" })\nexport class SimplrFlagsService implements OnDestroy {\n /** The underlying core SDK instance. */\n readonly core = new SimplrFlags();\n\n /** Emits the full `{ key -> FlagDefinition }` map on every refresh. */\n readonly flags$ = new BehaviorSubject<Record<string, FlagDefinition>>({});\n\n private readonly config?: SimplrConfig;\n private refreshTimer: ReturnType<typeof setInterval> | null = null;\n private autoInitDone = false;\n\n constructor(@Optional() @Inject(SIMPLR_CONFIG) config?: SimplrConfig) {\n this.config = config;\n }\n\n /**\n * Initialize the flag engine. Loads flags from `/v1/flags`, seeds `flags$`,\n * and starts an internal refresh loop that re-emits `flags$` on each cycle.\n */\n async initialize(overrides?: Partial<SimplrFlagsConfig>): Promise<void> {\n const refreshIntervalMs =\n overrides?.refreshIntervalMs ?? this.config?.flags?.refreshIntervalMs ?? 60000;\n\n const cfg: SimplrFlagsConfig = {\n apiKey: this.config?.apiKey ?? \"\",\n baseUrl: this.config?.baseUrl,\n ...this.config?.flags,\n ...overrides,\n // We drive refresh emissions ourselves so flags$ stays in sync; disable\n // the core's internal timer to avoid a second uncontrolled loop.\n refreshIntervalMs: 0,\n };\n\n await this.core.initialize(cfg);\n this.emit();\n\n if (refreshIntervalMs > 0 && typeof setInterval !== \"undefined\") {\n this.refreshTimer = setInterval(() => this.refresh(), refreshIntervalMs);\n }\n this.autoInitDone = true;\n }\n\n /** Set the default user id used for flag evaluation/bucketing. */\n setUser(userId: string): void {\n this.core.setUser(userId);\n }\n\n /** Manually refresh flags from the server and re-emit `flags$`. */\n async refresh(): Promise<void> {\n await this.core.refresh();\n this.emit();\n }\n\n /** Manually refresh flags as an Observable. */\n refresh$(): Observable<void> {\n return from(this.refresh());\n }\n\n /** Evaluate a flag synchronously (local eval, murmurhash bucketing). */\n isEnabled(key: string, ctx?: EvalContext): boolean {\n return this.core.isEnabled(key, ctx);\n }\n\n /**\n * Observe a single flag as a boolean stream. Re-evaluates and emits whenever\n * `flags$` changes (i.e. on every refresh), deduping consecutive equal values.\n */\n observeFlag(key: string, ctx?: EvalContext): Observable<boolean> {\n return this.flags$.pipe(\n map(() => this.core.isEnabled(key, ctx)),\n distinctUntilChanged(),\n );\n }\n\n /** Whether the engine has loaded its initial flag set. */\n isReady(): boolean {\n return this.core.isReady();\n }\n\n /** Snapshot of all currently-known flag definitions. */\n getAll(): Record<string, FlagDefinition> {\n return this.core.getAll();\n }\n\n private emit(): void {\n this.flags$.next(this.core.getAll());\n }\n\n ngOnDestroy(): void {\n if (this.refreshTimer) clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n this.core.dispose();\n this.flags$.complete();\n }\n}\n","import { Inject, Injectable, Optional } from \"@angular/core\";\nimport { Observable, from } from \"rxjs\";\nimport {\n SimplrProfiles,\n SimplrFraud,\n type IdentifyOptions,\n type ProfileIdentifyResult,\n type ProfileOrderInput,\n type ProfileOrderFraudResult,\n type ProfileRiskResult,\n} from \"@simplr-ai/js\";\nimport { SIMPLR_CONFIG, type SimplrConfig } from \"../tokens\";\n\n/**\n * Wraps the core `SimplrProfiles` SDK: anonymous user profile management and\n * order fraud scoring. Methods are exposed as Promises and `*$` Observable\n * variants. Device fingerprints are auto-collected via a wired-in `SimplrFraud`\n * collector, matching the browser core behavior.\n *\n * Unit-testable without Angular DI: `new SimplrProfilesService(config)`.\n */\n@Injectable({ providedIn: \"root\" })\nexport class SimplrProfilesService {\n /** The underlying core SDK instance. */\n readonly core: SimplrProfiles;\n\n constructor(@Optional() @Inject(SIMPLR_CONFIG) config?: SimplrConfig) {\n this.core = new SimplrProfiles({\n apiKey: config?.apiKey ?? \"\",\n baseUrl: config?.baseUrl,\n ...config?.profiles,\n });\n\n // Auto-collect device signals using a non-biometric SimplrFraud instance.\n const fraud = new SimplrFraud({ apiKey: config?.apiKey, collectBiometrics: false, autoStart: false });\n this.core.setDeviceSignalCollector(() => fraud.collectDeviceSignals());\n }\n\n /** Identify a user — creates/updates an anonymous profile, links the device. */\n identify(externalId: string, options?: IdentifyOptions): Promise<ProfileIdentifyResult> {\n return this.core.identify(externalId, options);\n }\n\n /** Observable variant of {@link identify}. */\n identify$(externalId: string, options?: IdentifyOptions): Observable<ProfileIdentifyResult> {\n return from(this.core.identify(externalId, options));\n }\n\n /** Submit an order for real-time fraud scoring (`/v1/orders`). */\n submitOrder(order: ProfileOrderInput): Promise<ProfileOrderFraudResult> {\n return this.core.submitOrder(order);\n }\n\n /** Observable variant of {@link submitOrder}. */\n submitOrder$(order: ProfileOrderInput): Observable<ProfileOrderFraudResult> {\n return from(this.core.submitOrder(order));\n }\n\n /** Get the risk profile for a user (`GET /v1/profiles/{externalId}`). */\n getProfileRisk(externalId: string): Promise<ProfileRiskResult> {\n return this.core.getProfileRisk(externalId);\n }\n\n /** Observable variant of {@link getProfileRisk}. */\n getProfileRisk$(externalId: string): Observable<ProfileRiskResult> {\n return from(this.core.getProfileRisk(externalId));\n }\n\n /** Report a profile outcome as `fraud` or `legitimate`. */\n reportOutcome(externalId: string, outcome: \"fraud\" | \"legitimate\"): Promise<void> {\n return this.core.reportOutcome(externalId, outcome);\n }\n\n /** Observable variant of {@link reportOutcome}. */\n reportOutcome$(externalId: string, outcome: \"fraud\" | \"legitimate\"): Observable<void> {\n return from(this.core.reportOutcome(externalId, outcome));\n }\n}\n","import { Inject, Injectable, OnDestroy, Optional } from \"@angular/core\";\nimport {\n SimplrRUM,\n type SimplrRUMConfig,\n type RUMActionType,\n type RUMLogLevel,\n type RUMActionTarget,\n type RUMErrorData,\n} from \"@simplr-ai/js\";\nimport { SIMPLR_CONFIG, type SimplrConfig } from \"../tokens\";\n\n/**\n * Wraps the core `SimplrRUM` Real User Monitoring SDK. Exposes the full method\n * surface (setUser/clearUser/attributes/trackView/trackAction/trackError/log/\n * flush/getSessionId/getViewId) plus an auto-view-tracking helper used by the\n * `[simplrRumView]` directive.\n *\n * Unit-testable without Angular DI: `new SimplrRumService(config)`.\n */\n@Injectable({ providedIn: \"root\" })\nexport class SimplrRumService implements OnDestroy {\n /** The underlying core RUM singleton. */\n readonly core: SimplrRUM = SimplrRUM.getInstance();\n\n private readonly config?: SimplrConfig;\n\n constructor(@Optional() @Inject(SIMPLR_CONFIG) config?: SimplrConfig) {\n this.config = config;\n }\n\n /**\n * Initialize RUM. `applicationId` is required by the core. Pulls apiKey/baseUrl\n * from the unified config when not supplied in overrides.\n */\n initialize(overrides?: Partial<SimplrRUMConfig>): void {\n const merged = {\n apiKey: this.config?.apiKey,\n ...this.config?.rum,\n ...overrides,\n } as SimplrRUMConfig;\n this.core.initialize(merged);\n }\n\n /** Whether RUM has been initialized. */\n isInitialized(): boolean {\n return this.core.isInitialized();\n }\n\n /** Associate the current session with a user. */\n setUser(userId: string, attributes?: Record<string, unknown>): void {\n this.core.setUser(userId, attributes);\n }\n\n /** Clear the current session's user. */\n clearUser(): void {\n this.core.clearUser();\n }\n\n /** Add a global attribute attached to every event. */\n addAttribute(key: string, value: unknown): void {\n this.core.addAttribute(key, value);\n }\n\n /** Remove a previously added global attribute. */\n removeAttribute(key: string): void {\n this.core.removeAttribute(key);\n }\n\n /** Track a page/screen view. */\n trackView(name: string, attributes?: Record<string, unknown>): void {\n this.core.trackView(name, attributes);\n }\n\n /** Track a user action. */\n trackAction(\n name: string,\n type: RUMActionType,\n options?: { target?: Partial<RUMActionTarget>; attributes?: Record<string, unknown> },\n ): void {\n this.core.trackAction(name, type, options);\n }\n\n /** Track an error. */\n trackError(error: Error | RUMErrorData, context?: Record<string, unknown>): void {\n this.core.trackError(error, context);\n }\n\n /** Emit a structured log message. */\n log(level: RUMLogLevel, message: string, context?: Record<string, unknown>): void {\n this.core.log(level, message, context);\n }\n\n /** End the current RUM session and flush. */\n stopSession(): void {\n this.core.stopSession();\n }\n\n /** Force-flush the event batch. */\n flush(): Promise<void> {\n return this.core.flush();\n }\n\n /** Current session id (or null). */\n getSessionId(): string | null {\n return this.core.getSessionId();\n }\n\n /** Current view id (or null). */\n getViewId(): string | null {\n return this.core.getViewId();\n }\n\n ngOnDestroy(): void {\n if (this.core.isInitialized()) {\n this.core.flush();\n }\n }\n}\n","import { Inject, Injectable, Optional } from \"@angular/core\";\nimport { Observable, from } from \"rxjs\";\nimport {\n SimplrAI,\n type CreateDelegationOptions,\n type DelegationResult,\n type DelegationInfo,\n type ValidationResult,\n type DelegationStats,\n} from \"@simplr-ai/js\";\nimport { SIMPLR_CONFIG, type SimplrConfig } from \"../tokens\";\n\n// `ConnectOptions` / `ConnectResult` are not re-exported by the core barrel, so\n// derive them structurally from the method signature to stay decoupled.\ntype ConnectOptions = Parameters<SimplrAI[\"connect\"]>[0];\ntype ConnectResult = Awaited<ReturnType<SimplrAI[\"connect\"]>>;\ntype ValidateOptions = Parameters<SimplrAI[\"validate\"]>[1];\n\n/**\n * Wraps the core `SimplrAI` delegation client (OAuth-like AI authentication).\n * Full surface — connect/createDelegation/validate/revoke/list/get/stats/\n * revokeAllForUser — exposed as Promises and `*$` Observable variants.\n *\n * Unit-testable without Angular DI: `new SimplrAIService(config)`.\n */\n@Injectable({ providedIn: \"root\" })\nexport class SimplrAIService {\n /** The underlying core SDK instance. */\n readonly core: SimplrAI;\n\n constructor(@Optional() @Inject(SIMPLR_CONFIG) config?: SimplrConfig) {\n this.core = new SimplrAI({\n apiKey: config?.apiKey ?? \"\",\n endpoint: config?.baseUrl,\n ...config?.ai,\n });\n }\n\n /** Open the AI Connect gateway (popup/redirect) for users to connect their AI. */\n connect(options: ConnectOptions): Promise<ConnectResult> {\n return this.core.connect(options);\n }\n\n /** Observable variant of {@link connect}. */\n connect$(options: ConnectOptions): Observable<ConnectResult> {\n return from(this.core.connect(options));\n }\n\n /** Create a new AI delegation token for a user. */\n createDelegation(options: CreateDelegationOptions): Promise<DelegationResult> {\n return this.core.createDelegation(options);\n }\n\n /** Observable variant of {@link createDelegation}. */\n createDelegation$(options: CreateDelegationOptions): Observable<DelegationResult> {\n return from(this.core.createDelegation(options));\n }\n\n /** Validate a delegation token. */\n validate(token: string, options?: ValidateOptions): Promise<ValidationResult> {\n return this.core.validate(token, options);\n }\n\n /** Observable variant of {@link validate}. */\n validate$(token: string, options?: ValidateOptions): Observable<ValidationResult> {\n return from(this.core.validate(token, options));\n }\n\n /** Revoke a single delegation. */\n revoke(delegationId: string, reason?: string): Promise<void> {\n return this.core.revoke(delegationId, reason);\n }\n\n /** Observable variant of {@link revoke}. */\n revoke$(delegationId: string, reason?: string): Observable<void> {\n return from(this.core.revoke(delegationId, reason));\n }\n\n /** List delegations (optionally filtered by user). */\n list(userId?: string): Promise<DelegationInfo[]> {\n return this.core.list(userId);\n }\n\n /** Observable variant of {@link list}. */\n list$(userId?: string): Observable<DelegationInfo[]> {\n return from(this.core.list(userId));\n }\n\n /** Get a single delegation. */\n get(delegationId: string): Promise<DelegationInfo> {\n return this.core.get(delegationId);\n }\n\n /** Observable variant of {@link get}. */\n get$(delegationId: string): Observable<DelegationInfo> {\n return from(this.core.get(delegationId));\n }\n\n /** Get aggregate delegation statistics. */\n stats(): Promise<DelegationStats> {\n return this.core.stats();\n }\n\n /** Observable variant of {@link stats}. */\n stats$(): Observable<DelegationStats> {\n return from(this.core.stats());\n }\n\n /** Revoke all delegations for a user (useful on logout). Returns the count revoked. */\n revokeAllForUser(userId: string, reason?: string): Promise<number> {\n return this.core.revokeAllForUser(userId, reason);\n }\n\n /** Observable variant of {@link revokeAllForUser}. */\n revokeAllForUser$(userId: string, reason?: string): Observable<number> {\n return from(this.core.revokeAllForUser(userId, reason));\n }\n}\n","import { ErrorHandler, Injectable, Optional } from \"@angular/core\";\nimport { SimplrRumService } from \"./simplr-rum.service\";\n\n/**\n * Optional Angular `ErrorHandler` that pipes uncaught application errors into\n * Simplr RUM via {@link SimplrRumService.trackError} before re-logging them.\n *\n * Wire it up by adding `{ provide: ErrorHandler, useClass: SimplrErrorHandler }`\n * to your providers (or pass `errorHandler: true` to `provideSimplr()`).\n */\n@Injectable()\nexport class SimplrErrorHandler implements ErrorHandler {\n constructor(@Optional() private readonly rum?: SimplrRumService) {}\n\n handleError(error: unknown): void {\n try {\n if (this.rum?.isInitialized()) {\n const err =\n error instanceof Error\n ? error\n : new Error(typeof error === \"string\" ? error : JSON.stringify(error));\n this.rum.trackError(err, { source: \"angular_error_handler\" });\n }\n } catch {\n // Never let RUM reporting mask the original error.\n }\n // Preserve default behavior — surface the error in the console.\n console.error(error);\n }\n}\n","import {\n Directive,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from \"@angular/core\";\nimport { SimplrService } from \"../services/simplr.service\";\nimport type { CollectedSignals } from \"@simplr-ai/js\";\n\n/**\n * `[simplrProtect]` — attach Simplr device + behavioral signals to a form on\n * submit. On the form's `submit` event it collects fresh signals and emits them\n * via `(simplrSignals)`. By default it prevents the native submit so callers\n * can finish their request with the signals attached; set\n * `[simplrPreventDefault]=\"false\"` to opt out.\n *\n * ```html\n * <form simplrProtect (simplrSignals)=\"onSignals($event)\"> … </form>\n * ```\n */\n@Directive({\n selector: \"[simplrProtect]\",\n standalone: true,\n})\nexport class SimplrProtectDirective {\n /** Prevent the native form submit while signals are collected (default true). */\n @Input() simplrPreventDefault = true;\n\n /** Emits the collected device + behavior signals on submit. */\n @Output() simplrSignals = new EventEmitter<CollectedSignals>();\n\n /** Emits if signal collection fails. */\n @Output() simplrError = new EventEmitter<unknown>();\n\n constructor(private readonly simplr: SimplrService) {}\n\n @HostListener(\"submit\", [\"$event\"])\n async onSubmit(event: Event): Promise<void> {\n if (this.simplrPreventDefault) {\n event.preventDefault();\n }\n try {\n const signals = await this.simplr.collect();\n this.simplrSignals.emit(signals);\n } catch (err) {\n this.simplrError.emit(err);\n }\n }\n}\n","import { Directive, Input, OnInit } from \"@angular/core\";\nimport { SimplrRumService } from \"../services/simplr-rum.service\";\n\n/**\n * `[simplrRumView]` — declaratively track a RUM view when the host element\n * initializes. The view name is the directive's bound value; an optional\n * attributes object can be supplied.\n *\n * ```html\n * <section [simplrRumView]=\"'Checkout'\" [simplrRumViewAttributes]=\"{ step: 2 }\"></section>\n * ```\n */\n@Directive({\n selector: \"[simplrRumView]\",\n standalone: true,\n})\nexport class SimplrRumViewDirective implements OnInit {\n /** The view name to report. */\n @Input(\"simplrRumView\") viewName = \"\";\n\n /** Optional attributes attached to the view event. */\n @Input() simplrRumViewAttributes?: Record<string, unknown>;\n\n constructor(private readonly rum: SimplrRumService) {}\n\n ngOnInit(): void {\n if (this.viewName) {\n this.rum.trackView(this.viewName, this.simplrRumViewAttributes);\n }\n }\n}\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { SimplrService } from \"../services/simplr.service\";\nimport type { CollectedSignals } from \"@simplr-ai/js\";\n\n/**\n * `<simplr-protected-form>` — a standalone form wrapper that collects Simplr\n * device + behavioral signals on submit and emits them via\n * `(submitWithSignals)`. Project your form fields as content.\n *\n * ```html\n * <simplr-protected-form (submitWithSignals)=\"submit($event)\">\n * <input name=\"email\" /> <button type=\"submit\">Pay</button>\n * </simplr-protected-form>\n * ```\n */\n@Component({\n selector: \"simplr-protected-form\",\n standalone: true,\n template: `\n <form (submit)=\"onSubmit($event)\">\n <ng-content></ng-content>\n </form>\n `,\n})\nexport class SimplrProtectedFormComponent {\n /** Prevent native submit while signals are collected (default true). */\n @Input() preventDefault = true;\n\n /** Emits the collected device + behavior signals together with the event. */\n @Output() submitWithSignals = new EventEmitter<{\n signals: CollectedSignals;\n event: Event;\n }>();\n\n /** Emits if signal collection fails. */\n @Output() collectError = new EventEmitter<unknown>();\n\n constructor(private readonly simplr: SimplrService) {}\n\n async onSubmit(event: Event): Promise<void> {\n if (this.preventDefault) {\n event.preventDefault();\n }\n try {\n const signals = await this.simplr.collect();\n this.submitWithSignals.emit({ signals, event });\n } catch (err) {\n this.collectError.emit(err);\n }\n }\n}\n","import {\n ErrorHandler,\n ModuleWithProviders,\n NgModule,\n type EnvironmentProviders,\n type Provider,\n makeEnvironmentProviders,\n} from \"@angular/core\";\nimport { SIMPLR_CONFIG, type SimplrConfig } from \"./tokens\";\nimport { SimplrService } from \"./services/simplr.service\";\nimport { SimplrFlagsService } from \"./services/simplr-flags.service\";\nimport { SimplrProfilesService } from \"./services/simplr-profiles.service\";\nimport { SimplrRumService } from \"./services/simplr-rum.service\";\nimport { SimplrAIService } from \"./services/simplr-ai.service\";\nimport { SimplrErrorHandler } from \"./services/simplr-error-handler\";\nimport { SimplrProtectDirective } from \"./directives/simplr-protect.directive\";\nimport { SimplrRumViewDirective } from \"./directives/simplr-rum-view.directive\";\nimport { SimplrProtectedFormComponent } from \"./directives/simplr-protected-form.component\";\n\n/** Extra options for {@link provideSimplr} / {@link SimplrModule.forRoot}. */\nexport interface ProvideSimplrOptions {\n /**\n * When true, registers {@link SimplrErrorHandler} as Angular's `ErrorHandler`\n * so uncaught errors are piped into RUM. Default false.\n */\n errorHandler?: boolean;\n}\n\nfunction buildProviders(config: SimplrConfig, options?: ProvideSimplrOptions): Provider[] {\n const providers: Provider[] = [\n { provide: SIMPLR_CONFIG, useValue: config },\n SimplrService,\n SimplrFlagsService,\n SimplrProfilesService,\n SimplrRumService,\n SimplrAIService,\n ];\n if (options?.errorHandler) {\n providers.push({ provide: ErrorHandler, useClass: SimplrErrorHandler });\n }\n return providers;\n}\n\n/**\n * Standalone provider for the Simplr Angular adapter. Use in `bootstrapApplication`:\n *\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideSimplr({ apiKey: \"pk_live_…\" })],\n * });\n * ```\n */\nexport function provideSimplr(\n config: SimplrConfig,\n options?: ProvideSimplrOptions,\n): EnvironmentProviders {\n return makeEnvironmentProviders(buildProviders(config, options));\n}\n\n/** Standalone declarables (directives + component) for ergonomic imports. */\nexport const SIMPLR_DIRECTIVES = [\n SimplrProtectDirective,\n SimplrRumViewDirective,\n SimplrProtectedFormComponent,\n] as const;\n\n/**\n * NgModule for module-based Angular apps. Import `SimplrModule.forRoot(config)`\n * once in your root module; the directives/component are re-exported for use in\n * templates.\n */\n@NgModule({\n imports: [\n SimplrProtectDirective,\n SimplrRumViewDirective,\n SimplrProtectedFormComponent,\n ],\n exports: [\n SimplrProtectDirective,\n SimplrRumViewDirective,\n SimplrProtectedFormComponent,\n ],\n})\nexport class SimplrModule {\n static forRoot(\n config: SimplrConfig,\n options?: ProvideSimplrOptions,\n ): ModuleWithProviders<SimplrModule> {\n return {\n ngModule: SimplrModule,\n providers: buildProviders(config, options),\n };\n }\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@simplr-ai/angular",
3
+ "version": "1.0.0",
4
+ "description": "Idiomatic Angular adapter for the Simplr platform — DI services, RxJS observables, directives and components over the @simplr-ai/js browser core (fraud, device fingerprint, behavioral biometrics, feature flags, profiles, RUM, AI delegation).",
5
+ "type": "module",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "sideEffects": false,
22
+ "scripts": {
23
+ "build": "tsup",
24
+ "dev": "tsup --watch",
25
+ "test": "vitest run",
26
+ "typecheck": "tsc --noEmit"
27
+ },
28
+ "keywords": [
29
+ "angular",
30
+ "fraud-detection",
31
+ "device-fingerprinting",
32
+ "behavioral-biometrics",
33
+ "feature-flags",
34
+ "rum",
35
+ "ai-delegation",
36
+ "simplr",
37
+ "rxjs"
38
+ ],
39
+ "author": "Simplr",
40
+ "license": "MIT",
41
+ "homepage": "https://docs.simplr.so/docs/sdks/angular",
42
+ "peerDependencies": {
43
+ "@angular/common": "^17.0.0 || ^18.0.0",
44
+ "@angular/core": "^17.0.0 || ^18.0.0",
45
+ "@simplr-ai/js": "1.1.0",
46
+ "rxjs": "^7.0.0"
47
+ },
48
+ "devDependencies": {
49
+ "@angular/common": "^18.2.0",
50
+ "@angular/compiler": "^18.2.0",
51
+ "@angular/core": "^18.2.0",
52
+ "@simplr-ai/js": "1.1.0",
53
+ "@swc/core": "^1.15.43",
54
+ "rxjs": "^7.8.1",
55
+ "tsup": "^8.0.1",
56
+ "typescript": "^5.4.5",
57
+ "vitest": "^1.6.0",
58
+ "zone.js": "^0.14.0"
59
+ }
60
+ }