phygital-token-sdk 0.2.2 → 0.3.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/dist/__tests__/nfc-cbor.test.d.ts +2 -0
- package/dist/__tests__/nfc-cbor.test.d.ts.map +1 -0
- package/dist/__tests__/nfc-cbor.test.js +72 -0
- package/dist/__tests__/nfc-cbor.test.js.map +1 -0
- package/dist/generated/accounts/asset.d.ts +14 -8
- package/dist/generated/accounts/asset.d.ts.map +1 -1
- package/dist/generated/accounts/asset.js +13 -5
- package/dist/generated/accounts/asset.js.map +1 -1
- package/dist/generated/accounts/index.d.ts +0 -1
- package/dist/generated/accounts/index.d.ts.map +1 -1
- package/dist/generated/accounts/index.js +0 -1
- package/dist/generated/accounts/index.js.map +1 -1
- package/dist/generated/errors/phygitalToken.d.ts +1 -4
- package/dist/generated/errors/phygitalToken.d.ts.map +1 -1
- package/dist/generated/errors/phygitalToken.js +0 -6
- package/dist/generated/errors/phygitalToken.js.map +1 -1
- package/dist/generated/instructions/executeTransfer.d.ts +7 -11
- package/dist/generated/instructions/executeTransfer.d.ts.map +1 -1
- package/dist/generated/instructions/executeTransfer.js +2 -7
- package/dist/generated/instructions/executeTransfer.js.map +1 -1
- package/dist/generated/instructions/index.d.ts +0 -2
- package/dist/generated/instructions/index.d.ts.map +1 -1
- package/dist/generated/instructions/index.js +0 -2
- package/dist/generated/instructions/index.js.map +1 -1
- package/dist/generated/instructions/mintToken.d.ts +20 -20
- package/dist/generated/instructions/mintToken.d.ts.map +1 -1
- package/dist/generated/instructions/mintToken.js +8 -11
- package/dist/generated/instructions/mintToken.js.map +1 -1
- package/dist/generated/programs/phygitalToken.d.ts +8 -18
- package/dist/generated/programs/phygitalToken.d.ts.map +1 -1
- package/dist/generated/programs/phygitalToken.js +7 -38
- package/dist/generated/programs/phygitalToken.js.map +1 -1
- package/dist/generated/types/assetType.d.ts +10 -0
- package/dist/generated/types/assetType.d.ts.map +1 -0
- package/dist/generated/types/assetType.js +16 -0
- package/dist/generated/types/assetType.js.map +1 -0
- package/dist/generated/types/credentialId.d.ts +7 -0
- package/dist/generated/types/credentialId.d.ts.map +1 -0
- package/dist/generated/types/credentialId.js +11 -0
- package/dist/generated/types/credentialId.js.map +1 -0
- package/dist/generated/types/index.d.ts +2 -0
- package/dist/generated/types/index.d.ts.map +1 -1
- package/dist/generated/types/index.js +2 -0
- package/dist/generated/types/index.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/instructions/mint.d.ts +4 -2
- package/dist/instructions/mint.d.ts.map +1 -1
- package/dist/instructions/mint.js +19 -3
- package/dist/instructions/mint.js.map +1 -1
- package/dist/instructions/transfer.d.ts.map +1 -1
- package/dist/instructions/transfer.js +3 -4
- package/dist/instructions/transfer.js.map +1 -1
- package/dist/utils/consts.d.ts +0 -1
- package/dist/utils/consts.d.ts.map +1 -1
- package/dist/utils/consts.js +0 -1
- package/dist/utils/consts.js.map +1 -1
- package/dist/utils/metadata.d.ts +26 -10
- package/dist/utils/metadata.d.ts.map +1 -1
- package/dist/utils/metadata.js +85 -25
- package/dist/utils/metadata.js.map +1 -1
- package/dist/utils/passkey/internal.d.ts +1 -0
- package/dist/utils/passkey/internal.d.ts.map +1 -1
- package/dist/utils/passkey/internal.js +1 -0
- package/dist/utils/passkey/internal.js.map +1 -1
- package/dist/utils/passkey/nfc/apdu.d.ts +39 -0
- package/dist/utils/passkey/nfc/apdu.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/apdu.js +191 -0
- package/dist/utils/passkey/nfc/apdu.js.map +1 -0
- package/dist/utils/passkey/nfc/authDataExtensions.d.ts +2 -0
- package/dist/utils/passkey/nfc/authDataExtensions.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/authDataExtensions.js +176 -0
- package/dist/utils/passkey/nfc/authDataExtensions.js.map +1 -0
- package/dist/utils/passkey/nfc/authenticate.d.ts +4 -0
- package/dist/utils/passkey/nfc/authenticate.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/authenticate.js +40 -0
- package/dist/utils/passkey/nfc/authenticate.js.map +1 -0
- package/dist/utils/passkey/nfc/base64url.d.ts +2 -0
- package/dist/utils/passkey/nfc/base64url.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/base64url.js +13 -0
- package/dist/utils/passkey/nfc/base64url.js.map +1 -0
- package/dist/utils/passkey/nfc/cbor.d.ts +5 -0
- package/dist/utils/passkey/nfc/cbor.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/cbor.js +267 -0
- package/dist/utils/passkey/nfc/cbor.js.map +1 -0
- package/dist/utils/passkey/nfc/clientData.d.ts +9 -0
- package/dist/utils/passkey/nfc/clientData.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/clientData.js +15 -0
- package/dist/utils/passkey/nfc/clientData.js.map +1 -0
- package/dist/utils/passkey/nfc/constants.d.ts +6 -0
- package/dist/utils/passkey/nfc/constants.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/constants.js +8 -0
- package/dist/utils/passkey/nfc/constants.js.map +1 -0
- package/dist/utils/passkey/nfc/errors.d.ts +7 -0
- package/dist/utils/passkey/nfc/errors.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/errors.js +10 -0
- package/dist/utils/passkey/nfc/errors.js.map +1 -0
- package/dist/utils/passkey/nfc/fromWebAuthnJson.d.ts +4 -0
- package/dist/utils/passkey/nfc/fromWebAuthnJson.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/fromWebAuthnJson.js +58 -0
- package/dist/utils/passkey/nfc/fromWebAuthnJson.js.map +1 -0
- package/dist/utils/passkey/nfc/getAssertion.d.ts +32 -0
- package/dist/utils/passkey/nfc/getAssertion.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/getAssertion.js +97 -0
- package/dist/utils/passkey/nfc/getAssertion.js.map +1 -0
- package/dist/utils/passkey/nfc/index.d.ts +4 -0
- package/dist/utils/passkey/nfc/index.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/index.js +3 -0
- package/dist/utils/passkey/nfc/index.js.map +1 -0
- package/dist/utils/passkey/nfc/parseResponses.d.ts +7 -0
- package/dist/utils/passkey/nfc/parseResponses.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/parseResponses.js +18 -0
- package/dist/utils/passkey/nfc/parseResponses.js.map +1 -0
- package/dist/utils/passkey/nfc/types.d.ts +9 -0
- package/dist/utils/passkey/nfc/types.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/types.js +2 -0
- package/dist/utils/passkey/nfc/types.js.map +1 -0
- package/dist/utils/passkey/nfc/webauthnResponses.d.ts +8 -0
- package/dist/utils/passkey/nfc/webauthnResponses.d.ts.map +1 -0
- package/dist/utils/passkey/nfc/webauthnResponses.js +29 -0
- package/dist/utils/passkey/nfc/webauthnResponses.js.map +1 -0
- package/dist/utils/passkey/secp256r1.d.ts.map +1 -1
- package/dist/utils/passkey/secp256r1.js +0 -1
- package/dist/utils/passkey/secp256r1.js.map +1 -1
- package/dist/utils/pdas/index.d.ts +0 -1
- package/dist/utils/pdas/index.d.ts.map +1 -1
- package/dist/utils/pdas/index.js +0 -1
- package/dist/utils/pdas/index.js.map +1 -1
- package/dist/utils/verify.d.ts +18 -4
- package/dist/utils/verify.d.ts.map +1 -1
- package/dist/utils/verify.js +113 -7
- package/dist/utils/verify.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PublicKeyCredentialRequestOptionsJSON } from "@simplewebauthn/browser";
|
|
2
|
+
type NfcWebAuthnClientFields = {
|
|
3
|
+
origin: string;
|
|
4
|
+
crossOrigin?: boolean;
|
|
5
|
+
topOrigin?: string;
|
|
6
|
+
};
|
|
7
|
+
export type PublicKeyCredentialRequestOptionsJSONWithNfc = PublicKeyCredentialRequestOptionsJSON & NfcWebAuthnClientFields;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/passkey/nfc/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,yBAAyB,CAAC;AAErF,KAAK,uBAAuB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,4CAA4C,GACtD,qCAAqC,GAAG,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/utils/passkey/nfc/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AuthenticationResponseJSON } from "@simplewebauthn/browser";
|
|
2
|
+
import type { AuthenticatorGetAssertionResponse } from "./getAssertion.js";
|
|
3
|
+
export declare function toAuthenticationResponseJSON(input: {
|
|
4
|
+
assertion: AuthenticatorGetAssertionResponse;
|
|
5
|
+
credentialId?: Uint8Array;
|
|
6
|
+
clientDataJSON: string;
|
|
7
|
+
}): AuthenticationResponseJSON;
|
|
8
|
+
//# sourceMappingURL=webauthnResponses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webauthnResponses.d.ts","sourceRoot":"","sources":["../../../../src/utils/passkey/nfc/webauthnResponses.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,mBAAmB,CAAC;AAI3E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,SAAS,EAAE,iCAAiC,CAAC;IAC7C,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,0BAA0B,CAiC7B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { utf8ToBytes } from "@noble/hashes/utils.js";
|
|
2
|
+
import { bufferToBase64URLString } from "@simplewebauthn/browser";
|
|
3
|
+
import { ApduError } from "./errors.js";
|
|
4
|
+
import { parseAuthenticatorDataExtensions } from "./authDataExtensions.js";
|
|
5
|
+
export function toAuthenticationResponseJSON(input) {
|
|
6
|
+
const { assertion, credentialId: credentialIdArg, clientDataJSON } = input;
|
|
7
|
+
const clientExtensionResults = parseAuthenticatorDataExtensions(assertion.authData);
|
|
8
|
+
const credBytes = assertion.credential?.id ??
|
|
9
|
+
credentialIdArg ??
|
|
10
|
+
(() => {
|
|
11
|
+
throw new ApduError("Assertion response missing credential id; set credentialId (base64url) on the request object or use a token that returns it in CBOR");
|
|
12
|
+
})();
|
|
13
|
+
const idStr = bufferToBase64URLString(credBytes.buffer);
|
|
14
|
+
return {
|
|
15
|
+
id: idStr,
|
|
16
|
+
rawId: idStr,
|
|
17
|
+
type: "public-key",
|
|
18
|
+
clientExtensionResults,
|
|
19
|
+
response: {
|
|
20
|
+
clientDataJSON: bufferToBase64URLString(utf8ToBytes(clientDataJSON).buffer),
|
|
21
|
+
authenticatorData: bufferToBase64URLString(assertion.authData.buffer),
|
|
22
|
+
signature: bufferToBase64URLString(assertion.signature.buffer),
|
|
23
|
+
userHandle: assertion.user?.id !== undefined
|
|
24
|
+
? bufferToBase64URLString(assertion.user.id.buffer)
|
|
25
|
+
: undefined,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=webauthnResponses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webauthnResponses.js","sourceRoot":"","sources":["../../../../src/utils/passkey/nfc/webauthnResponses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAmC,MAAM,yBAAyB,CAAC;AAEnG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,UAAU,4BAA4B,CAAC,KAI5C;IACC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAE3E,MAAM,sBAAsB,GAAG,gCAAgC,CAC7D,SAAS,CAAC,QAAQ,CACsB,CAAC;IAE3C,MAAM,SAAS,GACb,SAAS,CAAC,UAAU,EAAE,EAAE;QACxB,eAAe;QACf,CAAC,GAAG,EAAE;YACJ,MAAM,IAAI,SAAS,CACjB,qIAAqI,CACtI,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAG,uBAAuB,CAAC,SAAS,CAAC,MAAqB,CAAC,CAAC;IAEvE,OAAO;QACL,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,YAAY;QAClB,sBAAsB;QACtB,QAAQ,EAAE;YACR,cAAc,EAAE,uBAAuB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;YAC3E,iBAAiB,EAAE,uBAAuB,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAqB,CAAC;YACpF,SAAS,EAAE,uBAAuB,CAAC,SAAS,CAAC,SAAS,CAAC,MAAqB,CAAC;YAC7E,UAAU,EACR,SAAS,CAAC,IAAI,EAAE,EAAE,KAAK,SAAS;gBAC9B,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAqB,CAAC;gBAClE,CAAC,CAAC,SAAS;SAChB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secp256r1.d.ts","sourceRoot":"","sources":["../../../src/utils/passkey/secp256r1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAqB,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EAAE,yBAAyB,EAAyB,MAAM,cAAc,CAAC;AAOhF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"secp256r1.d.ts","sourceRoot":"","sources":["../../../src/utils/passkey/secp256r1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAqB,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EAAE,yBAAyB,EAAyB,MAAM,cAAc,CAAC;AAOhF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AA4CtE,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,UAAU,CAAC,CAItB;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,UAAU,CAAC;CACtB,GAAG,OAAO,CAAC,UAAU,CAAC,CActB;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,eAAe,EAAE,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAC;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,EAAE,UAAU,CAAC;CACrC,CAAC;AAEF,wBAAsB,2CAA2C,CAAC,KAAK,EAAE;IACvE,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,0BAA0B,CAAC;CACtC,GAAG,OAAO,CAAC,6BAA6B,CAAC,CASzC"}
|
|
@@ -3,7 +3,6 @@ import { getSecp256r1VerifyInstruction } from "../../instructions/internal/secp2
|
|
|
3
3
|
import { SECP256R1_PROGRAM_ADDRESS, TRANSFER_ACTION_BYTES } from "../consts.js";
|
|
4
4
|
import { base64URLStringToBuffer, convertSignatureDERtoRS, getSecp256r1Message, parseWebAuthnClientData, } from "./internal.js";
|
|
5
5
|
import {} from "../../instructions/transfer.js";
|
|
6
|
-
import { findDomainConfigPda } from "../pdas/domainConfig.js";
|
|
7
6
|
import { sha256 } from "@noble/hashes/sha2.js";
|
|
8
7
|
function concatBytes(...parts) {
|
|
9
8
|
const total = parts.reduce((sum, part) => sum + part.length, 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secp256r1.js","sourceRoot":"","sources":["../../../src/utils/passkey/secp256r1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAkC,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAwB,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"secp256r1.js","sourceRoot":"","sources":["../../../src/utils/passkey/secp256r1.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/pdas/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/pdas/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
|
package/dist/utils/pdas/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/pdas/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/pdas/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA"}
|
package/dist/utils/verify.d.ts
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
export
|
|
3
|
-
export declare function verifyLocal(params: URLSearchParams): {
|
|
4
|
-
isVerified: boolean;
|
|
1
|
+
import { type Rpc, type SolanaRpcApi } from "@solana/kit";
|
|
2
|
+
export type VerifyWithChallengeResponseResult = {
|
|
5
3
|
publicKey: string;
|
|
4
|
+
isVerified: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type VerifyDynamicUrlResult = VerifyWithChallengeResponseResult & {
|
|
6
7
|
counter: number;
|
|
7
8
|
};
|
|
9
|
+
export type VerifyDynamicUrlCallback = (params: URLSearchParams) => Promise<VerifyDynamicUrlResult>;
|
|
10
|
+
export declare function verifyDynamicUrl(params: URLSearchParams, callback?: VerifyDynamicUrlCallback): Promise<VerifyDynamicUrlResult>;
|
|
11
|
+
export declare function verifyDynamicUrlWithoutCounterCheck(params: URLSearchParams): VerifyDynamicUrlResult;
|
|
12
|
+
export type GetPublicKeyFromCredentialIdCallback = (credentialId: Base64URLString) => Promise<Base64URLString>;
|
|
13
|
+
export declare function verifyWithChallengeResponse({ rpc, fetchPublicKeyFromCredentialIdCallback, }: {
|
|
14
|
+
rpc?: Rpc<SolanaRpcApi>;
|
|
15
|
+
fetchPublicKeyFromCredentialIdCallback?: GetPublicKeyFromCredentialIdCallback;
|
|
16
|
+
}): Promise<VerifyWithChallengeResponseResult>;
|
|
17
|
+
export declare function verifyWithChallengeResponseOverNfc({ transceive, rpc, fetchPublicKeyFromCredentialIdCallback, }: {
|
|
18
|
+
transceive: (apdu: Uint8Array) => Promise<Uint8Array>;
|
|
19
|
+
rpc?: Rpc<SolanaRpcApi>;
|
|
20
|
+
fetchPublicKeyFromCredentialIdCallback?: GetPublicKeyFromCredentialIdCallback;
|
|
21
|
+
}): Promise<VerifyWithChallengeResponseResult>;
|
|
8
22
|
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/utils/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/utils/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,GAAG,EACR,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAyBrB,MAAM,MAAM,iCAAiC,GAAG;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,iCAAiC,GAAG;IACvE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,CACrC,MAAM,EAAE,eAAe,KACpB,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAgDrC,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,EACvB,QAAQ,GAAE,wBAA0D,GACnE,OAAO,CAAC,sBAAsB,CAAC,CAEjC;AA+BD,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,eAAe,GACtB,sBAAsB,CAoDxB;AAED,MAAM,MAAM,oCAAoC,GAAG,CACjD,YAAY,EAAE,eAAe,KAC1B,OAAO,CAAC,eAAe,CAAC,CAAC;AAsI9B,wBAAsB,2BAA2B,CAAC,EAChD,GAAG,EACH,sCAAsC,GACvC,EAAE;IACD,GAAG,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACxB,sCAAsC,CAAC,EAAE,oCAAoC,CAAC;CAC/E,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAwB7C;AAiCD,wBAAsB,kCAAkC,CAAC,EACvD,UAAU,EACV,GAAG,EACH,sCAAsC,GACvC,EAAE;IACD,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,GAAG,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACxB,sCAAsC,CAAC,EAAE,oCAAoC,CAAC;CAC/E,GAAG,OAAO,CAAC,iCAAiC,CAAC,CA0B7C"}
|
package/dist/utils/verify.js
CHANGED
|
@@ -1,11 +1,26 @@
|
|
|
1
|
-
import { Endian, getU32Encoder, } from "@solana/kit";
|
|
2
|
-
import { base64URLStringToBuffer, normalizeSignatureToLowS, } from "./passkey/internal.js";
|
|
1
|
+
import { Endian, getBase64Decoder, getBase64Encoder, getU32Encoder, } from "@solana/kit";
|
|
2
|
+
import { base64URLStringToBuffer, convertSignatureDERtoRS, getSecp256r1Message, normalizeSignatureToLowS, parseWebAuthnClientData, } from "./passkey/internal.js";
|
|
3
3
|
import { p256 } from "@noble/curves/nist.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
import { startAuthentication, bufferToBase64URLString, } from "@simplewebauthn/browser";
|
|
5
|
+
import { getAssetDecoder, PHYGITAL_TOKEN_PROGRAM_ADDRESS, } from "../generated/index.js";
|
|
6
|
+
import { authenticateWithNfc, } from "./passkey/nfc/index.js";
|
|
7
|
+
const DEFAULT_VERIFY_DYNAMIC_URL_ENDPOINT = `https://revibase.com/api/verifyDynamicUrl`;
|
|
8
|
+
const defaultVerifyDynamicUrlCallback = async (params) => {
|
|
9
|
+
const url = new URL(DEFAULT_VERIFY_DYNAMIC_URL_ENDPOINT);
|
|
10
|
+
for (const [key, value] of params.entries()) {
|
|
11
|
+
url.searchParams.set(key, value);
|
|
12
|
+
}
|
|
13
|
+
const response = await fetch(url.toString());
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
const error = (await response.json());
|
|
16
|
+
throw new Error(error.error);
|
|
17
|
+
}
|
|
18
|
+
return (await response.json());
|
|
19
|
+
};
|
|
20
|
+
export async function verifyDynamicUrl(params, callback = defaultVerifyDynamicUrlCallback) {
|
|
21
|
+
return callback(params);
|
|
7
22
|
}
|
|
8
|
-
export function
|
|
23
|
+
export function verifyDynamicUrlWithoutCounterCheck(params) {
|
|
9
24
|
const publicKey = params.get("pk");
|
|
10
25
|
const signature = params.get("s");
|
|
11
26
|
const counter = params.get("c");
|
|
@@ -39,7 +54,98 @@ export function verifyLocal(params) {
|
|
|
39
54
|
return {
|
|
40
55
|
isVerified,
|
|
41
56
|
publicKey,
|
|
42
|
-
counter: currentCounter
|
|
57
|
+
counter: currentCounter,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function fetchPublicKeyFromCredentialId(credentialId, rpc) {
|
|
61
|
+
if (!rpc)
|
|
62
|
+
return null;
|
|
63
|
+
const data = await rpc
|
|
64
|
+
.getProgramAccounts(PHYGITAL_TOKEN_PROGRAM_ADDRESS, {
|
|
65
|
+
encoding: "base64",
|
|
66
|
+
filters: [
|
|
67
|
+
{ dataSize: BigInt(179) },
|
|
68
|
+
{
|
|
69
|
+
memcmp: {
|
|
70
|
+
encoding: "base64",
|
|
71
|
+
offset: BigInt(115),
|
|
72
|
+
bytes: getBase64Decoder().decode(base64URLStringToBuffer(credentialId)),
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
})
|
|
77
|
+
.send();
|
|
78
|
+
if (!data.length) {
|
|
79
|
+
throw new Error("No account found.");
|
|
80
|
+
}
|
|
81
|
+
const asset = getAssetDecoder().decode(getBase64Encoder().encode(data[0].account.data[0]));
|
|
82
|
+
return bufferToBase64URLString(new Uint8Array(asset.publicKey[0]).buffer);
|
|
83
|
+
}
|
|
84
|
+
async function verifyAuthenticationResponse({ response, expectedChallenge, rpc, fetchPublicKeyFromCredentialIdCallback, }) {
|
|
85
|
+
const clientData = parseWebAuthnClientData(response.response.clientDataJSON);
|
|
86
|
+
if (clientData.challenge !== expectedChallenge) {
|
|
87
|
+
throw new Error("Invalid Signature.");
|
|
88
|
+
}
|
|
89
|
+
const signature = convertSignatureDERtoRS(base64URLStringToBuffer(response.response.signature));
|
|
90
|
+
const message = getSecp256r1Message(response);
|
|
91
|
+
const publicKey = await (fetchPublicKeyFromCredentialIdCallback?.(response.id) ?? fetchPublicKeyFromCredentialId(response.id, rpc));
|
|
92
|
+
if (!publicKey) {
|
|
93
|
+
throw new Error("Rpc is missing.");
|
|
94
|
+
}
|
|
95
|
+
const isVerified = p256.verify(signature, message, base64URLStringToBuffer(publicKey));
|
|
96
|
+
if (!isVerified) {
|
|
97
|
+
throw new Error("Invalid Signature.");
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
isVerified,
|
|
101
|
+
publicKey,
|
|
43
102
|
};
|
|
44
103
|
}
|
|
104
|
+
export async function verifyWithChallengeResponse({ rpc, fetchPublicKeyFromCredentialIdCallback, }) {
|
|
105
|
+
const challenge = crypto.getRandomValues(new Uint8Array(32));
|
|
106
|
+
const expectedChallenge = bufferToBase64URLString(challenge.buffer);
|
|
107
|
+
const response = await startAuthentication({
|
|
108
|
+
optionsJSON: {
|
|
109
|
+
challenge: expectedChallenge,
|
|
110
|
+
rpId: window.location.hostname,
|
|
111
|
+
userVerification: "preferred",
|
|
112
|
+
allowCredentials: [
|
|
113
|
+
{
|
|
114
|
+
id: "",
|
|
115
|
+
type: "public-key",
|
|
116
|
+
transports: ["nfc"],
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
return verifyAuthenticationResponse({
|
|
122
|
+
response,
|
|
123
|
+
expectedChallenge,
|
|
124
|
+
rpc,
|
|
125
|
+
fetchPublicKeyFromCredentialIdCallback,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
export async function verifyWithChallengeResponseOverNfc({ transceive, rpc, fetchPublicKeyFromCredentialIdCallback, }) {
|
|
129
|
+
const challenge = crypto.getRandomValues(new Uint8Array(32));
|
|
130
|
+
const expectedChallenge = bufferToBase64URLString(challenge.buffer);
|
|
131
|
+
const response = await authenticateWithNfc({
|
|
132
|
+
challenge: expectedChallenge,
|
|
133
|
+
rpId: "revibase.com",
|
|
134
|
+
userVerification: "preferred",
|
|
135
|
+
origin: "https://revibase.com",
|
|
136
|
+
allowCredentials: [
|
|
137
|
+
{
|
|
138
|
+
id: "",
|
|
139
|
+
type: "public-key",
|
|
140
|
+
transports: ["nfc"],
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
}, transceive);
|
|
144
|
+
return verifyAuthenticationResponse({
|
|
145
|
+
response,
|
|
146
|
+
expectedChallenge,
|
|
147
|
+
rpc,
|
|
148
|
+
fetchPublicKeyFromCredentialIdCallback,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
45
151
|
//# 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,aAAa,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/utils/verify.ts"],"names":[],"mappings":"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"}
|