@receiz/sdk 93.2.0 → 95.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.
package/README.md CHANGED
@@ -21,12 +21,19 @@ const receiz = createReceizClient({
21
21
 
22
22
  The SDK is convenience, not authority. It reads public API projections, sends delegated actions, validates developer manifests, and verifies webhook delivery signatures. Sealed artifacts, proof bundles, verified appends, ownership appends, and settlement ledger records remain the stronger source of truth.
23
23
 
24
+ Kai Klok is the proof object state machine. `kaiPulseEternal` is the pulse unit carried by that state machine. A complete Receiz proof object carries Kai; without its Kai coordinate it is not complete Receiz proof truth.
25
+
26
+ Receiz ID is the default account-continuity rail for everyday login. It does not replace PBI/passkey, email magic-link recovery, Receiz Key, Identity Record, Identity Seal, or OIDC/Connect. Those rails all preserve the same account when bound: PBI/passkey can create or recover a Receiz account, email can recover the account, Receiz identity artifacts can restore it locally, and OIDC/Connect can delegate API access after identity proof.
27
+
28
+ Receiz Key, Identity Record, and Identity Seal are Receiz identity primitives exposed through the SDK for developer apps. Their current account-state envelope is `receiz.account.state.v3`; it carries admitted account proof memory across profile, action ledger, calendar, wallet settlement, Sports vault/cards/appends/event proofs, and related entries. The SDK mirrors the same law for developer apps through local proof registers: admit verified truth once, persist it, and ask Receiz only for verified additions after the known head. Connect is delegated API access; it is not the identity proof root.
29
+
24
30
  Default integration order:
25
31
 
26
32
  1. Verify first, then project.
27
33
  2. Render the proof object or manifest as the user-facing truth.
28
34
  3. Append public proof, wallet, sports, or Connect additions after the known truth.
29
- 4. Never treat an SDK response as stronger than the sealed artifact, verified append, ownership append, or settlement primitive it projects.
35
+ 4. Order proof objects by Kai/Klok state; render Chronos only as display.
36
+ 5. Never treat an SDK response as stronger than the sealed artifact, verified append, ownership append, or settlement primitive it projects.
30
37
 
31
38
  ## Five-Minute Proof Object App
32
39
 
@@ -82,6 +89,43 @@ const snapshot = memory.snapshot();
82
89
 
83
90
  Use schemas for developer validation, projections for display-ready proof rows, and proof memory for first-admission-then-append-forever UX.
84
91
 
92
+ ## Receiz ID Account Creation And Recovery
93
+
94
+ Developers can let users create a fresh Receiz ID account, recover from a Receiz Key, or login with an Identity Record / Identity Seal image without inventing a parallel login model. Receiz ID is the default login path, but it does not replace the existing rails: PBI/passkey stays available for account creation, account recovery, and account signing; email magic-link stays available for recovery; OIDC/Connect stays available for delegated API access. The result is one account, not separate accounts for each rail.
95
+
96
+ ```ts
97
+ import {
98
+ buildReceizIdContinueRequest,
99
+ createReceizIdIdentity,
100
+ projectReceizIdentityAccount,
101
+ readReceizIdentityArtifact,
102
+ signReceizIdentityLoginProof,
103
+ } from "@receiz/sdk";
104
+
105
+ const identity = await createReceizIdIdentity({
106
+ username: "builder",
107
+ displayName: "Builder",
108
+ });
109
+
110
+ const keyFile = await readReceizIdentityArtifact(fileOrImageBytes);
111
+ const account = await projectReceizIdentityAccount(keyFile);
112
+
113
+ if (!account.portableStateVerified) throw new Error("identity proof failed");
114
+
115
+ const proof = await signReceizIdentityLoginProof({
116
+ keyFile,
117
+ challengeText: "your-app-login-challenge",
118
+ });
119
+
120
+ const receizPublication = await buildReceizIdContinueRequest(identity, {
121
+ next: "/profile",
122
+ });
123
+ ```
124
+
125
+ Use the local projection for first paint in your app. Send the continuation request to Receiz only when you need Receiz infrastructure to append global continuity or issue a Receiz session. Use Connect after proof login when your app needs delegated Receiz API access.
126
+
127
+ Full quickstart: `docs/identity-login-and-recovery.md`.
128
+
85
129
  ## Artifact Verification
86
130
 
87
131
  ```ts
@@ -0,0 +1,172 @@
1
+ export declare const RECEIZ_KEY_SCHEMA = "receiz.key.v1";
2
+ export declare const RECEIZ_KEY_NAME = "Receiz Key";
3
+ export declare const RECEIZ_ACCOUNT_STATE_SCHEMA = "receiz.account.state.v3";
4
+ export declare const RECEIZ_DEVICE_IDENTITY_SCHEMA = "receiz.device.identity.v1";
5
+ export declare const RECEIZ_IDENTITY_LOGIN_PROOF_SCHEMA = "receiz.identity.login_proof.v1";
6
+ export declare const RECEIZ_IDENTITY_ACCOUNT_PROJECTION_SCHEMA = "receiz.sdk.identity_account_projection.v1";
7
+ export declare const RECEIZ_IDENTITY_RECORD_KEY_CHUNK_KEY = "receiz.identity_record.keyfile.v1";
8
+ export type ReceizIdentityKeyAlgorithm = "Ed25519" | "P-256";
9
+ export type ReceizPortableStateProofMethod = "ed25519.jcs.v1" | "ecdsa-p256-sha256.jcs.v1";
10
+ export type ReceizKeyOwner = {
11
+ uid: string;
12
+ email: string | null;
13
+ username: string | null;
14
+ displayName: string | null;
15
+ };
16
+ export type ReceizPortableStateProof = {
17
+ method: ReceizPortableStateProofMethod;
18
+ digestSha256Hex: string;
19
+ signatureB64u: string;
20
+ signedAt: string;
21
+ };
22
+ export type ReceizPortableState = {
23
+ schema: string;
24
+ exportedAt: string;
25
+ snapshot: unknown;
26
+ proof: ReceizPortableStateProof | null;
27
+ };
28
+ export type ReceizKeyAttestation = {
29
+ pbiDecision: string;
30
+ pbiReceiptHash: string;
31
+ pbiChallengeId: string;
32
+ pbiRequestId: string | null;
33
+ attestedAt: string;
34
+ };
35
+ export type ReceizKeyFileV1 = {
36
+ schema: typeof RECEIZ_KEY_SCHEMA;
37
+ name: typeof RECEIZ_KEY_NAME;
38
+ version: 1;
39
+ issuedAt: string;
40
+ keyId: string;
41
+ alg: ReceizIdentityKeyAlgorithm;
42
+ owner: ReceizKeyOwner;
43
+ crypto: {
44
+ publicKeyRawB64u: string;
45
+ privateKeyPkcs8CiphertextB64u: string;
46
+ privateKeyPkcs8B64u?: string | null;
47
+ kdf: {
48
+ name: "PBKDF2-SHA256";
49
+ iterations: number;
50
+ saltB64u: string;
51
+ };
52
+ cipher: {
53
+ name: "AES-GCM-256";
54
+ ivB64u: string;
55
+ aad: string;
56
+ };
57
+ };
58
+ attestation: ReceizKeyAttestation | null;
59
+ portableState: ReceizPortableState | null;
60
+ };
61
+ export type ReceizKeyFile = ReceizKeyFileV1;
62
+ export type ReceizDeviceIdentity = {
63
+ schema: typeof RECEIZ_DEVICE_IDENTITY_SCHEMA;
64
+ createdAt: string;
65
+ updatedAt: string;
66
+ localUid: string;
67
+ username: string;
68
+ displayName: string;
69
+ deviceName: string | null;
70
+ keyFile: ReceizKeyFile;
71
+ };
72
+ export type ReceizIdIdentityOptions = {
73
+ username?: string | null | undefined;
74
+ displayName?: string | null | undefined;
75
+ deviceName?: string | null | undefined;
76
+ createdAt?: string | undefined;
77
+ passphrase?: string | undefined;
78
+ allowP256Fallback?: boolean | undefined;
79
+ pbkdf2Iterations?: number | undefined;
80
+ };
81
+ export type ReceizIdentityLoginProof = {
82
+ schema: typeof RECEIZ_IDENTITY_LOGIN_PROOF_SCHEMA;
83
+ keyId: string;
84
+ alg: ReceizIdentityKeyAlgorithm;
85
+ challengeB64Url: string;
86
+ signatureB64Url: string;
87
+ };
88
+ export type ReceizIdentityLoginProofInput = {
89
+ keyFile: ReceizKeyFile;
90
+ passphrase?: string | undefined;
91
+ challengeText?: string | undefined;
92
+ challengeB64Url?: string | undefined;
93
+ };
94
+ export type ReceizIdContinueRequest = {
95
+ keyId: string;
96
+ alg: ReceizIdentityKeyAlgorithm;
97
+ publicKeyRawB64u: string;
98
+ localUid: string;
99
+ username: string;
100
+ displayName: string;
101
+ deviceName: string | null;
102
+ createdAt: string;
103
+ challengeB64Url: string;
104
+ signatureB64Url: string;
105
+ next?: string;
106
+ };
107
+ export type ReceizIdContinueOptions = {
108
+ next?: string | undefined;
109
+ nowMs?: number | undefined;
110
+ nonceB64Url?: string | undefined;
111
+ passphrase?: string | undefined;
112
+ };
113
+ export type ReceizIdentityAccountProjection = {
114
+ schema: typeof RECEIZ_IDENTITY_ACCOUNT_PROJECTION_SCHEMA;
115
+ keyId: string;
116
+ alg: ReceizIdentityKeyAlgorithm;
117
+ owner: ReceizKeyOwner;
118
+ accountStateSchema: string | null;
119
+ portableStateVerified: boolean;
120
+ portableStateStatus: "verified" | "missing" | "invalid";
121
+ snapshot: unknown;
122
+ domains: {
123
+ profile: boolean;
124
+ actionLedger: boolean;
125
+ calendar: boolean;
126
+ wallet: boolean;
127
+ sports: boolean;
128
+ };
129
+ };
130
+ export declare function receizBase64UrlEncode(bytes: Uint8Array): string;
131
+ export declare function receizBase64UrlDecode(value: string): Uint8Array;
132
+ export declare function parseReceizIdentityArtifactText(text: string): ReceizKeyFileV1;
133
+ export declare function appendReceizIdentityArtifactTrailerToPng(pngBytes: Uint8Array, keyFile: ReceizKeyFile): Uint8Array;
134
+ export declare function readReceizIdentityArtifact(input: Blob | ArrayBuffer | Uint8Array | string): Promise<ReceizKeyFileV1>;
135
+ export declare function serializeReceizIdentityArtifact(keyFile: ReceizKeyFile): string;
136
+ export declare function deriveReceizIdentityKeyIdFromPublicKeyRawB64u(publicKeyRawB64u: string, alg?: ReceizIdentityKeyAlgorithm): Promise<string>;
137
+ export declare function createReceizIdentityKeyFile(args: {
138
+ passphrase?: string | undefined;
139
+ owner: {
140
+ uid: string;
141
+ email?: string | null;
142
+ username?: string | null;
143
+ displayName?: string | null;
144
+ };
145
+ portableState?: {
146
+ schema?: string;
147
+ snapshot: unknown;
148
+ } | null;
149
+ issuedAt?: string | undefined;
150
+ pbkdf2Iterations?: number | undefined;
151
+ allowP256Fallback?: boolean | undefined;
152
+ }): Promise<{
153
+ keyFile: ReceizKeyFileV1;
154
+ keyId: string;
155
+ publicKeyRawB64u: string;
156
+ alg: ReceizIdentityKeyAlgorithm;
157
+ }>;
158
+ export declare function createReceizIdIdentity(options?: ReceizIdIdentityOptions): Promise<ReceizDeviceIdentity>;
159
+ export declare function decryptReceizIdentityPrivateSigningKey(args: {
160
+ keyFile: ReceizKeyFile;
161
+ passphrase?: string | undefined;
162
+ }): Promise<CryptoKey>;
163
+ export declare function signReceizIdentityLoginProof(input: ReceizIdentityLoginProofInput): Promise<ReceizIdentityLoginProof>;
164
+ export declare function verifyReceizIdentityLoginProof(args: {
165
+ keyFile: ReceizKeyFile;
166
+ challengeB64Url: string;
167
+ signatureB64Url: string;
168
+ }): Promise<boolean>;
169
+ export declare function verifyReceizIdentityPortableStateProof(keyFileInput: ReceizKeyFile): Promise<"verified" | "missing" | "invalid">;
170
+ export declare function buildReceizIdContinueRequest(identity: ReceizDeviceIdentity, options?: ReceizIdContinueOptions): Promise<ReceizIdContinueRequest>;
171
+ export declare function projectReceizIdentityAccount(keyFileInput: ReceizKeyFile): Promise<ReceizIdentityAccountProjection>;
172
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}