@solidus-network/sdk 0.3.0 → 0.6.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,37 @@
1
+ /**
2
+ * Chain self-description.
3
+ *
4
+ * Wraps the `solidus_chainInfo` JSON-RPC method so wallets, explorers,
5
+ * indexers, and listing aggregators can discover the chain id, native
6
+ * token metadata, and node version instead of hardcoding them.
7
+ */
8
+ import type { RpcClient } from './rpc.js';
9
+ /** Native token metadata (mirrors Rust `RpcNativeToken`). */
10
+ export interface NativeToken {
11
+ /** Display symbol — e.g. `"SLDS"`. Uppercase, no `$` prefix. */
12
+ symbol: string;
13
+ /** Display name — e.g. `"Solidus"`. */
14
+ name: string;
15
+ /** Decimal precision (`8` → `1 SLDS = 10^8` base units). */
16
+ decimals: number;
17
+ }
18
+ /** Chain self-description (mirrors Rust `RpcChainInfo`). */
19
+ export interface ChainInfo {
20
+ /** Unique chain identifier from genesis. */
21
+ chainId: string;
22
+ /** Native token metadata. */
23
+ nativeToken: NativeToken;
24
+ /** Hex-encoded genesis block hash, or `''` if no genesis block exists. */
25
+ genesisHash: string;
26
+ /** Height of the latest committed block. */
27
+ latestBlock: number;
28
+ /** Node software version. */
29
+ version: string;
30
+ }
31
+ /**
32
+ * Create the `getChainInfo` accessor bound to an RPC client. The returned
33
+ * function calls `solidus_chainInfo` and maps the snake_case wire format to
34
+ * the camelCase SDK shape.
35
+ */
36
+ export declare function createChainInfo(rpc: RpcClient): () => Promise<ChainInfo>;
37
+ //# sourceMappingURL=chainInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chainInfo.d.ts","sourceRoot":"","sources":["../../src/chain/chainInfo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,4DAA4D;AAC5D,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,WAAW,EAAE,WAAW,CAAA;IACxB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAA;CAChB;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAexE"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Create the `getChainInfo` accessor bound to an RPC client. The returned
3
+ * function calls `solidus_chainInfo` and maps the snake_case wire format to
4
+ * the camelCase SDK shape.
5
+ */
6
+ export function createChainInfo(rpc) {
7
+ return async function getChainInfo() {
8
+ const raw = await rpc.call('solidus_chainInfo', []);
9
+ return {
10
+ chainId: raw.chain_id,
11
+ nativeToken: {
12
+ symbol: raw.native_token.symbol,
13
+ name: raw.native_token.name,
14
+ decimals: raw.native_token.decimals,
15
+ },
16
+ genesisHash: raw.genesis_hash,
17
+ latestBlock: raw.latest_block,
18
+ version: raw.version,
19
+ };
20
+ };
21
+ }
22
+ //# sourceMappingURL=chainInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chainInfo.js","sourceRoot":"","sources":["../../src/chain/chainInfo.ts"],"names":[],"mappings":"AA0CA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAc;IAC5C,OAAO,KAAK,UAAU,YAAY;QAChC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAe,mBAAmB,EAAE,EAAE,CAAC,CAAA;QACjE,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,WAAW,EAAE;gBACX,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,MAAM;gBAC/B,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI;gBAC3B,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,QAAQ;aACpC;YACD,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAqH7C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;kBAElD,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;iBAmEtD,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;yBAyB5B,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;sBAc5C,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;EAQnE"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAsG7C,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;kBAElD,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;iBAoEtD,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;yBAyB5B,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;sBAc5C,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;EAQnE"}
@@ -1,4 +1,4 @@
1
- import { buildTransaction, getAddressFromKey, bytesToHex } from './transaction.js';
1
+ import { buildTransaction, getAddressFromKey, bytesToHex, pollReceipt, } from './transaction.js';
2
2
  import { blake3 } from '@noble/hashes/blake3';
3
3
  // ---------- helpers ----------
4
4
  /**
@@ -60,25 +60,12 @@ function recordToVC(record) {
60
60
  proof: {
61
61
  type: 'Ed25519Signature2020',
62
62
  created: new Date(record.issued_ms).toISOString(),
63
- verificationMethod: `${record.issuer_did}#key-1`,
63
+ verificationMethod: `${record.issuer_did}#key-0`,
64
64
  proofPurpose: 'assertionMethod',
65
65
  proofValue: record.hash, // On-chain, the proof is the hash itself
66
66
  },
67
67
  };
68
68
  }
69
- /**
70
- * Poll for a transaction receipt, retrying every 500ms for up to 10 seconds.
71
- */
72
- async function pollReceipt(rpc, txHash) {
73
- const maxAttempts = 20;
74
- for (let i = 0; i < maxAttempts; i++) {
75
- const receipt = await rpc.call('solidus_getReceipt', [txHash]);
76
- if (receipt)
77
- return receipt;
78
- await new Promise((resolve) => setTimeout(resolve, 500));
79
- }
80
- throw new Error(`Transaction ${txHash} not confirmed after 10 seconds`);
81
- }
82
69
  // ---------- factory ----------
