@snap/camera-kit
Version:
Camera Kit Web
51 lines • 5.11 kB
TypeScript
import { StateMachine } from "@snap/state-management";
import type { RemoteConfiguration } from "../remote-configuration/remoteConfiguration";
import type { LegalPromptFactory } from "./legalPrompt";
declare const createLegalState: () => StateMachine<import("@snap/state-management").Action<"requestLegalPrompt", undefined> | import("@snap/state-management").Action<"accept", string> | import("@snap/state-management").Action<"reject", string>, import("@snap/state-management").State<"unknown", undefined> | import("@snap/state-management").State<"accepted", undefined> | import("@snap/state-management").State<"rejected", undefined>>;
export type LegalState = ReturnType<typeof createLegalState>;
/**
* We maintain the state of the user's acceptance of Snap's various legal documents. Other components may require that
* the legal state be "accepted" before proceeding (e.g. to apply a lens).
*
* On page load, the legal state starts as "unknown." If a request is made to determine the legal state, the following
* business logic is implemented:
*
* 1. Download remote COF config value containing the legal documents + a `disabled` field to optionally skip the legal
* requirement.
* 2. Check for a `lastAcceptedTosContentHash` stored in IndexedDB.
* 3. Prompt the user to accept/reject the legal documents.
*
* ┌────────────────────────────────────────────────────────┐
* │ COF config value includes "disabled: true" │
* └────────────────────────────────────────────────────────┘
* │
* │
* ┌────────No────────────┴────────────Yes──────────────────┐
* │ │
* ▼ │
* ┌────────────────────────────────────┐ ▼
* │"lastAcceptedTosContentHash" exists │ ┌────────────┐
* └────────────────────────────────────┘ │ Skip ToS │
* │ └────────────┘
* │ ▲
* ┌─────────────No───┴───────Yes────────────┐ │
* │ │ │
* │ │ │
* ▼ ▼ │
* ┌────────────┐ ┌────────────────────────────────────────┐ │
* │ Show ToS │ │ Hash of ToS content from COF matches │ │
* └────────────┘ │ "lastAcceptedTosContentHash" │ │
* ▲ └────────────────────────────────────────┘ │
* │ │ │
* │ │ │
* └──────────────────No─────────────────────┴───────────────────Yes───────────┘
*
* @internal
*/
export declare const legalStateFactory: {
(args_0: RemoteConfiguration, args_1: LegalPromptFactory): StateMachine<import("@snap/state-management").Action<"requestLegalPrompt", undefined> | import("@snap/state-management").Action<"accept", string> | import("@snap/state-management").Action<"reject", string>, import("@snap/state-management").State<"unknown", undefined> | import("@snap/state-management").State<"accepted", undefined> | import("@snap/state-management").State<"rejected", undefined>>;
token: "legalState";
dependencies: readonly ["remoteConfiguration", "legalPrompt"];
};
export {};
//# sourceMappingURL=legalState.d.ts.map