phygital-token-sdk 0.3.2 → 0.4.1
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/dist/generated/instructions/executeTransfer.d.ts +5 -20
- package/dist/generated/instructions/executeTransfer.d.ts.map +1 -1
- package/dist/generated/instructions/executeTransfer.js +4 -17
- package/dist/generated/instructions/executeTransfer.js.map +1 -1
- package/dist/generated/instructions/index.d.ts +1 -0
- package/dist/generated/instructions/index.d.ts.map +1 -1
- package/dist/generated/instructions/index.js +1 -0
- package/dist/generated/instructions/index.js.map +1 -1
- package/dist/generated/instructions/verifyAsset.d.ts +44 -0
- package/dist/generated/instructions/verifyAsset.d.ts.map +1 -0
- package/dist/generated/instructions/verifyAsset.js +82 -0
- package/dist/generated/instructions/verifyAsset.js.map +1 -0
- package/dist/generated/programs/phygitalToken.d.ts +7 -3
- package/dist/generated/programs/phygitalToken.d.ts.map +1 -1
- package/dist/generated/programs/phygitalToken.js +13 -1
- package/dist/generated/programs/phygitalToken.js.map +1 -1
- package/dist/generated/types/index.d.ts +1 -0
- package/dist/generated/types/index.d.ts.map +1 -1
- package/dist/generated/types/index.js +1 -0
- package/dist/generated/types/index.js.map +1 -1
- package/dist/generated/types/secp256r1VerifyArgs.d.ts +15 -23
- package/dist/generated/types/secp256r1VerifyArgs.d.ts.map +1 -1
- package/dist/generated/types/secp256r1VerifyArgs.js +15 -10
- package/dist/generated/types/secp256r1VerifyArgs.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instructions/transfer.d.ts.map +1 -1
- package/dist/instructions/transfer.js +11 -11
- package/dist/instructions/transfer.js.map +1 -1
- package/dist/instructions/verifyAsset.d.ts +20 -0
- package/dist/instructions/verifyAsset.d.ts.map +1 -0
- package/dist/instructions/verifyAsset.js +41 -0
- package/dist/instructions/verifyAsset.js.map +1 -0
- package/dist/utils/consts.d.ts +1 -0
- package/dist/utils/consts.d.ts.map +1 -1
- package/dist/utils/consts.js +1 -0
- package/dist/utils/consts.js.map +1 -1
- package/dist/utils/metadata.d.ts +12 -7
- package/dist/utils/metadata.d.ts.map +1 -1
- package/dist/utils/metadata.js +2 -20
- package/dist/utils/metadata.js.map +1 -1
- package/dist/utils/passkey/secp256r1.d.ts +6 -9
- package/dist/utils/passkey/secp256r1.d.ts.map +1 -1
- package/dist/utils/passkey/secp256r1.js +15 -7
- package/dist/utils/passkey/secp256r1.js.map +1 -1
- package/dist/utils/sendInstructions.d.ts +7 -0
- package/dist/utils/sendInstructions.d.ts.map +1 -0
- package/dist/utils/sendInstructions.js +13 -0
- package/dist/utils/sendInstructions.js.map +1 -0
- package/dist/utils/verify.d.ts +16 -8
- package/dist/utils/verify.d.ts.map +1 -1
- package/dist/utils/verify.js +121 -21
- package/dist/utils/verify.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/verify.js
CHANGED
|
@@ -2,8 +2,13 @@ import { Endian, getBase64Decoder, getBase64Encoder, getU32Encoder, } from "@sol
|
|
|
2
2
|
import { base64URLStringToBuffer, convertSignatureDERtoRS, getSecp256r1Message, normalizeSignatureToLowS, parseWebAuthnClientData, } from "./passkey/internal.js";
|
|
3
3
|
import { p256 } from "@noble/curves/nist.js";
|
|
4
4
|
import { startAuthentication, bufferToBase64URLString, } from "@simplewebauthn/browser";
|
|
5
|
-
import { getAssetDecoder, PHYGITAL_TOKEN_PROGRAM_ADDRESS, } from "../generated/index.js";
|
|
6
|
-
import { authenticateWithNfc
|
|
5
|
+
import { getAssetDecoder, getVerifyAssetInstruction, PHYGITAL_TOKEN_PROGRAM_ADDRESS, } from "../generated/index.js";
|
|
6
|
+
import { authenticateWithNfc } from "./passkey/nfc/index.js";
|
|
7
|
+
import { sendInstructions } from "./sendInstructions.js";
|
|
8
|
+
import { buildSecp256r1VerifyInstructionFromWebAuthnResponse, buildVerifyMessage, } from "./passkey/secp256r1.js";
|
|
9
|
+
import { getLatestSlotHash } from "./slotHash.js";
|
|
10
|
+
import { findAssetPda } from "./pdas/index.js";
|
|
11
|
+
import { parseSecp256r1Pubkey } from "../instructions/mint.js";
|
|
7
12
|
const DEFAULT_VERIFY_DYNAMIC_URL_ENDPOINT = `https://revibase.com/api/verifyDynamicUrl`;
|
|
8
13
|
const defaultVerifyDynamicUrlCallback = async (params) => {
|
|
9
14
|
const url = new URL(DEFAULT_VERIFY_DYNAMIC_URL_ENDPOINT);
|
|
@@ -57,9 +62,7 @@ export function verifyDynamicUrlWithoutCounterCheck(params) {
|
|
|
57
62
|
counter: currentCounter,
|
|
58
63
|
};
|
|
59
64
|
}
|
|
60
|
-
async function
|
|
61
|
-
if (!rpc)
|
|
62
|
-
return null;
|
|
65
|
+
async function fetchAssetCredentialFromCredentialId(credentialId, rpc) {
|
|
63
66
|
const data = await rpc
|
|
64
67
|
.getProgramAccounts(PHYGITAL_TOKEN_PROGRAM_ADDRESS, {
|
|
65
68
|
encoding: "base64",
|
|
@@ -79,7 +82,16 @@ async function fetchPublicKeyFromCredentialId(credentialId, rpc) {
|
|
|
79
82
|
throw new Error("No account found.");
|
|
80
83
|
}
|
|
81
84
|
const asset = getAssetDecoder().decode(getBase64Encoder().encode(data[0].account.data[0]));
|
|
82
|
-
return
|
|
85
|
+
return {
|
|
86
|
+
publicKey: bufferToBase64URLString(new Uint8Array(asset.publicKey[0]).buffer),
|
|
87
|
+
asset: data[0].pubkey,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async function fetchPublicKeyFromCredentialId(credentialId, rpc) {
|
|
91
|
+
if (!rpc)
|
|
92
|
+
return null;
|
|
93
|
+
const resolved = await fetchAssetCredentialFromCredentialId(credentialId, rpc);
|
|
94
|
+
return resolved.publicKey;
|
|
83
95
|
}
|
|
84
96
|
async function verifyAuthenticationResponse({ response, expectedChallenge, rpc, fetchPublicKeyFromCredentialIdCallback, }) {
|
|
85
97
|
const clientData = parseWebAuthnClientData(response.response.clientDataJSON);
|
|
@@ -101,12 +113,26 @@ async function verifyAuthenticationResponse({ response, expectedChallenge, rpc,
|
|
|
101
113
|
publicKey,
|
|
102
114
|
};
|
|
103
115
|
}
|
|
104
|
-
export async function verifyWithChallengeResponse(
|
|
105
|
-
const
|
|
106
|
-
|
|
116
|
+
export async function verifyWithChallengeResponse(input) {
|
|
117
|
+
const { fetchPublicKeyFromCredentialIdCallback, postVerificationOnChain } = input;
|
|
118
|
+
let expectedChallenge = null;
|
|
119
|
+
let slotNumber = null;
|
|
120
|
+
let message = undefined;
|
|
121
|
+
if (postVerificationOnChain) {
|
|
122
|
+
message = input.message ?? crypto.randomUUID();
|
|
123
|
+
const { slotHash, slotNumber: generatedSlotNumber } = await getLatestSlotHash(input.rpc);
|
|
124
|
+
expectedChallenge = await buildVerifyMessage({
|
|
125
|
+
message,
|
|
126
|
+
slotHash,
|
|
127
|
+
});
|
|
128
|
+
slotNumber = generatedSlotNumber;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
expectedChallenge = crypto.getRandomValues(new Uint8Array(32));
|
|
132
|
+
}
|
|
107
133
|
const response = await startAuthentication({
|
|
108
134
|
optionsJSON: {
|
|
109
|
-
challenge: expectedChallenge,
|
|
135
|
+
challenge: bufferToBase64URLString(expectedChallenge.buffer),
|
|
110
136
|
rpId: window.location.hostname,
|
|
111
137
|
userVerification: "preferred",
|
|
112
138
|
allowCredentials: [
|
|
@@ -118,18 +144,62 @@ export async function verifyWithChallengeResponse({ rpc, fetchPublicKeyFromCrede
|
|
|
118
144
|
],
|
|
119
145
|
},
|
|
120
146
|
});
|
|
121
|
-
|
|
147
|
+
const result = await verifyAuthenticationResponse({
|
|
122
148
|
response,
|
|
123
|
-
expectedChallenge,
|
|
124
|
-
rpc,
|
|
149
|
+
expectedChallenge: bufferToBase64URLString(expectedChallenge.buffer),
|
|
150
|
+
rpc: input.rpc,
|
|
125
151
|
fetchPublicKeyFromCredentialIdCallback,
|
|
126
152
|
});
|
|
153
|
+
if (postVerificationOnChain) {
|
|
154
|
+
if (!slotNumber) {
|
|
155
|
+
throw new Error("slotNumber is missing.");
|
|
156
|
+
}
|
|
157
|
+
if (!message) {
|
|
158
|
+
throw new Error("message is missing.");
|
|
159
|
+
}
|
|
160
|
+
const { secp256r1Verify, origin, crossOrigin, truncatedClientDataJson } = await buildSecp256r1VerifyInstructionFromWebAuthnResponse({
|
|
161
|
+
response,
|
|
162
|
+
publicKey: result.publicKey,
|
|
163
|
+
});
|
|
164
|
+
const verifyAssetInstruction = getVerifyAssetInstruction({
|
|
165
|
+
asset: await findAssetPda(parseSecp256r1Pubkey(result.publicKey)),
|
|
166
|
+
secp256r1VerifyArgs: {
|
|
167
|
+
signedMessageIndex: 0,
|
|
168
|
+
slotNumber,
|
|
169
|
+
origin,
|
|
170
|
+
crossOrigin,
|
|
171
|
+
truncatedClientDataJson,
|
|
172
|
+
},
|
|
173
|
+
message,
|
|
174
|
+
});
|
|
175
|
+
const signature = await sendInstructions({
|
|
176
|
+
rpc: input.rpc,
|
|
177
|
+
feePayer: input.feePayer,
|
|
178
|
+
instructions: [secp256r1Verify, verifyAssetInstruction],
|
|
179
|
+
});
|
|
180
|
+
result.signature = signature;
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
127
183
|
}
|
|
128
|
-
export async function verifyWithChallengeResponseOverNfc(
|
|
129
|
-
const
|
|
130
|
-
|
|
184
|
+
export async function verifyWithChallengeResponseOverNfc(input) {
|
|
185
|
+
const { fetchPublicKeyFromCredentialIdCallback, postVerificationOnChain } = input;
|
|
186
|
+
let expectedChallenge = null;
|
|
187
|
+
let slotNumber = null;
|
|
188
|
+
let message = undefined;
|
|
189
|
+
if (postVerificationOnChain) {
|
|
190
|
+
message = input.message ?? crypto.randomUUID();
|
|
191
|
+
const { slotHash, slotNumber: generatedSlotNumber } = await getLatestSlotHash(input.rpc);
|
|
192
|
+
expectedChallenge = await buildVerifyMessage({
|
|
193
|
+
message,
|
|
194
|
+
slotHash,
|
|
195
|
+
});
|
|
196
|
+
slotNumber = generatedSlotNumber;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
expectedChallenge = crypto.getRandomValues(new Uint8Array(32));
|
|
200
|
+
}
|
|
131
201
|
const response = await authenticateWithNfc({
|
|
132
|
-
challenge: expectedChallenge,
|
|
202
|
+
challenge: bufferToBase64URLString(expectedChallenge.buffer),
|
|
133
203
|
rpId: "revibase.com",
|
|
134
204
|
userVerification: "preferred",
|
|
135
205
|
origin: "https://revibase.com",
|
|
@@ -140,12 +210,42 @@ export async function verifyWithChallengeResponseOverNfc({ transceive, rpc, fetc
|
|
|
140
210
|
transports: ["nfc"],
|
|
141
211
|
},
|
|
142
212
|
],
|
|
143
|
-
}, transceive);
|
|
144
|
-
|
|
213
|
+
}, input.transceive);
|
|
214
|
+
const result = await verifyAuthenticationResponse({
|
|
145
215
|
response,
|
|
146
|
-
expectedChallenge,
|
|
147
|
-
rpc,
|
|
216
|
+
expectedChallenge: bufferToBase64URLString(expectedChallenge.buffer),
|
|
217
|
+
rpc: input.rpc,
|
|
148
218
|
fetchPublicKeyFromCredentialIdCallback,
|
|
149
219
|
});
|
|
220
|
+
if (postVerificationOnChain) {
|
|
221
|
+
if (!slotNumber) {
|
|
222
|
+
throw new Error("slotNumber is missing.");
|
|
223
|
+
}
|
|
224
|
+
if (!message) {
|
|
225
|
+
throw new Error("message is missing.");
|
|
226
|
+
}
|
|
227
|
+
const { secp256r1Verify, origin, crossOrigin, truncatedClientDataJson } = await buildSecp256r1VerifyInstructionFromWebAuthnResponse({
|
|
228
|
+
response,
|
|
229
|
+
publicKey: result.publicKey,
|
|
230
|
+
});
|
|
231
|
+
const verifyAssetInstruction = getVerifyAssetInstruction({
|
|
232
|
+
asset: await findAssetPda(parseSecp256r1Pubkey(result.publicKey)),
|
|
233
|
+
secp256r1VerifyArgs: {
|
|
234
|
+
signedMessageIndex: 0,
|
|
235
|
+
slotNumber,
|
|
236
|
+
origin,
|
|
237
|
+
crossOrigin,
|
|
238
|
+
truncatedClientDataJson,
|
|
239
|
+
},
|
|
240
|
+
message,
|
|
241
|
+
});
|
|
242
|
+
const signature = await sendInstructions({
|
|
243
|
+
rpc: input.rpc,
|
|
244
|
+
feePayer: input.feePayer,
|
|
245
|
+
instructions: [secp256r1Verify, verifyAssetInstruction],
|
|
246
|
+
});
|
|
247
|
+
result.signature = signature;
|
|
248
|
+
}
|
|
249
|
+
return result;
|
|
150
250
|
}
|
|
151
251
|
//# sourceMappingURL=verify.js.map
|
package/dist/utils/verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/utils/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/utils/verify.ts"],"names":[],"mappings":"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"}
|