83
70
  export function createChainCredentials(rpc, config) {
84
71
  return {
@@ -130,7 +117,7 @@ export function createChainCredentials(rpc, config) {
130
117
  proof: {
131
118
  type: 'Ed25519Signature2020',
132
119
  created: now.toISOString(),
133
- verificationMethod: `${params.issuerDid}#key-1`,
120
+ verificationMethod: `${params.issuerDid}#key-0`,
134
121
  proofPurpose: 'assertionMethod',
135
122
  proofValue: bytesToHex(payloadHash),
136
123
  },
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/chain/credentials.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@
8
8
  import type { DID, DIDDocument } from '@solidus-network/types';
9
9
  import type { RpcClient } from './rpc.js';
10
10
  import type { ChainConfig } from './index.js';
11
+ import { type ChainTransaction } from './transaction.js';
12
+ import type { RecoveryPolicy } from './recovery.js';
11
13
  /**
12
14
  * W3C DID Resolution result — preserves the deactivated state separately
13
15
  * from the document. Mirrors the shape defined in
@@ -30,8 +32,55 @@ export interface DIDResolutionResult {
30
32
  contentType: 'application/did+json';
31
33
  error?: 'notFound' | 'invalidDid';
32
34
  };
35
+ /** DID social-recovery state (sub-project #1/#2). `recovery_nonce` is what a guardian must bind
36
+ * its approval to (see `recoverySigningMessage`); `recovery_policy` is the current guardian set.
37
+ * Both omitted when the resolved DID has no recovery policy configured. */
38
+ recovery_policy?: RecoveryPolicy;
39
+ recovery_nonce?: number;
40
+ }
41
+ /**
42
+ * Options for {@link createChainDid}().buildCreate — produces a signed
43
+ * DidCreate transaction without submitting it.
44
+ *
45
+ * Defaults are designed so that the most common case ("I have a key, I
46
+ * want to register its DID") requires only `signerPrivateKey`.
47
+ */
48
+ export interface BuildDidCreateOptions {
49
+ /**
50
+ * Hex-encoded 32-byte Ed25519 private key that signs the transaction.
51
+ * The chain enforces `signer_pubkey == payload.public_key` (via the
52
+ * `PublicKeyMismatch` invariant), so this key MUST own the `publicKey`
53
+ * field below. If `publicKey` is omitted, it is derived from this key.
54
+ */
55
+ signerPrivateKey: string;
56
+ /**
57
+ * Hex-encoded 32-byte Ed25519 public key to register. Must match
58
+ * `signerPrivateKey`'s derived pubkey. Omit to use the signer's own
59
+ * pubkey — that is the typical case.
60
+ */
61
+ publicKey?: string;
62
+ /** Optional service endpoints baked into the DID document at creation. */
63
+ serviceEndpoints?: unknown[];
64
+ /**
65
+ * Override the nonce. Omit to fetch it via `solidus_getNonce`. The
66
+ * override is here for relay paths that already know the nonce (e.g.
67
+ * a frontend that read it just before signing).
68
+ */
69
+ nonce?: number;
33
70
  }
34
71
  export declare function createChainDid(rpc: RpcClient, config: ChainConfig): {
72
+ buildCreate: (opts: BuildDidCreateOptions) => Promise<ChainTransaction>;
73
+ submitCreate: (signedTx: ChainTransaction | string) => Promise<DID>;
74
+ /**
75
+ * Convenience wrapper for the case where the SDK's configured
76
+ * `signerPrivateKey` IS the owner of the public key being registered.
77
+ *
78
+ * Throws if the signer doesn't own `publicKey` — the old behavior of
79
+ * "sign with the shared signer, register someone else's key" was a
80
+ * bug (the chain rejects via `PublicKeyMismatch`); use
81
+ * {@link buildCreate} + {@link submitCreate} for the relay pattern
82
+ * (frontend signs locally, backend relays).
83
+ */
35
84
  create(publicKey: string): Promise<DID>;
36
85
  resolve(did: string): Promise<DIDDocument | null>;
37
86
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AA4C7C;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,mBAAmB,EAAE;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB;;;;4CAIoC;QACpC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,qBAAqB,EAAE;QACrB,WAAW,EAAE,sBAAsB,CAAA;QACnC,KAAK,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;KAClC,CAAA;CACF;AA4ED,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;sBAEtC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;iBA8C1B,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAUvD;;;;;;;;OAQG;6BAC4B,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;oBA+B9C,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/D;;;;;;;;;;;;;;;;;OAiBG;uBAEI,MAAM,iBACI,MAAM,aACV,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;EAmBnB"}
1
+ {"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAsB,MAAM,gBAAgB,CAAA;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAuCnD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,mBAAmB,EAAE;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB;;;;4CAIoC;QACpC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,qBAAqB,EAAE;QACrB,WAAW,EAAE,sBAAsB,CAAA;QACnC,KAAK,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;KAClC,CAAA;IACD;;gFAE4E;IAC5E,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAuDD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW;wBAU/B,qBAAqB,KAAG,OAAO,CAAC,gBAAgB,CAAC;6BA4C5C,gBAAgB,GAAG,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC;IAwD5E;;;;;;;;;OASG;sBACqB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;iBAgB1B,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAUvD;;;;;;;;OAQG;6BAC4B,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;oBAmC9C,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/D;;;;;;;;;;;;;;;;;OAiBG;uBAEI,MAAM,iBACI,MAAM,aACV,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;EAmBnB"}
package/dist/chain/did.js CHANGED
@@ -1,4 +1,5 @@
1
- import { buildTransaction, getAddressFromKey, addressFromPublicKey, hexToBytes, hexToArray, } from './transaction.js';
1
+ import { buildTransaction, getAddressFromKey, addressFromPublicKey, hexToBytes, hexToArray, bytesToHex, pollReceipt, } from './transaction.js';
2
+ import * as ed from '@noble/ed25519';
2
3
  import bs58 from 'bs58';
3
4
  // ---------- helpers ----------
4
5
  /**
@@ -8,19 +9,6 @@ import bs58 from 'bs58';
8
9
  function buildDidString(network, address) {
9
10
  return `did:solidus:${network}:${address}`;
10
11
  }
11
- /**
12
- * Poll for a transaction receipt, retrying every 500ms for up to 10 seconds.
13
- */
14
- async function pollReceipt(rpc, txHash) {
15
- const maxAttempts = 20; // 20 * 500ms = 10s
16
- for (let i = 0; i < maxAttempts; i++) {
17
- const receipt = await rpc.call('solidus_getReceipt', [txHash]);
18
- if (receipt)
19
- return receipt;
20
- await new Promise((resolve) => setTimeout(resolve, 500));
21
- }
22
- throw new Error(`Transaction ${txHash} not confirmed after 10 seconds`);
23
- }
24
12
  /**
25
13
  * Convert an RPC DID document to the W3C DIDDocument format expected
26
14
  * by the SolidusSDK interface.
@@ -59,45 +47,119 @@ function mapToW3CDIDDocument(doc) {
59
47
  updated: new Date(doc.updated_ms).toISOString(),
60
48
  };
61
49
  }
62
- // ---------- factory ----------
63
50
  export function createChainDid(rpc, config) {
51
+ /**
52
+ * Build a signed `DidCreate` transaction without submitting it.
53
+ *
54
+ * The signed tx is content-addressed and can be relayed by any party
55
+ * (e.g. a frontend signs locally, then POSTs the tx to a backend that
56
+ * relays via {@link submitCreate}). This split honors the chain's
57
+ * `PublicKeyMismatch` invariant: only the holder of `publicKey` can
58
+ * register the DID for that key.
59
+ */
60
+ async function buildCreate(opts) {
61
+ // 1. Derive signer pubkey + publicKey to register.
62
+ const signerPubBytes = await ed.getPublicKeyAsync(hexToBytes(opts.signerPrivateKey));
63
+ const signerPubHex = bytesToHex(signerPubBytes);
64
+ const publicKey = opts.publicKey ?? signerPubHex;
65
+ // 2. Enforce signer-owns-publicKey at the SDK boundary so the chain
66
+ // never has to. Failing here means the bug is in the caller.
67
+ if (publicKey.toLowerCase() !== signerPubHex.toLowerCase()) {
68
+ throw new Error(`did.buildCreate: signerPrivateKey does not own the supplied publicKey ` +
69
+ `(signer pubkey ${signerPubHex.slice(0, 16)}…, payload pubkey ${publicKey.slice(0, 16)}…). ` +
70
+ `The chain enforces "senders may only register DIDs they control" — ` +
71
+ `pass the user's own private key, or omit publicKey to register the signer's own DID.`);
72
+ }
73
+ // 3. Resolve nonce.
74
+ const senderAddress = addressFromPublicKey(signerPubBytes);
75
+ const nonce = opts.nonce ?? (await rpc.call('solidus_getNonce', [senderAddress]));
76
+ // 4. Build DidCreate payload (Rust serde tagged enum format).
77
+ const payload = {
78
+ DidCreate: {
79
+ public_key: hexToArray(publicKey),
80
+ service_endpoints: opts.serviceEndpoints ?? [],
81
+ },
82
+ };
83
+ // 5. Sign.
84
+ return buildTransaction(opts.signerPrivateKey, nonce, payload);
85
+ }
86
+ /**
87
+ * Submit a previously-built {@link ChainTransaction} (must wrap a
88
+ * `DidCreate` payload), poll its receipt, and return the DID descriptor.
89
+ *
90
+ * Accepts the tx as an object OR a stringified JSON payload (useful
91
+ * when relaying a tx that arrived as POST body).
92
+ *
93
+ * Defensively re-checks the signer-owns-pubkey invariant before
94
+ * submitting, so a malicious or buggy client can't tee up a tx the
95
+ * chain will reject — we fail fast with a clear error.
96
+ */
97
+ async function submitCreate(signedTx) {
98
+ const tx = typeof signedTx === 'string' ? JSON.parse(signedTx) : signedTx;
99
+ // Defensive: tx must be DidCreate + signer must own the registered pubkey.
100
+ const payload = tx.payload;
101
+ const payloadPubArr = payload?.DidCreate?.public_key;
102
+ if (!payloadPubArr || !Array.isArray(payloadPubArr) || payloadPubArr.length !== 32) {
103
+ throw new Error(`did.submitCreate: signed tx is not a DidCreate (or its public_key is malformed). ` +
104
+ `Use did.deactivate / did.setController for those operations.`);
105
+ }
106
+ if (!Array.isArray(tx.sender_pubkey) || tx.sender_pubkey.length !== 32) {
107
+ throw new Error(`did.submitCreate: signed tx has a malformed sender_pubkey`);
108
+ }
109
+ for (let i = 0; i < 32; i++) {
110
+ if (tx.sender_pubkey[i] !== payloadPubArr[i]) {
111
+ throw new Error(`did.submitCreate: tx signer does not own the public key in the DidCreate ` +
112
+ `payload (chain would reject with PublicKeyMismatch). Re-sign the tx with ` +
113
+ `the private key that owns the registered public key.`);
114
+ }
115
+ }
116
+ // Submit + poll.
117
+ const txJson = typeof signedTx === 'string' ? signedTx : JSON.stringify(tx);
118
+ const txHash = await rpc.call('solidus_sendTransaction', [txJson]);
119
+ const receipt = await pollReceipt(rpc, txHash);
120
+ if (!receipt.status.startsWith('success')) {
121
+ throw new Error(`DidCreate failed: ${receipt.status}`);
122
+ }
123
+ // The chain builds the DID from the signer's address (which equals
124
+ // the registered public key's address — we just enforced that).
125
+ const pubKeyBytes = Uint8Array.from(payloadPubArr);
126
+ const didAddress = addressFromPublicKey(pubKeyBytes);
127
+ const did = buildDidString(config.network, didAddress);
128
+ const doc = await rpc.call('solidus_didResolve', [did]);
129
+ const now = new Date().toISOString();
130
+ return {
131
+ id: did,
132
+ controller: did,
133
+ created: doc ? new Date(doc.created_ms).toISOString() : now,
134
+ updated: doc ? new Date(doc.updated_ms).toISOString() : now,
135
+ network: config.network,
136
+ };
137
+ }
64
138
  return {
139
+ buildCreate,
140
+ submitCreate,
141
+ /**
142
+ * Convenience wrapper for the case where the SDK's configured
143
+ * `signerPrivateKey` IS the owner of the public key being registered.
144
+ *
145
+ * Throws if the signer doesn't own `publicKey` — the old behavior of
146
+ * "sign with the shared signer, register someone else's key" was a
147
+ * bug (the chain rejects via `PublicKeyMismatch`); use
148
+ * {@link buildCreate} + {@link submitCreate} for the relay pattern
149
+ * (frontend signs locally, backend relays).
150
+ */
65
151
  async create(publicKey) {
66
- // 1. Derive sender address from the signing key
67
- const senderAddress = config.signerAddress ?? (await getAddressFromKey(config.signerPrivateKey));
68
- // 2. Get current nonce
69
- const nonce = await rpc.call('solidus_getNonce', [senderAddress]);
70
- // 3. Build DidCreate payload (Rust serde tagged enum format)
71
- const payload = {
72
- DidCreate: {
73
- public_key: hexToArray(publicKey),
74
- service_endpoints: [],
75
- },
76
- };
77
- // 4. Build and sign transaction
78
- const tx = await buildTransaction(config.signerPrivateKey, nonce, payload);
79
- // 5. Submit via RPC
80
- const txHash = await rpc.call('solidus_sendTransaction', [JSON.stringify(tx)]);
81
- // 6. Poll for receipt
82
- const receipt = await pollReceipt(rpc, txHash);
83
- if (!receipt.status.startsWith('success')) {
84
- throw new Error(`DidCreate failed: ${receipt.status}`);
152
+ const signerPubBytes = await ed.getPublicKeyAsync(hexToBytes(config.signerPrivateKey));
153
+ const signerPubHex = bytesToHex(signerPubBytes);
154
+ if (publicKey.toLowerCase() !== signerPubHex.toLowerCase()) {
155
+ throw new Error(`did.create: the SDK's configured signer does not own the supplied publicKey. ` +
156
+ `The chain enforces "senders may only register DIDs they control". ` +
157
+ `Either pass the signer's own pubkey (omit the arg to derive it), or use ` +
158
+ `did.buildCreate({signerPrivateKey: <user's key>, ...}) + did.submitCreate() ` +
159
+ `to relay a tx the user signed themselves.`);
85
160
  }
86
- // 7. Build DID string from the public key that was registered
87
- // The chain creates the DID using the public key's address
88
- const pubKeyBytes = hexToBytes(publicKey);
89
- const didAddress = addressFromPublicKey(pubKeyBytes);
90
- const did = buildDidString(config.network, didAddress);
91
- // 8. Resolve the created DID to get timestamps
92
- const doc = await rpc.call('solidus_didResolve', [did]);
93
- const now = new Date().toISOString();
94
- return {
95
- id: did,
96
- controller: did,
97
- created: doc ? new Date(doc.created_ms).toISOString() : now,
98
- updated: doc ? new Date(doc.updated_ms).toISOString() : now,
99
- network: config.network,
100
- };
161
+ const tx = await buildCreate({ signerPrivateKey: config.signerPrivateKey, publicKey });
162
+ return submitCreate(tx);
101
163
  },
102
164
  async resolve(did) {
103
165
  // BACKWARD COMPAT: returns null for deactivated DIDs. Use
@@ -147,6 +209,10 @@ export function createChainDid(rpc, config) {
147
209
  didResolutionMetadata: {
148
210
  contentType: 'application/did+json',
149
211
  },
212
+ // Surface the recovery policy + nonce (sub-project #1/#2) so callers can read the current
213
+ // nonce and bind a guardian approval to it. Omitted when the DID has no policy.
214
+ ...(doc.recovery_policy != null ? { recovery_policy: doc.recovery_policy } : {}),
215
+ ...(doc.recovery_nonce !== undefined ? { recovery_nonce: doc.recovery_nonce } : {}),
150
216
  };
151
217
  },
152
218
  async deactivate(did, signerKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/chain/did.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAA;IACxB,gDAAgD;IAChD,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;IAC9B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAQjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,gBAAgB,EAAE,MAAM,CAAA;IACxB,gDAAgD;IAChD,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;IAC9B,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CA6BjE"}
@@ -9,6 +9,9 @@ import { createChainDid } from './did.js';
9
9
  import { createChainCredentials } from './credentials.js';
10
10
  import { createChainAuth } from './auth.js';
11
11
  import { createChainBbs } from './bbs.js';
12
+ import { createChainInfo } from './chainInfo.js';
13
+ import { createChainTransfer } from './transfer.js';
14
+ import { pollReceipt } from './transaction.js';
12
15
  export function createChainClient(config) {
13
16
  const rpc = new RpcClient(config.rpcUrl);
14
17
  return {
@@ -16,6 +19,24 @@ export function createChainClient(config) {
16
19
  credentials: createChainCredentials(rpc, config),
17
20
  auth: createChainAuth(rpc, config),
18
21
  bbs: createChainBbs(rpc, config),
22
+ chain: {
23
+ transfer: createChainTransfer(rpc, config.network),
24
+ getBalance: async (address) => rpc.call('solidus_getBalance', [address]),
25
+ sendTransaction: async (signedTx) => {
26
+ const txHash = await rpc.call('solidus_sendTransaction', [JSON.stringify(signedTx)]);
27
+ const receipt = await pollReceipt(rpc, txHash);
28
+ if (!receipt.status.startsWith('success')) {
29
+ throw new Error(`Transaction failed: ${receipt.status}`);
30
+ }
31
+ return { txHash, status: receipt.status };
32
+ },
33
+ getNonce: async (address) => rpc.call('solidus_getNonce', [address]),
34
+ getRecoveryInfo: async (did) => {
35
+ const doc = await rpc.call('solidus_didResolve', [did]);
36
+ return { recoveryPolicy: doc?.recovery_policy ?? null, recoveryNonce: doc?.recovery_nonce ?? 0 };
37
+ },
38
+ },
39
+ getChainInfo: createChainInfo(rpc),
19
40
  };
20
41
  }
21
42
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAezC,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACxC,OAAO;QACL,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;QAChC,WAAW,EAAE,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC;QAChD,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;QAClC,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;KACjC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/chain/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAqB,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAcjE,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACxC,OAAO;QACL,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;QAChC,WAAW,EAAE,sBAAsB,CAAC,GAAG,EAAE,MAAM,CAAC;QAChD,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC;QAClC,GAAG,EAAE,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC;QAChC,KAAK,EAAE;YACL,QAAQ,EAAE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;YAClD,UAAU,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAS,oBAAoB,EAAE,CAAC,OAAO,CAAC,CAAC;YACxF,eAAe,EAAE,KAAK,EAAE,QAAiB,EAAE,EAAE;gBAC3C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAS,yBAAyB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC5F,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;gBAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1C,MAAM,IAAI,KAAK,CAAC,uBAAuB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC1D,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;YAC3C,CAAC;YACD,QAAQ,EAAE,KAAK,EAAE,OAAe,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAS,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC;YACpF,eAAe,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;gBACrC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAGhB,oBAAoB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBACtC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,IAAI,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,IAAI,CAAC,EAAE,CAAA;YAClG,CAAC;SACF;QACD,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC;KACnC,CAAA;AACH,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { type ChainTransaction } from './transaction.js';
2
+ export interface GuardianApproval {
3
+ guardian_did: string;
4
+ signature: number[];
5
+ }
6
+ export interface RecoveryPolicy {
7
+ guardians: string[];
8
+ threshold: number;
9
+ delay_blocks: number;
10
+ }
11
+ /**
12
+ * The 32-byte BLAKE3 message a guardian signs to approve a recovery. Mirrors the Rust
13
+ * `recovery_signing_message`: BLAKE3( "solidus.did.recover.v1" ‖ (network.len() as u32 LE) ‖ network
14
+ * ‖ (subject_did.len() as u32 LE) ‖ subject_did ‖ new_public_key[32] ‖ recovery_nonce u64 LE ).
15
+ */
16
+ export declare function recoverySigningMessage(network: string, subjectDid: string, newPublicKey: Uint8Array, recoveryNonce: number | bigint): Uint8Array;
17
+ /**
18
+ * Sign the recovery message as a guardian. Returns the 64-byte Ed25519 signature as a number[],
19
+ * ready to drop into a `GuardianApproval`. The guardian signs the 32-byte hash directly (matching
20
+ * the Rust executor, which recomputes the same hash and verifies against the guardian's on-chain key).
21
+ */
22
+ export declare function signAsGuardian(guardianPrivateKey: string | Uint8Array, params: {
23
+ network: string;
24
+ subjectDid: string;
25
+ newPublicKey: Uint8Array;
26
+ recoveryNonce: number | bigint;
27
+ }): Promise<number[]>;
28
+ /**
29
+ * Build a signed `DidRecover` transaction. `signerPrivateKey` is the NEW key — the chain enforces
30
+ * `sender_pubkey == new_public_key`, so this throws if the supplied `newPublicKey` is not the
31
+ * signer's own public key (mirroring that guard before a doomed submit).
32
+ */
33
+ export declare function buildRecover(opts: {
34
+ signerPrivateKey: string;
35
+ subjectDid: string;
36
+ newPublicKey: Uint8Array;
37
+ approvals: GuardianApproval[];
38
+ nonce: number;
39
+ }): Promise<ChainTransaction>;
40
+ /** Relay a signed `DidRecover` tx and poll its receipt. Mirrors `did.submitCreate`. */
41
+ export declare function submitRecover(rpc: {
42
+ call<T>(method: string, params: unknown[]): Promise<T>;
43
+ }, signedTx: ChainTransaction): Promise<void>;
44
+ /**
45
+ * Build a signed `DidUpdate` that sets the DID's recovery policy (a k-of-n guardian set). The signer
46
+ * must currently control the DID. Patch key order = Rust field order: guardians, threshold, delay_blocks.
47
+ */
48
+ export declare function buildSetRecoveryPolicy(opts: {
49
+ signerPrivateKey: string;
50
+ did: string;
51
+ policy: RecoveryPolicy;
52
+ nonce: number;
53
+ }): Promise<ChainTransaction>;
54
+ //# sourceMappingURL=recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/chain/recovery.ts"],"names":[],"mappings":"AAYA,OAAO,EAA6C,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnG,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB;AAoBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,UAAU,EACxB,aAAa,EAAE,MAAM,GAAG,MAAM,GAC7B,UAAU,CAaZ;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,kBAAkB,EAAE,MAAM,GAAG,UAAU,EACvC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACxG,OAAO,CAAC,MAAM,EAAE,CAAC,CAKnB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,UAAU,CAAA;IACxB,SAAS,EAAE,gBAAgB,EAAE,CAAA;IAC7B,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAe5B;AAED,uFAAuF;AACvF,wBAAsB,aAAa,CACjC,GAAG,EAAE;IAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,EAC/D,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,cAAc,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgB5B"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * DID social recovery — SDK surface (sub-project #2).
3
+ *
4
+ * Byte-for-byte compatible with the Rust protocol primitive (sub-project #1): the recovery signing
5
+ * message and the `DidRecover` / `SetRecoveryPolicy` payload JSON must match the Rust exactly, or a
6
+ * guardian signature built here will not verify on chain. Parity is locked by shared test vectors
7
+ * generated from Rust (see recovery.test.ts; vectors from solidus-txns commit 21377537).
8
+ */
9
+ import { blake3 } from '@noble/hashes/blake3';
10
+ import * as ed from '@noble/ed25519';
11
+ // Importing transaction.ts also runs its `ed.etc.sha512Sync = …` side-effect, so @noble/ed25519 is
12
+ // configured for both this module and any consumer that only imports recovery.
13
+ import { buildTransaction, hexToBytes, pollReceipt } from './transaction.js';
14
+ const RECOVER_DOMAIN_SEP = new TextEncoder().encode('solidus.did.recover.v1');
15
+ function u32le(n) {
16
+ const b = new Uint8Array(4);
17
+ new DataView(b.buffer).setUint32(0, n, true);
18
+ return b;
19
+ }
20
+ function u64le(n) {
21
+ const b = new Uint8Array(8);
22
+ new DataView(b.buffer).setBigUint64(0, BigInt(n), true);
23
+ return b;
24
+ }
25
+ function bytesEqual(a, b) {
26
+ if (a.length !== b.length)
27
+ return false;
28
+ for (let i = 0; i < a.length; i++)
29
+ if (a[i] !== b[i])
30
+ return false;
31
+ return true;
32
+ }
33
+ /**
34
+ * The 32-byte BLAKE3 message a guardian signs to approve a recovery. Mirrors the Rust
35
+ * `recovery_signing_message`: BLAKE3( "solidus.did.recover.v1" ‖ (network.len() as u32 LE) ‖ network
36
+ * ‖ (subject_did.len() as u32 LE) ‖ subject_did ‖ new_public_key[32] ‖ recovery_nonce u64 LE ).
37
+ */
38
+ export function recoverySigningMessage(network, subjectDid, newPublicKey, recoveryNonce) {
39
+ if (newPublicKey.length !== 32)
40
+ throw new Error('newPublicKey must be 32 bytes');
41
+ const net = new TextEncoder().encode(network);
42
+ const sub = new TextEncoder().encode(subjectDid);
43
+ const parts = [RECOVER_DOMAIN_SEP, u32le(net.length), net, u32le(sub.length), sub, newPublicKey, u64le(recoveryNonce)];
44
+ const total = parts.reduce((n, p) => n + p.length, 0);
45
+ const buf = new Uint8Array(total);
46
+ let off = 0;
47
+ for (const p of parts) {
48
+ buf.set(p, off);
49
+ off += p.length;
50
+ }
51
+ return blake3(buf);
52
+ }
53
+ /**
54
+ * Sign the recovery message as a guardian. Returns the 64-byte Ed25519 signature as a number[],
55
+ * ready to drop into a `GuardianApproval`. The guardian signs the 32-byte hash directly (matching
56
+ * the Rust executor, which recomputes the same hash and verifies against the guardian's on-chain key).
57
+ */
58
+ export async function signAsGuardian(guardianPrivateKey, params) {
59
+ const sk = typeof guardianPrivateKey === 'string' ? hexToBytes(guardianPrivateKey) : guardianPrivateKey;
60
+ const msg = recoverySigningMessage(params.network, params.subjectDid, params.newPublicKey, params.recoveryNonce);
61
+ const sig = await ed.signAsync(msg, sk);
62
+ return Array.from(sig);
63
+ }
64
+ /**
65
+ * Build a signed `DidRecover` transaction. `signerPrivateKey` is the NEW key — the chain enforces
66
+ * `sender_pubkey == new_public_key`, so this throws if the supplied `newPublicKey` is not the
67
+ * signer's own public key (mirroring that guard before a doomed submit).
68
+ */
69
+ export async function buildRecover(opts) {
70
+ if (opts.newPublicKey.length !== 32)
71
+ throw new Error('newPublicKey must be 32 bytes');
72
+ const signerPub = await ed.getPublicKeyAsync(hexToBytes(opts.signerPrivateKey));
73
+ if (!bytesEqual(signerPub, opts.newPublicKey)) {
74
+ throw new Error('buildRecover: newPublicKey must equal the signer public key (the recovery envelope sender == the new key)');
75
+ }
76
+ // Key order = Rust struct-field order: did, new_public_key, approvals (locked by the parity test).
77
+ const payload = {
78
+ DidRecover: {
79
+ did: opts.subjectDid,
80
+ new_public_key: Array.from(opts.newPublicKey),
81
+ approvals: opts.approvals,
82
+ },
83
+ };
84
+ return buildTransaction(opts.signerPrivateKey, opts.nonce, payload);
85
+ }
86
+ /** Relay a signed `DidRecover` tx and poll its receipt. Mirrors `did.submitCreate`. */
87
+ export async function submitRecover(rpc, signedTx) {
88
+ const txHash = await rpc.call('solidus_sendTransaction', [JSON.stringify(signedTx)]);
89
+ const receipt = await pollReceipt(rpc, txHash);
90
+ if (!receipt.status.startsWith('success')) {
91
+ throw new Error(`DidRecover failed: ${receipt.status}`);
92
+ }
93
+ }
94
+ /**
95
+ * Build a signed `DidUpdate` that sets the DID's recovery policy (a k-of-n guardian set). The signer
96
+ * must currently control the DID. Patch key order = Rust field order: guardians, threshold, delay_blocks.
97
+ */
98
+ export async function buildSetRecoveryPolicy(opts) {
99
+ const payload = {
100
+ DidUpdate: {
101
+ did: opts.did,
102
+ patches: [
103
+ {
104
+ SetRecoveryPolicy: {
105
+ guardians: opts.policy.guardians,
106
+ threshold: opts.policy.threshold,
107
+ delay_blocks: opts.policy.delay_blocks,
108
+ },
109
+ },
110
+ ],
111
+ },
112
+ };
113
+ return buildTransaction(opts.signerPrivateKey, opts.nonce, payload);
114
+ }
115
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/chain/recovery.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,34 @@ export interface ChainTransaction {
4
4
  payload: unknown;
5
5
  signature: number[];
6
6
  }
7
+ /**
8
+ * Shape of `solidus_getReceipt` responses. Exported so relay paths (e.g.
9
+ * `did.submitCreate`) can inspect the receipt before mapping it back to
10
+ * the caller-facing return type.
11
+ */
12
+ export interface RpcReceipt {
13
+ tx_hash: string;
14
+ status: string;
15
+ block_height: number;
16
+ fee_paid: number;
17
+ events: Array<{
18
+ type: string;
19
+ [key: string]: unknown;
20
+ }>;
21
+ }
22
+ /**
23
+ * Poll `solidus_getReceipt` until the receipt appears, retrying every
24
+ * 500ms for up to 10 seconds. Throws if the receipt does not arrive in
25
+ * that window — the chain finalizes well inside this budget on healthy
26
+ * testnets.
27
+ *
28
+ * Extracted from `chain/did.ts` and `chain/credentials.ts` (2026-05-19),
29
+ * which each had an identical private copy. Lives here so any future
30
+ * "build + submit + poll" relay primitive can share it.
31
+ */
32
+ export declare function pollReceipt(rpc: {
33
+ call<T>(method: string, params: unknown[]): Promise<T>;
34
+ }, txHash: string): Promise<RpcReceipt>;
7
35
  /**
8
36
  * Build and sign a transaction for the Solidus chain.
9
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,gBAAgB,CAAC,CAuB3B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAIlE;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACxD;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE;IAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,EAC/D,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,gBAAgB,CAAC,CAuB3B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAIlE;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD"}
@@ -15,6 +15,26 @@ import { blake3 } from '@noble/hashes/blake3';
15
15
  import bs58 from 'bs58';
16
16
  // Configure ed25519 v2 to use sha512 for sync operations
17
17
  ed.etc.sha512Sync = (...m) => sha512(ed.etc.concatBytes(...m));
18
+ /**
19
+ * Poll `solidus_getReceipt` until the receipt appears, retrying every
20
+ * 500ms for up to 10 seconds. Throws if the receipt does not arrive in
21
+ * that window — the chain finalizes well inside this budget on healthy
22
+ * testnets.
23
+ *
24
+ * Extracted from `chain/did.ts` and `chain/credentials.ts` (2026-05-19),
25
+ * which each had an identical private copy. Lives here so any future
26
+ * "build + submit + poll" relay primitive can share it.
27
+ */
28
+ export async function pollReceipt(rpc, txHash) {
29
+ const maxAttempts = 20; // 20 * 500ms = 10s
30
+ for (let i = 0; i < maxAttempts; i++) {
31
+ const receipt = await rpc.call('solidus_getReceipt', [txHash]);
32
+ if (receipt)
33
+ return receipt;
34
+ await new Promise((resolve) => setTimeout(resolve, 500));
35
+ }
36
+ throw new Error(`Transaction ${txHash} not confirmed after 10 seconds`);
37
+ }
18
38
  /**
19
39
  * Build and sign a transaction for the Solidus chain.
20
40
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/chain/transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Chain-backed token transfer primitive.
3
+ *
4
+ * Exposed because relayers and onboarding paths need to seed new
5
+ * accounts with a small amount of native token before those accounts
6
+ * can pay their first tx fee. Without this, a freshly-generated client
7
+ * key can't submit its own DidCreate (the chain charges a fee on every
8
+ * tx, and a brand-new account has zero balance).
9
+ *
10
+ * Higher-level surfaces like `did.buildCreate`/`did.submitCreate` use
11
+ * this as a building block when called via a "fund + relay" wrapper.
12
+ */
13
+ import type { RpcClient } from './rpc.js';
14
+ import { type RpcReceipt } from './transaction.js';
15
+ export interface TransferOptions {
16
+ /** Hex-encoded 32-byte Ed25519 private key of the sender. */
17
+ signerPrivateKey: string;
18
+ /** Base58 recipient address (20-byte BLAKE3-truncated pubkey). */
19
+ toAddress: string;
20
+ /** Amount in base units (smallest unit of the native token). */
21
+ amount: number;
22
+ /** Optional nonce override; fetched via `solidus_getNonce` when omitted. */
23
+ nonce?: number;
24
+ }
25
+ export declare function createChainTransfer(rpc: RpcClient, network: string): (opts: TransferOptions) => Promise<RpcReceipt>;
26
+ //# sourceMappingURL=transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/chain/transfer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEjF,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAA;IACxB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,IAOlC,MAAM,eAAe,KAAG,OAAO,CAAC,UAAU,CAAC,CA6C3E"}
@@ -0,0 +1,47 @@
1
+ import bs58 from 'bs58';
2
+ import { buildTransaction, pollReceipt } from './transaction.js';
3
+ export function createChainTransfer(rpc, network) {
4
+ /**
5
+ * Submit a `Transfer` transaction, poll its receipt, and return it.
6
+ * Throws on a failed receipt. The signer's address is derived from
7
+ * `signerPrivateKey`; the recipient is a base58 address (the same
8
+ * format `addressFromPublicKey` returns).
9
+ */
10
+ return async function transfer(opts) {
11
+ const { signerPrivateKey, toAddress, amount } = opts;
12
+ // Decode the base58 address to a 20-byte array — the Rust chain expects
13
+ // `to: [u8; 20]` as a JSON number array in the Transfer payload.
14
+ const toBytes = bs58.decode(toAddress);
15
+ if (toBytes.length !== 20) {
16
+ throw new Error(`chain.transfer: toAddress must decode to 20 bytes (got ${toBytes.length}); pass the base58 address, not the public key`);
17
+ }
18
+ const { getAddressFromKey } = await import('./transaction.js');
19
+ const senderAddress = await getAddressFromKey(signerPrivateKey);
20
+ // Identity/value separation (interim convention — see
21
+ // .claude/plans/2026-06-11-did-payment-unlinkability.md): the SDK never
22
+ // signs a value Transfer from a DID/identity address. If the signer's
23
+ // address has a DID registered on chain, refuse — value must move with a
24
+ // separate payment account so that resolving a DID never exposes payment
25
+ // history. Relayer/sponsor funding accounts are not DIDs, so they pass.
26
+ // The protocol-level decouple that makes this guard redundant is roadmapped
27
+ // in .claude/plans/2026-06-26-did-value-account-decoupling.md.
28
+ const senderDid = `did:solidus:${network}:${senderAddress}`;
29
+ const existingDid = await rpc.call('solidus_didResolve', [senderDid]);
30
+ if (existingDid != null) {
31
+ throw new Error(`chain.transfer: refusing to sign a Transfer from identity address ${senderAddress} — ` +
32
+ `it has a DID registered. Move value with a separate payment account ` +
33
+ `(identity and value must stay unlinkable).`);
34
+ }
35
+ // Resolve nonce.
36
+ const nonce = opts.nonce ?? (await rpc.call('solidus_getNonce', [senderAddress]));
37
+ const payload = { Transfer: { to: Array.from(toBytes), amount } };
38
+ const tx = await buildTransaction(signerPrivateKey, nonce, payload);
39
+ const txHash = await rpc.call('solidus_sendTransaction', [JSON.stringify(tx)]);
40
+ const receipt = await pollReceipt(rpc, txHash);
41
+ if (!receipt.status.startsWith('success')) {
42
+ throw new Error(`Transfer failed: ${receipt.status}`);
43
+ }
44
+ return receipt;
45
+ };
46
+ }
47
+ //# sourceMappingURL=transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/chain/transfer.ts"],"names":[],"mappings":"AAaA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAmB,MAAM,kBAAkB,CAAA;AAajF,MAAM,UAAU,mBAAmB,CAAC,GAAc,EAAE,OAAe;IACjE;;;;;OAKG;IACH,OAAO,KAAK,UAAU,QAAQ,CAAC,IAAqB;QAClD,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACpD,wEAAwE;QACxE,iEAAiE;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,0DAA0D,OAAO,CAAC,MAAM,gDAAgD,CACzH,CAAA;QACH,CAAC;QAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC9D,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;QAE/D,sDAAsD;QACtD,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,yEAAyE;QACzE,wEAAwE;QACxE,4EAA4E;QAC5E,+DAA+D;QAC/D,MAAM,SAAS,GAAG,eAAe,OAAO,IAAI,aAAa,EAAE,CAAA;QAC3D,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAU,oBAAoB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;QAC9E,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,qEAAqE,aAAa,KAAK;gBACrF,sEAAsE;gBACtE,4CAA4C,CAC/C,CAAA;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAS,kBAAkB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QAEzF,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;QACjE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAS,yBAAyB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACtF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,16 +1,54 @@
1
1
  import type { DID, DIDDocument, VerifiableCredential, IssueCredentialParams, VerificationResult, AuthResult } from '@solidus-network/types';
2
+ import type { ChainTransaction } from './chain/transaction.js';
3
+ export type { ChainTransaction } from './chain/transaction.js';
4
+ export { addressFromPublicKey, getAddressFromKey } from './chain/transaction.js';
2
5
  import type { BbsDisclosedMessage, BbsCredentialProofResult } from './chain/bbs.js';
6
+ import type { ChainInfo } from './chain/chainInfo.js';
3
7
  export type { DID, DIDDocument, VerifiableCredential, IssueCredentialParams, VerificationResult, AuthResult, };
4
8
  export { runMigrations, closeConnection } from './stub/db.js';
5
9
  export { generateKeypair, decodePublicKey } from './stub/crypto.js';
6
10
  export type { ChainConfig } from './chain/index.js';
7
11
  export { createChainClient } from './chain/index.js';
12
+ export { recoverySigningMessage, signAsGuardian, buildRecover, submitRecover, buildSetRecoveryPolicy, } from './chain/recovery.js';
13
+ export type { GuardianApproval, RecoveryPolicy } from './chain/recovery.js';
8
14
  export type { BbsDisclosedMessage, BbsCredentialProofResult, BbsCredentialRecord, } from './chain/bbs.js';
9
15
  export { utf8ToHex, toHex } from './chain/bbs.js';
16
+ export type { ChainInfo, NativeToken } from './chain/chainInfo.js';
10
17
  export { issueSdJwtVc, verifySdJwtVc, presentSdJwtVc, createStatusListJwt, ed25519PublicKeyToJwk, ed25519PublicKeyFromJwk, } from './sdjwt/index.js';
11
18
  export type { IssueSdJwtVcParams, IssuedSdJwtVc, VerifySdJwtVcParams, PresentSdJwtVcParams, PresentationResult, CreateStatusListJwtParams, Ed25519Jwk, VerificationResult as SdJwtVerificationResult, } from './sdjwt/index.js';
12
19
  export interface SolidusSDK {
13
20
  did: {
21
+ /**
22
+ * Build (and sign) a `DidCreate` transaction without submitting it.
23
+ * Returns a content-addressed signed tx that can be relayed by any
24
+ * party — typically the user signs locally and a backend submits.
25
+ *
26
+ * The chain enforces `signer_pubkey == payload.public_key`
27
+ * (PublicKeyMismatch invariant), so `signerPrivateKey` MUST own the
28
+ * registered public key. When `publicKey` is omitted it is derived
29
+ * from the signing key — the common case.
30
+ *
31
+ * Available in chain mode; stub-mode implementation is minimal but
32
+ * shape-compatible (callers can write tests once and run in either).
33
+ */
34
+ buildCreate(opts: {
35
+ signerPrivateKey: string;
36
+ publicKey?: string;
37
+ serviceEndpoints?: unknown[];
38
+ nonce?: number;
39
+ }): Promise<ChainTransaction>;
40
+ /**
41
+ * Submit a previously-built `DidCreate` transaction, poll its
42
+ * receipt, and return the DID descriptor. Accepts either the
43
+ * `ChainTransaction` object or a stringified JSON tx (the common
44
+ * shape for relay paths where the tx arrived as an HTTP body).
45
+ */
46
+ submitCreate(signedTx: ChainTransaction | string): Promise<DID>;
47
+ /**
48
+ * Convenience wrapper for the case where the SDK's configured
49
+ * signer owns the public key being registered. Throws otherwise —
50
+ * use `buildCreate` + `submitCreate` for the relay pattern.
51
+ */
14
52
  create(publicKey: string): Promise<DID>;
15
53
  resolve(did: string): Promise<DIDDocument | null>;
16
54
  deactivate(did: string, signerKey: string): Promise<void>;
@@ -58,6 +96,65 @@ export interface SolidusSDK {
58
96
  disclosedMessages: BbsDisclosedMessage[];
59
97
  }): Promise<BbsCredentialProofResult>;
60
98
  };
99
+ /**
100
+ * Low-level chain primitives. Used by relayer / onboarding paths that
101
+ * need to seed new accounts with native token before they can pay
102
+ * their first tx fee, or perform plain transfers outside of DID and
103
+ * credential semantics. Available only in chain mode — `undefined` in
104
+ * stub mode.
105
+ */
106
+ chain?: {
107
+ /**
108
+ * Submit a `Transfer` transaction and wait for its receipt. Throws
109
+ * on a failed receipt. `toAddress` is a base58 address (the format
110
+ * `addressFromPublicKey` returns), not a public key.
111
+ */
112
+ transfer(opts: {
113
+ signerPrivateKey: string;
114
+ toAddress: string;
115
+ amount: number;
116
+ nonce?: number;
117
+ }): Promise<{
118
+ tx_hash: string;
119
+ status: string;
120
+ block_height: number;
121
+ fee_paid: number;
122
+ events: Array<{
123
+ type: string;
124
+ [key: string]: unknown;
125
+ }>;
126
+ }>;
127
+ /** Balance (in base units) for the given base58 address. */
128
+ getBalance(address: string): Promise<number>;
129
+ /**
130
+ * Relay an ALREADY-SIGNED transaction (the caller signed it client-side) and wait for its
131
+ * receipt. Throws on a failed receipt. Used by relayer paths where the backend must NOT hold
132
+ * the user's key — e.g. DID recovery-policy set: the user signs in the browser, the backend
133
+ * only forwards the signed tx (and may sponsor-fund the sender first).
134
+ */
135
+ sendTransaction(signedTx: unknown): Promise<{
136
+ txHash: string;
137
+ status: string;
138
+ }>;
139
+ /** The account's current nonce (next expected tx index) for the given base58 address. */
140
+ getNonce(address: string): Promise<number>;
141
+ /** The DID's on-chain recovery policy (guardian set + threshold) and the per-DID recovery nonce
142
+ * that guardian approvals must bind to. `recoveryPolicy` is null until a policy is set. */
143
+ getRecoveryInfo(did: string): Promise<{
144
+ recoveryPolicy: {
145
+ guardians: string[];
146
+ threshold: number;
147
+ delay_blocks: number;
148
+ } | null;
149
+ recoveryNonce: number;
150
+ }>;
151
+ };
152
+ /**
153
+ * Fetch chain metadata (id, native token, genesis hash, latest height,
154
+ * node version) via the `solidus_chainInfo` RPC method. Available only in
155
+ * chain mode (testnet/mainnet) — `undefined` in stub mode.
156
+ */
157
+ getChainInfo?(): Promise<ChainInfo>;
61
158
  }
62
159
  export interface SolidusConfig {
63
160
  mode: 'stub' | 'testnet' | 'mainnet';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,11 +1,15 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { didCreate, didResolve, didDeactivate } from './stub/did.js';
2
+ import { didCreate, didResolve, didDeactivate, didBuildCreate, didSubmitCreate } from './stub/did.js';
3
3
  import { credentialsIssue, credentialsVerify, credentialsRevoke, credentialsQuery } from './stub/credentials.js';
4
4
  import { getSql } from './stub/db.js';
5
5
  import { createChainClient } from './chain/index.js';
6
+ export { addressFromPublicKey, getAddressFromKey } from './chain/transaction.js';
6
7
  export { runMigrations, closeConnection } from './stub/db.js';
7
8
  export { generateKeypair, decodePublicKey } from './stub/crypto.js';
8
9
  export { createChainClient } from './chain/index.js';
10
+ // DID social recovery (sub-projects #1/#2) — set a guardian policy, sign a guardian approval, and
11
+ // build/relay a DidRecover tx, byte-compatible with the Rust protocol primitive.
12
+ export { recoverySigningMessage, signAsGuardian, buildRecover, submitRecover, buildSetRecoveryPolicy, } from './chain/recovery.js';
9
13
  export { utf8ToHex, toHex } from './chain/bbs.js';
10
14
  // SD-JWT VC (selective-disclosure JWT, VC profile) — required for
11
15
  // EUDI Wallet interop.
@@ -15,6 +19,8 @@ export { issueSdJwtVc, verifySdJwtVc, presentSdJwtVc, createStatusListJwt, ed255
15
19
  function createStubSdk() {
16
20
  return {
17
21
  did: {
22
+ buildCreate: didBuildCreate,
23
+ submitCreate: didSubmitCreate,
18
24
  create: didCreate,
19
25
  resolve: didResolve,
20
26
  deactivate: didDeactivate,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAChH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAoB,MAAM,kBAAkB,CAAA;AAWtE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAMpD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEjD,kEAAkE;AAClE,uBAAuB;AACvB,8CAA8C;AAC9C,wDAAwD;AACxD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AAmEzB,SAAS,aAAa;IACpB,OAAO;QACL,GAAG,EAAE;YACH,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,aAAa;SAC1B;QACD,WAAW,EAAE;YACX,KAAK,EAAE,gBAAgB;YACvB,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,iBAAiB;YACzB,KAAK,EAAE,gBAAgB;SACxB;QACD,IAAI,EAAE;YACJ,KAAK,CAAC,eAAe,CAAC,MAAc;gBAClC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;gBACpB,MAAM,SAAS,GAAG,UAAU,EAAE,CAAA;gBAC9B,MAAM,GAAG,CAAA,2DAA2D,SAAS,KAAK,MAAM,GAAG,CAAA;gBAC3F,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,KAAK,CAAC,kBAAkB,CACtB,GAAW,EACX,UAAkB,EAClB,OAAe;gBAEf,qDAAqD;gBACrD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;YACpC,CAAC;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAqB;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,CAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAgD,IAAI,MAAM,CAAC,CAAA;IAEvH,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,uBAAuB,CAAA;YACzF,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;YACpF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;YAC3F,CAAC;YACD,OAAO,iBAAiB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QAClF,CAAC;QACD,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,aAAa,EAAE,CAAA;IAC1B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ function rowToVC(row) {
13
13
  proof: {
14
14
  type: 'Ed25519Signature2020',
15
15
  created: row.issued_at.toISOString(),
16
- verificationMethod: `${row.issuer_did}#key-1`,
16
+ verificationMethod: `${row.issuer_did}#key-0`,
17
17
  proofPurpose: 'assertionMethod',
18
18
  proofValue: row.proof_value,
19
19
  },
@@ -1,5 +1,24 @@
1
1
  import type { DID, DIDDocument } from '@solidus-network/types';
2
+ import type { ChainTransaction } from '../chain/transaction.js';
2
3
  export declare function didCreate(publicKeyHex: string): Promise<DID>;
3
4
  export declare function didResolve(did: string): Promise<DIDDocument | null>;
4
5
  export declare function didDeactivate(did: string, _signerKey: string): Promise<void>;
6
+ /**
7
+ * Stub-mode `buildCreate`. Produces a shape-compatible `ChainTransaction`
8
+ * envelope so callers can write a single relay-style code path that runs
9
+ * unchanged in stub and chain modes. The "signature" is meaningless in
10
+ * stub mode — there is no chain to verify against — but the payload is
11
+ * faithful so that `submitCreate` can extract `public_key`.
12
+ */
13
+ export declare function didBuildCreate(opts: {
14
+ signerPrivateKey: string;
15
+ publicKey?: string;
16
+ serviceEndpoints?: unknown[];
17
+ nonce?: number;
18
+ }): Promise<ChainTransaction>;
19
+ /**
20
+ * Stub-mode `submitCreate`. Parses the publicKey out of the supplied tx
21
+ * and delegates to the existing `didCreate` to insert the row.
22
+ */
23
+ export declare function didSubmitCreate(signedTx: ChainTransaction | string): Promise<DID>;
5
24
  //# sourceMappingURL=did.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAYtD,wBAAsB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAWlE;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgCzE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF"}
1
+ {"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAY/D,wBAAsB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAWlE;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAgCzE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAID;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0B5B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CASvF"}
package/dist/stub/did.js CHANGED
@@ -21,7 +21,7 @@ export async function didResolve(did) {
21
21
  if (rows.length === 0)
22
22
  return null;
23
23
  const row = rows[0];
24
- const vmId = `${row.did}#key-1`;
24
+ const vmId = `${row.did}#key-0`;
25
25
  return {
26
26
  '@context': [
27
27
  'https://www.w3.org/ns/did/v1',
@@ -49,4 +49,58 @@ export async function didDeactivate(did, _signerKey) {
49
49
  UPDATE stub_dids SET deactivated = true, updated_at = now() WHERE did = ${did}
50
50
  `;
51
51
  }
52
+ // ---------- buildCreate / submitCreate (stub) ----------
53
+ /**
54
+ * Stub-mode `buildCreate`. Produces a shape-compatible `ChainTransaction`
55
+ * envelope so callers can write a single relay-style code path that runs
56
+ * unchanged in stub and chain modes. The "signature" is meaningless in
57
+ * stub mode — there is no chain to verify against — but the payload is
58
+ * faithful so that `submitCreate` can extract `public_key`.
59
+ */
60
+ export async function didBuildCreate(opts) {
61
+ if (!opts.signerPrivateKey || opts.signerPrivateKey.length !== 64) {
62
+ throw new Error('didBuildCreate (stub): signerPrivateKey must be a 64-char hex string');
63
+ }
64
+ // Derive the signer pubkey from the privkey hex deterministically. We
65
+ // do NOT run real ed25519 in the stub — for the stub the "pubkey" is
66
+ // simply a marker derived by reversing the privkey bytes. This is
67
+ // sufficient for shape compatibility; chain mode does real signing.
68
+ const signerPubBytes = hexToBytes(opts.signerPrivateKey).reverse();
69
+ const publicKey = opts.publicKey ?? Buffer.from(signerPubBytes).toString('hex');
70
+ if (publicKey.toLowerCase() !== Buffer.from(signerPubBytes).toString('hex').toLowerCase()) {
71
+ throw new Error(`didBuildCreate (stub): signerPrivateKey does not own publicKey (the SDK enforces this invariant in both modes)`);
72
+ }
73
+ return {
74
+ sender_pubkey: Array.from(signerPubBytes),
75
+ nonce: opts.nonce ?? 0,
76
+ payload: {
77
+ DidCreate: {
78
+ public_key: Array.from(hexToBytes(publicKey)),
79
+ service_endpoints: opts.serviceEndpoints ?? [],
80
+ },
81
+ },
82
+ signature: Array(64).fill(0),
83
+ };
84
+ }
85
+ /**
86
+ * Stub-mode `submitCreate`. Parses the publicKey out of the supplied tx
87
+ * and delegates to the existing `didCreate` to insert the row.
88
+ */
89
+ export async function didSubmitCreate(signedTx) {
90
+ const tx = typeof signedTx === 'string' ? JSON.parse(signedTx) : signedTx;
91
+ const payload = tx.payload;
92
+ const payloadPub = payload?.DidCreate?.public_key;
93
+ if (!Array.isArray(payloadPub) || payloadPub.length !== 32) {
94
+ throw new Error('didSubmitCreate (stub): tx is not a DidCreate with a 32-byte public_key');
95
+ }
96
+ const publicKeyHex = Buffer.from(Uint8Array.from(payloadPub)).toString('hex');
97
+ return didCreate(publicKeyHex);
98
+ }
99
+ function hexToBytes(hex) {
100
+ const out = new Uint8Array(hex.length / 2);
101
+ for (let i = 0; i < hex.length; i += 2) {
102
+ out[i / 2] = parseInt(hex.substring(i, i + 2), 16);
103
+ }
104
+ return out;
105
+ }
52
106
  //# sourceMappingURL=did.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAU7C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,YAAoB;IAClD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,GAAG,oBAAoB,UAAU,EAAE,EAAE,CAAA;IAC7C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAEpC,MAAM,GAAG,CAAA;;cAEG,EAAE,KAAK,YAAY,KAAK,EAAE;GACrC,CAAA;IAED,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAU;;;kBAGhB,GAAG;GAClB,CAAA;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;IACpB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAA;IAE/B,OAAO;QACL,UAAU,EAAE;YACV,8BAA8B;YAC9B,kDAAkD;SACnD;QACD,EAAE,EAAE,GAAG,CAAC,GAAG;QACX,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,kBAAkB,EAAE;YAClB;gBACE,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,4BAA4B;gBAClC,UAAU,EAAE,GAAG,CAAC,GAAG;gBACnB,kBAAkB,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;aACpD;SACF;QACD,cAAc,EAAE,CAAC,IAAI,CAAC;QACtB,eAAe,EAAE,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE;KACtC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,UAAkB;IACjE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,MAAM,GAAG,CAAA;8EACmE,GAAG;GAC9E,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/stub/did.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidus-network/sdk",
3
- "version": "0.3.0",
3
+ "version": "0.6.0",
4
4
  "description": "Solidus Network SDK — DID resolution, verifiable credential issuance and verification, SD-JWT VC (EUDI-compatible), and on-chain queries via JSON-RPC.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -17,8 +17,8 @@
17
17
  "@noble/hashes": "^1.5.0",
18
18
  "@sd-jwt/sd-jwt-vc": "^0.19.0",
19
19
  "@sd-jwt/types": "^0.19.0",
20
- "@solidus-network/auth": "0.3.0",
21
- "@solidus-network/types": "0.3.0",
20
+ "@solidus-network/auth": "0.6.0",
21
+ "@solidus-network/types": "0.6.0",
22
22
  "bs58": "^6.0.0",
23
23
  "postgres": "^3.4.4"
24
24
  },