phygital-token-mcp 0.3.0 → 0.5.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 +1 -2
- package/dist/index.js +6 -43
- package/dist/index.js.map +1 -1
- package/dist/lib/docs.d.ts +1 -1
- package/dist/lib/docs.js +1 -8
- package/dist/lib/docs.js.map +1 -1
- package/dist/lib/instructions.d.ts +0 -2
- package/dist/lib/instructions.js +2 -3
- package/dist/lib/instructions.js.map +1 -1
- package/dist/lib/paths.d.ts +1 -2
- package/dist/lib/paths.js +1 -15
- package/dist/lib/paths.js.map +1 -1
- package/dist/lib/sdk-surface.d.ts +3 -5
- package/dist/lib/sdk-surface.js +4 -23
- package/dist/lib/sdk-surface.js.map +1 -1
- package/dist/lib/verification.d.ts +1 -1
- package/dist/lib/verification.js +13 -40
- package/dist/lib/verification.js.map +1 -1
- package/docs/building-on-phygital/overview.md +4 -4
- package/docs/glossary.md +1 -0
- package/docs/sdk/surface-area.md +7 -16
- package/docs/verification/methods.md +15 -11
- package/docs/verification/overview.md +4 -4
- package/docs/verification/verify-asset-composable.md +2 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[Model Context Protocol](https://modelcontextprotocol.io) server for the phygital-token Solana program, TypeScript SDK, and Rust client.
|
|
4
4
|
|
|
5
|
-
**Docs, schema reference, and offline planning only** — no live RPC or on-chain calls. Use [`phygital-token-sdk`](https://www.npmjs.com/package/phygital-token-sdk) in your app for
|
|
5
|
+
**Docs, schema reference, and offline planning only** — no live RPC or on-chain calls. Use [`phygital-token-sdk`](https://www.npmjs.com/package/phygital-token-sdk) in your app for verification, asset fetch, and transaction building.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -28,7 +28,6 @@ Requires **Node.js 20+**. See [`cursor-mcp.example.json`](./cursor-mcp.example.j
|
|
|
28
28
|
| **Docs** | `search_docs` (omit query to list all), `read_doc` |
|
|
29
29
|
| **Verification** | `recommend_verification` (omit useCase for the decision tree), `plan_verify_asset` |
|
|
30
30
|
| **Planning** | `plan_create_mint`, `plan_mint_token`, `plan_transfer`, `plan_remove_ownership`, `find_asset_pda` |
|
|
31
|
-
| **Gating** | `explain_gating`, `gating_recipe` (omit id to list) |
|
|
32
31
|
| **SDK** | `list_sdk_exports` |
|
|
33
32
|
|
|
34
33
|
All tools are offline and read-only.
|
package/dist/index.js
CHANGED
|
@@ -5,11 +5,10 @@ import { findAssetPda, parseSecp256r1Pubkey } from "phygital-token-sdk";
|
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { listDocs, readDocById, searchDocs } from "./lib/docs.js";
|
|
7
7
|
import { jsonResult, textResult } from "./lib/format.js";
|
|
8
|
-
import { GATING_FILTER_SCHEMA, GATING_OVERVIEW, GATING_RECIPES, GATING_TIER_EXAMPLE, getGatingRecipe, } from "./lib/gating-json.js";
|
|
9
8
|
import { parseAssetType, planCreateMint, planMintToken, planRemoveOwnership, planTransfer, planVerifyAsset, } from "./lib/instructions.js";
|
|
10
9
|
import { SDK_SURFACE } from "./lib/sdk-surface.js";
|
|
11
10
|
import { VERIFICATION_DECISION_TREE, listVerificationUseCases, recommendVerification, } from "./lib/verification.js";
|
|
12
|
-
const VERSION = "0.
|
|
11
|
+
const VERSION = "0.5.0";
|
|
13
12
|
const SERVER_INSTRUCTIONS = [
|
|
14
13
|
"MCP server for the phygital-token Solana program, TypeScript SDK, and Rust client.",
|
|
15
14
|
"Docs, schema reference, and offline planning only — no live on-chain RPC calls.",
|
|
@@ -17,13 +16,12 @@ const SERVER_INSTRUCTIONS = [
|
|
|
17
16
|
"Routing:",
|
|
18
17
|
"- Which verification method to use → recommend_verification",
|
|
19
18
|
"- On-chain verify_asset (standalone, sysvar inspect, or CPI) → plan_verify_asset",
|
|
20
|
-
"- Gating rules → explain_gating, then gating_recipe",
|
|
21
19
|
"- Mint / transfer / forfeiture flows → plan_create_mint, plan_mint_token, plan_transfer, plan_remove_ownership",
|
|
22
20
|
"- SDK export map → list_sdk_exports",
|
|
23
21
|
"- Anything else → search_docs, then read_doc",
|
|
24
22
|
"",
|
|
25
|
-
"Live
|
|
26
|
-
"(
|
|
23
|
+
"Live asset fetch and auth: call phygital-token-sdk directly in your app",
|
|
24
|
+
"(verifyResponse, fetchAssetDisplayInfo, etc.).",
|
|
27
25
|
].join("\n");
|
|
28
26
|
/** Every tool here is offline and side-effect free. */
|
|
29
27
|
const READ_ONLY = {
|
|
@@ -34,7 +32,7 @@ const READ_ONLY = {
|
|
|
34
32
|
};
|
|
35
33
|
function registerTools(server) {
|
|
36
34
|
server.registerTool("search_docs", {
|
|
37
|
-
description: "Search phygital-token docs (
|
|
35
|
+
description: "Search phygital-token docs (verification, building-on-phygital, SDK surface, glossary). Omit query to list every doc id.",
|
|
38
36
|
inputSchema: {
|
|
39
37
|
query: z
|
|
40
38
|
.string()
|
|
@@ -57,7 +55,7 @@ function registerTools(server) {
|
|
|
57
55
|
inputSchema: {
|
|
58
56
|
docId: z
|
|
59
57
|
.string()
|
|
60
|
-
.describe('Document id, e.g. "
|
|
58
|
+
.describe('Document id, e.g. "verification:methods" or "sdk:surface-area"'),
|
|
61
59
|
},
|
|
62
60
|
annotations: { title: "Read doc", ...READ_ONLY },
|
|
63
61
|
}, async ({ docId }) => textResult(await readDocById(docId)));
|
|
@@ -70,12 +68,10 @@ function registerTools(server) {
|
|
|
70
68
|
"deep_link_from_prior_scan",
|
|
71
69
|
"offline_identification",
|
|
72
70
|
"login_ui_only",
|
|
73
|
-
"vault_gated_experience",
|
|
74
71
|
"onchain_standalone_verify",
|
|
75
72
|
"onchain_inspect_verify_asset",
|
|
76
73
|
"onchain_cpi_verify_asset",
|
|
77
74
|
"transfer_ownership",
|
|
78
|
-
"wallet_holdings_gate",
|
|
79
75
|
"native_mobile_app",
|
|
80
76
|
])
|
|
81
77
|
.optional()
|
|
@@ -126,17 +122,12 @@ function registerTools(server) {
|
|
|
126
122
|
.describe("Base64url-encoded secp256r1 public key for the new asset"),
|
|
127
123
|
mint: z.string().describe("Design mint address"),
|
|
128
124
|
assetType: z.enum(["Lockable", "Transferable"]).describe("Asset transfer lock behavior"),
|
|
129
|
-
credentialId: z
|
|
130
|
-
.string()
|
|
131
|
-
.optional()
|
|
132
|
-
.describe("Base64url passkey credential id (echoed in the plan output)"),
|
|
133
125
|
},
|
|
134
126
|
annotations: { title: "Plan mint_token", ...READ_ONLY },
|
|
135
|
-
}, async ({ assetPublicKey, mint, assetType
|
|
127
|
+
}, async ({ assetPublicKey, mint, assetType }) => jsonResult(await planMintToken({
|
|
136
128
|
assetPublicKey,
|
|
137
129
|
mint,
|
|
138
130
|
assetType: parseAssetType(assetType),
|
|
139
|
-
credentialId,
|
|
140
131
|
})));
|
|
141
132
|
server.registerTool("plan_transfer", {
|
|
142
133
|
description: "Plan a passkey-authorized transfer (offline): flow steps, derived accounts, and challenge formula.",
|
|
@@ -179,34 +170,6 @@ function registerTools(server) {
|
|
|
179
170
|
const assetPda = await findAssetPda(parseSecp256r1Pubkey(assetPublicKey));
|
|
180
171
|
return jsonResult({ assetPublicKey, assetPda });
|
|
181
172
|
});
|
|
182
|
-
server.registerTool("explain_gating", {
|
|
183
|
-
description: "Gating mental model plus the GatingFilter JSON schema and a tier example: dimensions, evaluation flow, aggregations, same-asset vs wallet-wide pitfalls.",
|
|
184
|
-
inputSchema: {},
|
|
185
|
-
annotations: { title: "Explain gating", ...READ_ONLY },
|
|
186
|
-
}, async () => jsonResult({
|
|
187
|
-
...GATING_OVERVIEW,
|
|
188
|
-
filterSchema: GATING_FILTER_SCHEMA,
|
|
189
|
-
tierExample: GATING_TIER_EXAMPLE,
|
|
190
|
-
}));
|
|
191
|
-
server.registerTool("gating_recipe", {
|
|
192
|
-
description: "Copy-paste gating recipes (filter trees, tiers, footguns) for evaluateAssetGating. Omit recipeId to list them.",
|
|
193
|
-
inputSchema: {
|
|
194
|
-
recipeId: z.string().optional().describe("Recipe id. Omit to list all recipes."),
|
|
195
|
-
},
|
|
196
|
-
annotations: { title: "Gating recipe", ...READ_ONLY },
|
|
197
|
-
}, async ({ recipeId }) => {
|
|
198
|
-
if (!recipeId) {
|
|
199
|
-
return jsonResult({
|
|
200
|
-
recipes: GATING_RECIPES.map(({ id, title, description, footgun }) => ({
|
|
201
|
-
id,
|
|
202
|
-
title,
|
|
203
|
-
description,
|
|
204
|
-
footgun: footgun ?? false,
|
|
205
|
-
})),
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
return jsonResult(getGatingRecipe(recipeId));
|
|
209
|
-
});
|
|
210
173
|
server.registerTool("list_sdk_exports", {
|
|
211
174
|
description: "Map of the phygital-token TypeScript SDK exports and Rust client CPI types, grouped by flow.",
|
|
212
175
|
inputSchema: {},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/docs.d.ts
CHANGED
package/dist/lib/docs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readdir, readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { GLOSSARY_PATH, MCP_DOCS_DIR, pathExists,
|
|
3
|
+
import { GLOSSARY_PATH, MCP_DOCS_DIR, pathExists, resolveSdkReadmePath, } from "./paths.js";
|
|
4
4
|
async function collectMarkdownFiles(dir, category, prefix = "") {
|
|
5
5
|
const entries = [];
|
|
6
6
|
const items = await readdir(dir, { withFileTypes: true });
|
|
@@ -26,13 +26,6 @@ async function collectMarkdownFiles(dir, category, prefix = "") {
|
|
|
26
26
|
}
|
|
27
27
|
export async function listDocs() {
|
|
28
28
|
const docs = [];
|
|
29
|
-
const sdkDocsDir = await resolveSdkDocsDir();
|
|
30
|
-
if (sdkDocsDir) {
|
|
31
|
-
const gatingDir = path.join(sdkDocsDir, "gating");
|
|
32
|
-
if (await pathExists(gatingDir)) {
|
|
33
|
-
docs.push(...(await collectMarkdownFiles(gatingDir, "gating")));
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
29
|
if (await pathExists(MCP_DOCS_DIR)) {
|
|
37
30
|
const verificationDir = path.join(MCP_DOCS_DIR, "verification");
|
|
38
31
|
const buildingDir = path.join(MCP_DOCS_DIR, "building-on-phygital");
|
package/dist/lib/docs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/lib/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/lib/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,6 @@ export declare function planMintToken(input: {
|
|
|
19
19
|
assetPublicKey: string;
|
|
20
20
|
mint: string;
|
|
21
21
|
assetType: "Lockable" | "Transferable";
|
|
22
|
-
credentialId?: string;
|
|
23
22
|
}): Promise<{
|
|
24
23
|
instruction: string;
|
|
25
24
|
sdk: string;
|
|
@@ -38,7 +37,6 @@ export declare function planMintToken(input: {
|
|
|
38
37
|
}[];
|
|
39
38
|
requiredInputs: {
|
|
40
39
|
secp256r1Pubkey: string;
|
|
41
|
-
credentialId: string;
|
|
42
40
|
assetType: AssetType;
|
|
43
41
|
};
|
|
44
42
|
notes: string[];
|
package/dist/lib/instructions.js
CHANGED
|
@@ -60,7 +60,6 @@ export async function planMintToken(input) {
|
|
|
60
60
|
],
|
|
61
61
|
requiredInputs: {
|
|
62
62
|
secp256r1Pubkey: input.assetPublicKey,
|
|
63
|
-
credentialId: input.credentialId ?? "(base64url, 64 bytes when decoded)",
|
|
64
63
|
assetType,
|
|
65
64
|
},
|
|
66
65
|
notes: [
|
|
@@ -182,7 +181,7 @@ export async function planVerifyAsset(input) {
|
|
|
182
181
|
buildArgs: "buildVerifyAssetArgs",
|
|
183
182
|
complete: "completeVerifyAsset",
|
|
184
183
|
instruction: "getVerifyAssetInstruction",
|
|
185
|
-
offChainAuthOnly: "
|
|
184
|
+
offChainAuthOnly: "startAuthentication (client) + verifyResponse (server); does NOT submit verify_asset",
|
|
186
185
|
},
|
|
187
186
|
message: {
|
|
188
187
|
utf8: input.message,
|
|
@@ -216,7 +215,7 @@ export async function planVerifyAsset(input) {
|
|
|
216
215
|
clientDataJson: "Uint8Array",
|
|
217
216
|
},
|
|
218
217
|
notes: [
|
|
219
|
-
"
|
|
218
|
+
"startAuthentication + verifyResponse is off-chain only — it does not submit verify_asset. Verify on your server.",
|
|
220
219
|
"Pattern A: client includes verify_asset; your program inspects instructions sysvar.",
|
|
221
220
|
"Pattern B: client uses buildVerifyAssetArgs; your program CPIs verify_asset.",
|
|
222
221
|
"verify_asset updates asset.last_transfer_slot; slot must be strictly increasing.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/lib/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,SAAS,EACT,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,MAAM,0BAA0B,GAAG,OAAO,CACxC,6CAA6C,CAC9C,CAAC;AACF,MAAM,gCAAgC,GAAG,OAAO,CAC9C,8CAA8C,CAC/C,CAAC;AACF,MAAM,6BAA6B,GAAG,OAAO,CAC3C,8CAA8C,CAC/C,CAAC;AAEF,KAAK,UAAU,0BAA0B,CACvC,KAAc,EACd,IAAa,EACb,YAAqB;IAErB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,wBAAwB,CAAC;QAC3C,cAAc,EAAE,gCAAgC;QAChD,KAAK,EAAE;YACL,iBAAiB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;YACjC,iBAAiB,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;YACxC,iBAAiB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;SACjC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,OAAO;QACL,WAAW,EAAE,aAAa;QAC1B,GAAG,EAAE,6BAA6B;QAClC,QAAQ,EAAE,MAAM;QAChB,eAAe,EAAE;YACf,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE;YACzD,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,sCAAsC,EAAE;YAC/D,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,0CAA0C,EAAE;YAChF,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kDAAkD,EAAE;SAC3E;QACD,gBAAgB,EAAE;YAChB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,2CAA2C,EAAE;SACzE;QACD,KAAK,EAAE;YACL,kEAAkE;YAClE,wDAAwD;SACzD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/lib/instructions.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/paths.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ export declare const MCP_DOCS_DIR: string;
|
|
|
2
2
|
export declare const GLOSSARY_PATH: string;
|
|
3
3
|
/** Monorepo root when developing in-tree; override with PHYGITAL_TOKEN_REPO_ROOT. */
|
|
4
4
|
export declare function resolveRepoRoot(): string;
|
|
5
|
-
/** SDK
|
|
6
|
-
export declare function resolveSdkDocsDir(): Promise<string | undefined>;
|
|
5
|
+
/** SDK README from the installed npm package, or monorepo fallback. */
|
|
7
6
|
export declare function resolveSdkReadmePath(): Promise<string | undefined>;
|
|
8
7
|
export declare function pathExists(filePath: string): Promise<boolean>;
|
package/dist/lib/paths.js
CHANGED
|
@@ -22,21 +22,7 @@ function resolveSdkPackageRoot() {
|
|
|
22
22
|
return undefined;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
/** SDK
|
|
26
|
-
export async function resolveSdkDocsDir() {
|
|
27
|
-
const sdkRoot = resolveSdkPackageRoot();
|
|
28
|
-
if (sdkRoot) {
|
|
29
|
-
const docsDir = path.join(sdkRoot, "docs");
|
|
30
|
-
if (await pathExists(docsDir)) {
|
|
31
|
-
return docsDir;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const monorepoDocs = path.join(resolveRepoRoot(), "clients/js/phygital-token/docs");
|
|
35
|
-
if (await pathExists(monorepoDocs)) {
|
|
36
|
-
return monorepoDocs;
|
|
37
|
-
}
|
|
38
|
-
return undefined;
|
|
39
|
-
}
|
|
25
|
+
/** SDK README from the installed npm package, or monorepo fallback. */
|
|
40
26
|
export async function resolveSdkReadmePath() {
|
|
41
27
|
const sdkRoot = resolveSdkPackageRoot();
|
|
42
28
|
if (sdkRoot) {
|
package/dist/lib/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,OAAO,CACR,CAAC;AAEF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAEpE,qFAAqF;AACrF,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,qBAAqB;IAC5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,OAAO,CACR,CAAC;AAEF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAE5D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAEpE,qFAAqF;AACrF,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,qBAAqB;IAC5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACnD,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAC9B,eAAe,EAAE,EACjB,qCAAqC,CACtC,CAAC;IACF,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export declare const SDK_SURFACE: {
|
|
2
|
-
readonly mint: readonly ["buildCreateMintInstructions", "buildMintTokenInstructions", "parseSecp256r1Pubkey", "
|
|
2
|
+
readonly mint: readonly ["buildCreateMintInstructions", "buildMintTokenInstructions", "parseSecp256r1Pubkey", "validateMetadataFields"];
|
|
3
3
|
readonly transfer: readonly ["beginTransfer", "authenticatePasskeyForTransfer", "completeTransfer"];
|
|
4
4
|
readonly removeOwnership: readonly ["getRemoveOwnershipInstructionAsync"];
|
|
5
5
|
readonly verifyAssetComposable: readonly ["beginVerifyAsset", "authenticatePasskeyForVerifyAsset", "buildVerifyAssetArgs", "completeVerifyAsset"];
|
|
6
|
-
readonly verification: readonly ["verifyDynamicUrl", "verifyDynamicUrlWithoutCounterCheck", "
|
|
6
|
+
readonly verification: readonly ["verifyDynamicUrl", "verifyDynamicUrlWithoutCounterCheck", "startAuthentication", "verifyResponse"];
|
|
7
7
|
readonly onChainComposition: {
|
|
8
8
|
readonly patternA_inspect: {
|
|
9
9
|
readonly client: readonly ["beginVerifyAsset", "completeVerifyAsset"];
|
|
@@ -16,9 +16,7 @@ export declare const SDK_SURFACE: {
|
|
|
16
16
|
readonly program: "CPI verify_asset via VerifyAssetCpiBuilder";
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
readonly assetLookup: readonly ["findAssetPda", "
|
|
20
|
-
readonly gating: readonly ["Gating", "GatingTraitValue", "formatGatingPredicate", "summarizeGatingEvaluationFailure", "summarizeGatingFailure", "summarizeGatingTierFailure", "evaluateAssetGating"];
|
|
21
|
-
readonly gatingTypes: readonly ["EvaluateAssetGatingOptions", "GatingFilter", "GatingAssetPredicate", "GatingTier", "GatingEvaluationResult", "GatingFilterResult", "GatingTierEvaluationResult", "GatingTiersEvaluationResult"];
|
|
19
|
+
readonly assetLookup: readonly ["findAssetPda", "fetchAllAssetsFromOwner", "fetchAssetDisplayInfoFromSecp256r1PublicKey", "fetchAssetDisplayInfo", "fetchShortcutsFromExternalUrl", "resolveMedia"];
|
|
22
20
|
readonly generated: readonly ["getCreateMintInstructionAsync", "getMintTokenInstructionAsync", "getExecuteTransferInstructionAsync", "getVerifyAssetInstruction", "getSetLockStateInstruction", "getRemoveOwnershipInstructionAsync", "fetchAsset", "findProgramAuthorityPda", "PHYGITAL_TOKEN_PROGRAM_ADDRESS"];
|
|
23
21
|
readonly rustClient: {
|
|
24
22
|
readonly crate: "phygital-token-client";
|
package/dist/lib/sdk-surface.js
CHANGED
|
@@ -3,7 +3,6 @@ export const SDK_SURFACE = {
|
|
|
3
3
|
"buildCreateMintInstructions",
|
|
4
4
|
"buildMintTokenInstructions",
|
|
5
5
|
"parseSecp256r1Pubkey",
|
|
6
|
-
"parseCredentialId",
|
|
7
6
|
"validateMetadataFields",
|
|
8
7
|
],
|
|
9
8
|
transfer: [
|
|
@@ -21,8 +20,8 @@ export const SDK_SURFACE = {
|
|
|
21
20
|
verification: [
|
|
22
21
|
"verifyDynamicUrl",
|
|
23
22
|
"verifyDynamicUrlWithoutCounterCheck",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
23
|
+
"startAuthentication",
|
|
24
|
+
"verifyResponse",
|
|
26
25
|
],
|
|
27
26
|
onChainComposition: {
|
|
28
27
|
patternA_inspect: {
|
|
@@ -38,30 +37,12 @@ export const SDK_SURFACE = {
|
|
|
38
37
|
},
|
|
39
38
|
assetLookup: [
|
|
40
39
|
"findAssetPda",
|
|
41
|
-
"fetchAssetFromCredentialId",
|
|
42
40
|
"fetchAllAssetsFromOwner",
|
|
41
|
+
"fetchAssetDisplayInfoFromSecp256r1PublicKey",
|
|
43
42
|
"fetchAssetDisplayInfo",
|
|
43
|
+
"fetchShortcutsFromExternalUrl",
|
|
44
44
|
"resolveMedia",
|
|
45
45
|
],
|
|
46
|
-
gating: [
|
|
47
|
-
"Gating",
|
|
48
|
-
"GatingTraitValue",
|
|
49
|
-
"formatGatingPredicate",
|
|
50
|
-
"summarizeGatingEvaluationFailure",
|
|
51
|
-
"summarizeGatingFailure",
|
|
52
|
-
"summarizeGatingTierFailure",
|
|
53
|
-
"evaluateAssetGating",
|
|
54
|
-
],
|
|
55
|
-
gatingTypes: [
|
|
56
|
-
"EvaluateAssetGatingOptions",
|
|
57
|
-
"GatingFilter",
|
|
58
|
-
"GatingAssetPredicate",
|
|
59
|
-
"GatingTier",
|
|
60
|
-
"GatingEvaluationResult",
|
|
61
|
-
"GatingFilterResult",
|
|
62
|
-
"GatingTierEvaluationResult",
|
|
63
|
-
"GatingTiersEvaluationResult",
|
|
64
|
-
],
|
|
65
46
|
generated: [
|
|
66
47
|
"getCreateMintInstructionAsync",
|
|
67
48
|
"getMintTokenInstructionAsync",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-surface.js","sourceRoot":"","sources":["../../src/lib/sdk-surface.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE;QACJ,6BAA6B;QAC7B,4BAA4B;QAC5B,sBAAsB;QACtB,
|
|
1
|
+
{"version":3,"file":"sdk-surface.js","sourceRoot":"","sources":["../../src/lib/sdk-surface.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE;QACJ,6BAA6B;QAC7B,4BAA4B;QAC5B,sBAAsB;QACtB,wBAAwB;KACzB;IACD,QAAQ,EAAE;QACR,eAAe;QACf,gCAAgC;QAChC,kBAAkB;KACnB;IACD,eAAe,EAAE,CAAC,oCAAoC,CAAC;IACvD,qBAAqB,EAAE;QACrB,kBAAkB;QAClB,mCAAmC;QACnC,sBAAsB;QACtB,qBAAqB;KACtB;IACD,YAAY,EAAE;QACZ,kBAAkB;QAClB,qCAAqC;QACrC,qBAAqB;QACrB,gBAAgB;KACjB;IACD,kBAAkB,EAAE;QAClB,gBAAgB,EAAE;YAChB,MAAM,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;YACnD,WAAW,EAAE,CAAC,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,CAAC;YACpE,OAAO,EAAE,sDAAsD;SAChE;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;YACpD,WAAW,EAAE,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;YACpD,OAAO,EAAE,4CAA4C;SACtD;KACF;IACD,WAAW,EAAE;QACX,cAAc;QACd,yBAAyB;QACzB,6CAA6C;QAC7C,uBAAuB;QACvB,+BAA+B;QAC/B,cAAc;KACf;IACD,SAAS,EAAE;QACT,+BAA+B;QAC/B,8BAA8B;QAC9B,oCAAoC;QACpC,2BAA2B;QAC3B,4BAA4B;QAC5B,oCAAoC;QACpC,YAAY;QACZ,yBAAyB;QACzB,gCAAgC;KACjC;IACD,UAAU,EAAE;QACV,KAAK,EAAE,uBAAuB;QAC9B,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC7B,GAAG,EAAE;YACH,gBAAgB;YAChB,uBAAuB;YACvB,4BAA4B;YAC5B,oBAAoB;YACpB,2BAA2B;SAC5B;QACD,KAAK,EAAE,CAAC,OAAO,EAAE,qBAAqB,EAAE,WAAW,CAAC;KACrD;CACO,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type VerificationUseCase = "product_page_lookup" | "deep_link_from_prior_scan" | "offline_identification" | "login_ui_only" | "
|
|
1
|
+
export type VerificationUseCase = "product_page_lookup" | "deep_link_from_prior_scan" | "offline_identification" | "login_ui_only" | "onchain_standalone_verify" | "onchain_inspect_verify_asset" | "onchain_cpi_verify_asset" | "transfer_ownership" | "native_mobile_app";
|
|
2
2
|
export type OnChainCompositionPattern = "inspect" | "cpi" | "standalone";
|
|
3
3
|
export type VerificationRecommendation = {
|
|
4
4
|
method: string;
|
package/dist/lib/verification.js
CHANGED
|
@@ -25,30 +25,16 @@ const RECOMMENDATIONS = {
|
|
|
25
25
|
cautions: ["Copied links can be replayed."],
|
|
26
26
|
},
|
|
27
27
|
login_ui_only: {
|
|
28
|
-
method: "authentication off-chain — startAuthentication +
|
|
28
|
+
method: "authentication off-chain — startAuthentication + verifyResponse",
|
|
29
29
|
sdkExports: [
|
|
30
|
-
"
|
|
31
|
-
"
|
|
30
|
+
"startAuthentication",
|
|
31
|
+
"verifyResponse",
|
|
32
32
|
],
|
|
33
33
|
requiresTap: true,
|
|
34
34
|
onChain: false,
|
|
35
|
-
rationale: "Server issues challenge; client taps NFC via
|
|
35
|
+
rationale: "Server issues challenge; client taps NFC via startAuthentication; server verifies with verifyResponse. No on-chain transaction.",
|
|
36
36
|
docIds: ["verification:methods", "verification:overview"],
|
|
37
|
-
cautions: ["Run
|
|
38
|
-
},
|
|
39
|
-
vault_gated_experience: {
|
|
40
|
-
method: "vault gate — server-verified tap + evaluateAssetGating",
|
|
41
|
-
sdkExports: [
|
|
42
|
-
"startAuthenticationWithChallengeResponse",
|
|
43
|
-
"verifyWithChallengeResponse",
|
|
44
|
-
"evaluateAssetGating",
|
|
45
|
-
"Gating",
|
|
46
|
-
"GatingTraitValue",
|
|
47
|
-
],
|
|
48
|
-
requiresTap: true,
|
|
49
|
-
onChain: false,
|
|
50
|
-
rationale: "Prove vault holder is present (server-verified tap), then check owner wallet holdings for tiered unlock.",
|
|
51
|
-
docIds: ["verification:methods", "verification:overview", "gating:overview"],
|
|
37
|
+
cautions: ["Run verifyResponse on your server, not in the browser."],
|
|
52
38
|
},
|
|
53
39
|
onchain_standalone_verify: {
|
|
54
40
|
method: "on-chain verify_asset only",
|
|
@@ -103,28 +89,17 @@ const RECOMMENDATIONS = {
|
|
|
103
89
|
docIds: ["verification:overview"],
|
|
104
90
|
cautions: ["Do not use verifyDynamicUrl for transfers."],
|
|
105
91
|
},
|
|
106
|
-
wallet_holdings_gate: {
|
|
107
|
-
method: "gating — evaluateAssetGating",
|
|
108
|
-
sdkExports: ["evaluateAssetGating", "Gating", "GatingTraitValue"],
|
|
109
|
-
requiresTap: false,
|
|
110
|
-
onChain: false,
|
|
111
|
-
rationale: "Wallet holdings via DAS given an asset publicKey. Pair with off-chain tap auth when you need live presence.",
|
|
112
|
-
docIds: ["gating:overview"],
|
|
113
|
-
cautions: [
|
|
114
|
-
"startAuthenticationWithChallengeResponse + verifyWithChallengeResponse first, then evaluateAssetGating.",
|
|
115
|
-
],
|
|
116
|
-
},
|
|
117
92
|
native_mobile_app: {
|
|
118
|
-
method: "authentication off-chain — startAuthentication (transceive) +
|
|
93
|
+
method: "authentication off-chain — startAuthentication (transceive) + verifyResponse",
|
|
119
94
|
sdkExports: [
|
|
120
|
-
"
|
|
121
|
-
"
|
|
95
|
+
"startAuthentication",
|
|
96
|
+
"verifyResponse",
|
|
122
97
|
],
|
|
123
98
|
requiresTap: true,
|
|
124
99
|
onChain: false,
|
|
125
|
-
rationale: "Pass transceive to
|
|
100
|
+
rationale: "Pass transceive to startAuthentication for native NFC readers; verify on server. Use beginVerifyAsset for on-chain proof.",
|
|
126
101
|
docIds: ["verification:methods"],
|
|
127
|
-
cautions: ["Run
|
|
102
|
+
cautions: ["Run verifyResponse on your server, not in the native client."],
|
|
128
103
|
},
|
|
129
104
|
};
|
|
130
105
|
export function recommendVerification(useCase) {
|
|
@@ -136,7 +111,6 @@ export function listVerificationUseCases() {
|
|
|
136
111
|
{ id: "deep_link_from_prior_scan", summary: "App opens from signed deep link" },
|
|
137
112
|
{ id: "offline_identification", summary: "Identify asset offline (weak replay)" },
|
|
138
113
|
{ id: "login_ui_only", summary: "Off-chain tap-to-login (no chain tx)" },
|
|
139
|
-
{ id: "vault_gated_experience", summary: "tap + wallet holdings check" },
|
|
140
114
|
{ id: "onchain_standalone_verify", summary: "On-chain verify_asset only" },
|
|
141
115
|
{
|
|
142
116
|
id: "onchain_inspect_verify_asset",
|
|
@@ -147,7 +121,6 @@ export function listVerificationUseCases() {
|
|
|
147
121
|
summary: "Pattern B: buildVerifyAssetArgs, your program CPIs verify_asset",
|
|
148
122
|
},
|
|
149
123
|
{ id: "transfer_ownership", summary: "Claim/transfer token to new owner" },
|
|
150
|
-
{ id: "wallet_holdings_gate", summary: "Gate by wallet NFTs/tokens" },
|
|
151
124
|
{ id: "native_mobile_app", summary: "Native app off-chain authentication" },
|
|
152
125
|
];
|
|
153
126
|
}
|
|
@@ -156,13 +129,13 @@ Identification vs Authentication
|
|
|
156
129
|
├── Need holder present NOW?
|
|
157
130
|
│ NO → verifyDynamicUrl / verifyDynamicUrlWithoutCounterCheck
|
|
158
131
|
│ YES → Need on-chain proof?
|
|
159
|
-
│ NO →
|
|
160
|
-
│ →
|
|
132
|
+
│ NO → startAuthentication (client tap)
|
|
133
|
+
│ → verifyResponse (server verify) — off-chain only
|
|
161
134
|
│ YES → beginVerifyAsset composable flow:
|
|
162
135
|
│ Pattern A: [secp256r1_verify, verify_asset, your_ix] — program inspects sysvar
|
|
163
136
|
│ Pattern B: [secp256r1_verify, your_ix] — program CPIs verify_asset
|
|
164
137
|
└── Transfer ownership? → beginTransfer → completeTransfer
|
|
165
138
|
|
|
166
|
-
|
|
139
|
+
verifyResponse never submits verify_asset. Returns { isVerified, secp256r1PublicKey } (response.id is the secp256r1 vault key, also the WebAuthn credential id). Run it on your server. Load on-chain state with fetchAssetDisplayInfoFromSecp256r1PublicKey when needed. On-chain proof always uses beginVerifyAsset.
|
|
167
140
|
`.trim();
|
|
168
141
|
//# sourceMappingURL=verification.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/lib/verification.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/lib/verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Third-party developers can:
|
|
4
4
|
|
|
5
|
-
- **
|
|
5
|
+
- **Authenticate off-chain** with a live NFC tap → `startAuthentication` + `verifyResponse`
|
|
6
6
|
- **Require live passkey presence on-chain** → composable `verify_asset` (two patterns below)
|
|
7
7
|
|
|
8
8
|
## Two on-chain composition patterns
|
|
@@ -31,10 +31,10 @@ Best when your program orchestrates verification as part of its own instruction.
|
|
|
31
31
|
|
|
32
32
|
Off-chain tap auth is split:
|
|
33
33
|
|
|
34
|
-
1. **Client:** `
|
|
35
|
-
2. **Server:** `
|
|
34
|
+
1. **Client:** `startAuthentication(expectedMessage)` — NFC tap.
|
|
35
|
+
2. **Server:** `verifyResponse({ expectedMessage, response })` — signature check → `{ isVerified, secp256r1PublicKey }` (`response.id` is the compressed secp256r1 key, reused as the WebAuthn credential id). Fetch on-chain owner/metadata with `fetchAssetDisplayInfoFromSecp256r1PublicKey(rpc, secp256r1PublicKey)` when needed.
|
|
36
36
|
|
|
37
|
-
Does **not** write to chain. Use for UI login
|
|
37
|
+
Does **not** write to chain. Use for UI login and vault presence checks when no program needs to inspect `verify_asset`.
|
|
38
38
|
|
|
39
39
|
## Message design checklist
|
|
40
40
|
|
package/docs/glossary.md
CHANGED
|
@@ -18,6 +18,7 @@ Collection (group_mint)
|
|
|
18
18
|
| **Collection** | `group_mint` | Token-2022 TokenGroup parent mint. Groups related designs. |
|
|
19
19
|
| **Design** | `mint` (in `create_mint`) | Shared SFT template — one metadata set, many physical instances. |
|
|
20
20
|
| **Asset** | `asset` account | Per-physical-item record keyed by secp256r1 passkey pubkey. |
|
|
21
|
+
| **Passkey pubkey** | `asset.public_key` | Compressed secp256r1 key. The custom authenticator also uses it as WebAuthn `credential.id` and `user.id`, so `response.id` after a tap is this key — there is no separate on-chain credential id. |
|
|
21
22
|
| **Owner** | `asset.owner` | Current custodian after a successful `execute_transfer` claim. |
|
|
22
23
|
| **Custody** | `program_authority` | PDA that holds unclaimed tokens and acts as permanent delegate. |
|
|
23
24
|
|
package/docs/sdk/surface-area.md
CHANGED
|
@@ -9,7 +9,6 @@ TypeScript package: `phygital-token-sdk` (`clients/js/phygital-token`).
|
|
|
9
9
|
| `buildCreateMintInstructions` | Create design mint in a collection |
|
|
10
10
|
| `buildMintTokenInstructions` | Mint token + initialize asset PDA |
|
|
11
11
|
| `parseSecp256r1Pubkey` | Parse base64url compressed P-256 key |
|
|
12
|
-
| `parseCredentialId` | Parse base64url credential id |
|
|
13
12
|
| `validateMetadataFields` | Name/symbol/uri length checks |
|
|
14
13
|
|
|
15
14
|
## Transfer
|
|
@@ -41,10 +40,10 @@ TypeScript package: `phygital-token-sdk` (`clients/js/phygital-token`).
|
|
|
41
40
|
|--------|---------|
|
|
42
41
|
| `verifyDynamicUrl` | Identification via signed URL (server) |
|
|
43
42
|
| `verifyDynamicUrlWithoutCounterCheck` | Identification offline |
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
43
|
+
| `startAuthentication` | Client: NFC tap trigger; returns WebAuthn response |
|
|
44
|
+
| `verifyResponse` | Server: verify tap signature; returns `{ isVerified, secp256r1PublicKey }` |
|
|
46
45
|
|
|
47
|
-
Pair `
|
|
46
|
+
Pair `startAuthentication` (client) with `verifyResponse` (server). Pass optional `transceive` for kiosk / native NFC readers. The authenticator uses the secp256r1 public key as WebAuthn `credential.id` and `user.id`, so `response.id` is that key — there is no separate on-chain credential id.
|
|
48
47
|
|
|
49
48
|
On-chain proof always uses `beginVerifyAsset` / `buildVerifyAssetArgs` / `completeVerifyAsset`.
|
|
50
49
|
|
|
@@ -53,27 +52,19 @@ On-chain proof always uses `beginVerifyAsset` / `buildVerifyAssetArgs` / `comple
|
|
|
53
52
|
| Export | Purpose |
|
|
54
53
|
|--------|---------|
|
|
55
54
|
| `findAssetPda` | Derive asset PDA from secp256r1 pubkey |
|
|
56
|
-
| `fetchAssetFromCredentialId` | Resolve asset + pubkey from credential |
|
|
57
55
|
| `fetchAllAssetsFromOwner` | List assets by wallet owner |
|
|
58
|
-
| `
|
|
56
|
+
| `fetchAssetDisplayInfoFromSecp256r1PublicKey` | Rich display metadata from base64url secp256r1 pubkey |
|
|
57
|
+
| `fetchAssetDisplayInfo` | Rich display metadata from a decoded `Asset` account |
|
|
58
|
+
| `fetchShortcutsFromExternalUrl` | Load Phantom Shortcuts schema v2 from `{external_url}/shortcuts.json` |
|
|
59
59
|
| `resolveMedia` | Resolve media URLs from token metadata |
|
|
60
60
|
|
|
61
|
-
## Gating
|
|
62
|
-
|
|
63
|
-
| Export | Purpose |
|
|
64
|
-
|--------|---------|
|
|
65
|
-
| `evaluateAssetGating` | Full tier evaluation for asset owner wallet |
|
|
66
|
-
| `evaluateGatingTiers` / `evaluateGatingFilter` | Lower-level evaluators |
|
|
67
|
-
| `Gating` / `GatingTraitValue` | Filter builders |
|
|
68
|
-
| `summarizeGatingEvaluationFailure` | Human-readable failure reasons |
|
|
69
|
-
|
|
70
61
|
## Generated (Codama)
|
|
71
62
|
|
|
72
63
|
Re-exported from `./generated/index.js`:
|
|
73
64
|
|
|
74
65
|
- Instructions: `getCreateMintInstructionAsync`, `getMintTokenInstructionAsync`, `getExecuteTransferInstructionAsync`, `getRemoveOwnershipInstructionAsync`, `getVerifyAssetInstruction`, `getSetLockStateInstruction`, ...
|
|
75
66
|
- Accounts: `fetchAsset`, `Asset`, ...
|
|
76
|
-
- Types: `AssetType`, `Secp256r1VerifyArgs`,
|
|
67
|
+
- Types: `AssetType`, `Secp256r1VerifyArgs`, ...
|
|
77
68
|
- PDAs: `findProgramAuthorityPda`, ...
|
|
78
69
|
|
|
79
70
|
## Rust client
|
|
@@ -16,7 +16,7 @@ All exports from `clients/js/phygital-token/src/utils/verify.ts`.
|
|
|
16
16
|
|
|
17
17
|
Off-chain authentication is **split**: NFC tap on the client, signature verification on your server.
|
|
18
18
|
|
|
19
|
-
### `
|
|
19
|
+
### `startAuthentication(message, transceive?)`
|
|
20
20
|
|
|
21
21
|
**Client — trigger the tap.**
|
|
22
22
|
|
|
@@ -24,35 +24,39 @@ Opens the system NFC modal (browser) or talks to an NFC reader via `transceive`
|
|
|
24
24
|
|
|
25
25
|
```ts
|
|
26
26
|
// Browser
|
|
27
|
-
const response = await
|
|
27
|
+
const response = await startAuthentication(message);
|
|
28
28
|
|
|
29
29
|
// Kiosk / native reader
|
|
30
|
-
const response = await
|
|
30
|
+
const response = await startAuthentication(message, transceive);
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
`message` must be the same string your server issued as the challenge (store server-side with a short TTL).
|
|
34
34
|
|
|
35
|
-
### `
|
|
35
|
+
### `verifyResponse({ expectedMessage, response })`
|
|
36
36
|
|
|
37
37
|
**Server — verify the tap.**
|
|
38
38
|
|
|
39
|
-
Checks the WebAuthn signature against `expectedMessage
|
|
39
|
+
Checks the WebAuthn signature against `expectedMessage`. Treats `response.id` as the compressed secp256r1 public key (the authenticator reuses that key as WebAuthn `credential.id` / `user.id`). Returns `{ isVerified, secp256r1PublicKey }` — no RPC. Challenge mismatch throws (`Message mismatch.`); a bad signature returns `isVerified: false`. Does **not** submit `verify_asset`.
|
|
40
40
|
|
|
41
41
|
```ts
|
|
42
42
|
// API route after client POSTs { message, response }
|
|
43
|
-
const {
|
|
44
|
-
rpc,
|
|
43
|
+
const { isVerified, secp256r1PublicKey } = verifyResponse({
|
|
45
44
|
expectedMessage: message,
|
|
46
45
|
response,
|
|
47
46
|
});
|
|
47
|
+
|
|
48
|
+
if (isVerified) {
|
|
49
|
+
// optional: load on-chain state
|
|
50
|
+
// await fetchAssetDisplayInfoFromSecp256r1PublicKey(rpc, secp256r1PublicKey)
|
|
51
|
+
}
|
|
48
52
|
```
|
|
49
53
|
|
|
50
54
|
Typical flow:
|
|
51
55
|
|
|
52
56
|
1. Server issues `message` (e.g. `randomUUID()`), stores it for the session.
|
|
53
|
-
2. Client calls `
|
|
57
|
+
2. Client calls `startAuthentication(message)` → user taps vault.
|
|
54
58
|
3. Client POSTs `{ message, response }` to your verify API.
|
|
55
|
-
4. Server calls `
|
|
59
|
+
4. Server calls `verifyResponse`, then runs your business logic.
|
|
56
60
|
|
|
57
61
|
For on-chain proof with a bound message, use `beginVerifyAsset({ message: Uint8Array })` instead.
|
|
58
62
|
|
|
@@ -60,7 +64,7 @@ For on-chain proof with a bound message, use `beginVerifyAsset({ message: Uint8A
|
|
|
60
64
|
|
|
61
65
|
| Need | Use |
|
|
62
66
|
|------|-----|
|
|
63
|
-
| UI login / vault gate, no tx | `
|
|
67
|
+
| UI login / vault gate, no tx | `startAuthentication` + `verifyResponse` |
|
|
64
68
|
| On-chain proof — Pattern A | `completeVerifyAsset` + your ix |
|
|
65
69
|
| On-chain proof — Pattern B | `buildVerifyAssetArgs` + your ix |
|
|
66
70
|
| Transfer ownership | `beginTransfer` → `completeTransfer` |
|
|
@@ -69,7 +73,7 @@ For on-chain proof with a bound message, use `beginVerifyAsset({ message: Uint8A
|
|
|
69
73
|
|
|
70
74
|
| Context | `message` type | Effect |
|
|
71
75
|
|---------|----------------|--------|
|
|
72
|
-
| `
|
|
76
|
+
| `startAuthentication` / `verifyResponse` | `string` (`expectedMessage`) | WebAuthn challenge bytes (UTF-8); must match on client and server |
|
|
73
77
|
| `beginVerifyAsset` | `Uint8Array` | Hashed into slot-bound on-chain challenge |
|
|
74
78
|
|
|
75
79
|
An off-chain `expectedMessage` does **not** produce an on-chain `verify_asset` record. Use the composable flow when your program must inspect or CPI `verify_asset`.
|
|
@@ -20,8 +20,8 @@ Do you need the holder physically present right now?
|
|
|
20
20
|
│ └─ Offline / no backend → verifyDynamicUrlWithoutCounterCheck (weaker)
|
|
21
21
|
└─ YES → Authentication
|
|
22
22
|
├─ Off-chain only (UI login, vault gate, no chain tx)
|
|
23
|
-
│ Server issues challenge →
|
|
24
|
-
│ →
|
|
23
|
+
│ Server issues challenge → startAuthentication (client tap)
|
|
24
|
+
│ → verifyResponse (server verify) → your logic
|
|
25
25
|
├─ On-chain proof for your program → beginVerifyAsset composable flow (see below)
|
|
26
26
|
└─ Transfer ownership → beginTransfer → completeTransfer (NOT verify_asset)
|
|
27
27
|
```
|
|
@@ -30,8 +30,8 @@ Do you need the holder physically present right now?
|
|
|
30
30
|
|
|
31
31
|
Off-chain authentication uses two SDK functions:
|
|
32
32
|
|
|
33
|
-
- **`
|
|
34
|
-
- **`
|
|
33
|
+
- **`startAuthentication`** — client only; opens NFC and returns a WebAuthn response.
|
|
34
|
+
- **`verifyResponse`** — server only; checks the signature and returns `{ isVerified, secp256r1PublicKey }`. `response.id` / `secp256r1PublicKey` is the compressed secp256r1 vault key (also used as the WebAuthn credential id). Load on-chain state with `fetchAssetDisplayInfoFromSecp256r1PublicKey` or `fetchAsset` when needed.
|
|
35
35
|
|
|
36
36
|
Neither submits a transaction. Verification should run on your backend so the client cannot fake a successful tap.
|
|
37
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Composable `verify_asset` (TypeScript)
|
|
2
2
|
|
|
3
|
-
On-chain passkey authentication for custom programs. **Not** the same as off-chain `
|
|
3
|
+
On-chain passkey authentication for custom programs. **Not** the same as off-chain `startAuthentication` + `verifyResponse`.
|
|
4
4
|
|
|
5
5
|
## Session flow
|
|
6
6
|
|
|
@@ -22,7 +22,7 @@ Slot-bound challenge: `SHA256("verify_asset" || SHA256(message) || slotHash)`.
|
|
|
22
22
|
|
|
23
23
|
### `buildVerifyAssetArgs(session, response)`
|
|
24
24
|
|
|
25
|
-
Returns `secp256r1Verify`, `signedMessageIndex`, `clientDataJson`, `asset`, `assetPda`.
|
|
25
|
+
Resolves the asset PDA from `response.id` (compressed secp256r1 public key / WebAuthn credential id). Returns `secp256r1Verify`, `signedMessageIndex`, `clientDataJson`, `asset`, `assetPda`.
|
|
26
26
|
|
|
27
27
|
### `completeVerifyAsset(session, response)`
|
|
28
28
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "phygital-token-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "MCP server for the phygital-token Solana program, TypeScript SDK, and Rust client",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"repository": {
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
35
35
|
"@noble/hashes": "^2.0.1",
|
|
36
|
-
"@solana/kit": "^
|
|
36
|
+
"@solana/kit": "^7.0.0",
|
|
37
37
|
"zod": "^3.25.76",
|
|
38
|
-
"phygital-token-sdk": "0.
|
|
38
|
+
"phygital-token-sdk": "0.12.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/node": "^22.15.21",
|