@idos-network/kwil-infra 4.0.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +1 -46
- package/dist/actions/index.d.mts +2 -2
- package/dist/actions/index.mjs +1 -1
- package/dist/actions/index.mjs.map +1 -1
- package/dist/{index-Dwonqvwu.d.mts → index-Dc_rffi1.d.mts} +119 -52
- package/dist/index-Dc_rffi1.d.mts.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/signature-verification/index.d.mts +1 -1
- package/package.json +2 -2
- package/src/actions/actions.test.ts +5 -3
- package/src/actions/actions.ts +313 -23
- package/src/create-kgw-authenticated-fetch.test.ts +46 -26
- package/src/create-kgw-authenticated-fetch.ts +14 -18
- package/src/create-kwil-client.test.ts +40 -0
- package/src/create-kwil-client.ts +25 -0
- package/src/create-kwil-signer.test.ts +2 -67
- package/src/create-kwil-signer.ts +2 -27
- package/src/index.ts +0 -1
- package/dist/index-Dwonqvwu.d.mts.map +0 -1
- package/src/mm-token/create-mm-token-kwil-signer.test.ts +0 -132
- package/src/mm-token/create-mm-token-kwil-signer.ts +0 -161
|
@@ -1,72 +1,7 @@
|
|
|
1
|
-
import { base64UrlEncode, utf8Encode } from "@idos-network/utils/codecs";
|
|
2
|
-
import { MemoryStore } from "@idos-network/utils/store";
|
|
3
1
|
import nacl from "tweetnacl";
|
|
4
|
-
import { describe, expect, it
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
5
3
|
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
import { createClientKwilSigner, createServerKwilSigner } from "./create-kwil-signer";
|
|
9
|
-
import { createMmTokenAuth } from "./mm-token/create-mm-token-kwil-signer";
|
|
10
|
-
|
|
11
|
-
function mmToken(signingKeyByte: number): string {
|
|
12
|
-
return base64UrlEncode(
|
|
13
|
-
utf8Encode(
|
|
14
|
-
JSON.stringify({
|
|
15
|
-
payload: {
|
|
16
|
-
signing_public_key: base64UrlEncode(new Uint8Array(32).fill(signingKeyByte)),
|
|
17
|
-
storage_id: "storage-abc",
|
|
18
|
-
},
|
|
19
|
-
signature: base64UrlEncode(new Uint8Array(64).fill(9)),
|
|
20
|
-
}),
|
|
21
|
-
),
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function kwilClientWithLogout(logoutKGW: () => Promise<void>): KwilActionClient {
|
|
26
|
-
return { client: { auth: { logoutKGW } } } as unknown as KwilActionClient;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
describe("createClientKwilSigner with MM authentication", () => {
|
|
30
|
-
it("reports the MM signing identity as address and public key", async () => {
|
|
31
|
-
const auth = createMmTokenAuth(mmToken(7));
|
|
32
|
-
const logoutKGW = vi.fn(async () => {});
|
|
33
|
-
|
|
34
|
-
const [signer, address, publicKey, walletType] = await createClientKwilSigner(
|
|
35
|
-
new MemoryStore(),
|
|
36
|
-
kwilClientWithLogout(logoutKGW),
|
|
37
|
-
auth,
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
expect(signer).toBe(auth);
|
|
41
|
-
expect(walletType).toBe("MM");
|
|
42
|
-
expect(address).toBe(base64UrlEncode(auth.identifier));
|
|
43
|
-
expect(publicKey).toBe(address);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it("clears the KGW session only when the MM signing identity changes", async () => {
|
|
47
|
-
const store = new MemoryStore();
|
|
48
|
-
const logoutKGW = vi.fn(async () => {});
|
|
49
|
-
const kwilClient = kwilClientWithLogout(logoutKGW);
|
|
50
|
-
|
|
51
|
-
await createClientKwilSigner(store, kwilClient, createMmTokenAuth(mmToken(7)));
|
|
52
|
-
expect(logoutKGW).toHaveBeenCalledTimes(1);
|
|
53
|
-
|
|
54
|
-
// Same identity, freshly issued token: the existing KGW cookie stays valid.
|
|
55
|
-
await createClientKwilSigner(store, kwilClient, createMmTokenAuth(mmToken(7)));
|
|
56
|
-
expect(logoutKGW).toHaveBeenCalledTimes(1);
|
|
57
|
-
|
|
58
|
-
await createClientKwilSigner(store, kwilClient, createMmTokenAuth(mmToken(8)));
|
|
59
|
-
expect(logoutKGW).toHaveBeenCalledTimes(2);
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
describe("createServerKwilSigner with MM authentication", () => {
|
|
64
|
-
it("uses the MM authentication object as the Kwil signer", async () => {
|
|
65
|
-
const auth = createMmTokenAuth(mmToken(7));
|
|
66
|
-
|
|
67
|
-
expect(await createServerKwilSigner(auth)).toEqual([auth, base64UrlEncode(auth.identifier)]);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
4
|
+
import { createServerKwilSigner } from "./create-kwil-signer";
|
|
70
5
|
|
|
71
6
|
describe("createServerKwilSigner with Nacl sign key pair", () => {
|
|
72
7
|
it("emits lowercase hex SignerAddress matching kwild ed25519 @caller format", async () => {
|
|
@@ -6,15 +6,13 @@ import type { KeyPair as NearKeyPair } from "near-api-js";
|
|
|
6
6
|
import type { KeyPair as XrpKeyPair } from "ripple-keypairs/src/types";
|
|
7
7
|
|
|
8
8
|
import { KwilSigner } from "@idos-network/kwil-js";
|
|
9
|
-
import {
|
|
9
|
+
import { bs58Encode, hexDecode, hexEncode } from "@idos-network/utils/codecs";
|
|
10
10
|
import nacl from "tweetnacl";
|
|
11
11
|
|
|
12
12
|
import type { WalletType } from "./actions";
|
|
13
13
|
import type { KwilActionClient } from "./create-kwil-client";
|
|
14
|
-
import type { MmTokenAuth } from "./mm-token/create-mm-token-kwil-signer";
|
|
15
14
|
|
|
16
15
|
import { FaceSignSignerProvider } from "./facesign/facesign-signer";
|
|
17
|
-
import { isMmTokenAuth } from "./mm-token/create-mm-token-kwil-signer";
|
|
18
16
|
import {
|
|
19
17
|
createNearWalletKwilSigner,
|
|
20
18
|
implicitAddressFromPublicKey,
|
|
@@ -30,7 +28,6 @@ export type Wallet =
|
|
|
30
28
|
| JsonRpcSigner
|
|
31
29
|
| NearWallet
|
|
32
30
|
| CustomKwilSigner
|
|
33
|
-
| MmTokenAuth
|
|
34
31
|
| FaceSignSignerProvider;
|
|
35
32
|
|
|
36
33
|
/**
|
|
@@ -111,8 +108,7 @@ export type KwilSignerType =
|
|
|
111
108
|
| nacl.SignKeyPair
|
|
112
109
|
| JsonRpcSigner
|
|
113
110
|
| StellarKeypair
|
|
114
|
-
| XrpKeyPair
|
|
115
|
-
| MmTokenAuth;
|
|
111
|
+
| XrpKeyPair;
|
|
116
112
|
|
|
117
113
|
export type SignerAddress = string;
|
|
118
114
|
export type SignerPublicKey = string | undefined;
|
|
@@ -126,10 +122,6 @@ export type SignerPublicKey = string | undefined;
|
|
|
126
122
|
export async function createServerKwilSigner(
|
|
127
123
|
signer: KwilSignerType,
|
|
128
124
|
): Promise<[KwilSigner, SignerAddress]> {
|
|
129
|
-
if (isMmTokenAuth(signer)) {
|
|
130
|
-
return [signer, base64UrlEncode(signer.identifier)];
|
|
131
|
-
}
|
|
132
|
-
|
|
133
125
|
if (isNaclSignKeyPair(signer)) {
|
|
134
126
|
return [
|
|
135
127
|
new KwilSigner(
|
|
@@ -247,23 +239,6 @@ export async function createClientKwilSigner(
|
|
|
247
239
|
];
|
|
248
240
|
}
|
|
249
241
|
|
|
250
|
-
if (isMmTokenAuth(wallet)) {
|
|
251
|
-
const currentAddress = base64UrlEncode(wallet.identifier);
|
|
252
|
-
const storedAddress = await store.get<string>("signer-address");
|
|
253
|
-
|
|
254
|
-
if (storedAddress !== currentAddress) {
|
|
255
|
-
// A different MM signing identity must not re-use the previous KGW cookie.
|
|
256
|
-
store.set("signer-address", currentAddress);
|
|
257
|
-
try {
|
|
258
|
-
await kwilClient.client.auth.logoutKGW();
|
|
259
|
-
} catch (error) {
|
|
260
|
-
console.log("error logoutKGW", error);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
return [wallet, currentAddress, currentAddress, "MM"];
|
|
265
|
-
}
|
|
266
|
-
|
|
267
242
|
if (isCustomKwilSigner(wallet) || wallet instanceof FaceSignSignerProvider) {
|
|
268
243
|
const storedAddress = await store.get<string>("signer-address");
|
|
269
244
|
|
package/src/index.ts
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-Dwonqvwu.d.mts","names":[],"sources":["../src/wait-for-kwil-tx.ts","../src/create-kwil-client.ts","../src/mm-token/create-mm-token-kwil-signer.ts","../src/create-kgw-authenticated-fetch.ts","../src/create-kwil-signer.ts","../src/near/create-near-wallet-kwil-signer.ts","../src/actions/actions.ts","../src/actions/index.ts"],"mappings":"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"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { base64UrlEncode, utf8Encode } from "@idos-network/utils/codecs";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
createMmTokenAuth,
|
|
6
|
-
isMmTokenAuth,
|
|
7
|
-
mmTokenStorageId,
|
|
8
|
-
type MmTokenEnvelope,
|
|
9
|
-
} from "./create-mm-token-kwil-signer.js";
|
|
10
|
-
|
|
11
|
-
const signingPublicKeyBytes = new Uint8Array(Array.from({ length: 32 }, (_, index) => index + 1));
|
|
12
|
-
const signatureBytes = new Uint8Array(Array.from({ length: 64 }, (_, index) => index + 64));
|
|
13
|
-
|
|
14
|
-
function createEnvelope(overrides: Partial<MmTokenEnvelope> = {}): MmTokenEnvelope {
|
|
15
|
-
return {
|
|
16
|
-
payload: {
|
|
17
|
-
version: 1,
|
|
18
|
-
aud: ["metamask:user-storage:ukyc", "idos:kwil"],
|
|
19
|
-
signing_public_key: base64UrlEncode(signingPublicKeyBytes),
|
|
20
|
-
storage_id: "storage-abc",
|
|
21
|
-
},
|
|
22
|
-
signature: base64UrlEncode(signatureBytes),
|
|
23
|
-
...overrides,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function encodeEnvelope(envelope: MmTokenEnvelope): string {
|
|
28
|
-
return base64UrlEncode(utf8Encode(JSON.stringify(envelope)));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
async function signMessage(signer: ReturnType<typeof createMmTokenAuth>): Promise<Uint8Array> {
|
|
32
|
-
return await (signer.signer as (message: Uint8Array) => Promise<Uint8Array>)(
|
|
33
|
-
new Uint8Array([1, 2, 3]),
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
describe("createMmTokenAuth", () => {
|
|
38
|
-
it("uses mm_token auth type and decoded signing_public_key bytes as identity", () => {
|
|
39
|
-
const signer = createMmTokenAuth(encodeEnvelope(createEnvelope()));
|
|
40
|
-
|
|
41
|
-
expect(signer.signatureType).toBe("mm_token");
|
|
42
|
-
expect(signer.identifier).toEqual(signingPublicKeyBytes);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it("returns the exact encoded envelope bytes from signMessage", async () => {
|
|
46
|
-
const encoded = encodeEnvelope(createEnvelope());
|
|
47
|
-
const signer = createMmTokenAuth(encoded);
|
|
48
|
-
|
|
49
|
-
expect(await signMessage(signer)).toEqual(utf8Encode(encoded));
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
it("accepts a decoded envelope object and returns its encoded form", async () => {
|
|
53
|
-
const envelope = createEnvelope();
|
|
54
|
-
const signer = createMmTokenAuth(envelope);
|
|
55
|
-
|
|
56
|
-
expect(await signMessage(signer)).toEqual(utf8Encode(encodeEnvelope(envelope)));
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it("rejects raw JSON envelope strings (must be base64url-encoded)", () => {
|
|
60
|
-
expect(() => createMmTokenAuth(JSON.stringify(createEnvelope()))).toThrow(
|
|
61
|
-
"Invalid mm_token envelope encoding",
|
|
62
|
-
);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it("rejects invalid signature length", () => {
|
|
66
|
-
expect(() =>
|
|
67
|
-
createMmTokenAuth(
|
|
68
|
-
encodeEnvelope(createEnvelope({ signature: base64UrlEncode(new Uint8Array(63)) })),
|
|
69
|
-
),
|
|
70
|
-
).toThrow("Invalid mm_token signature length: expected 64, got 63");
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it("rejects signing_public_key with the wrong byte length", () => {
|
|
74
|
-
expect(() =>
|
|
75
|
-
createMmTokenAuth(
|
|
76
|
-
encodeEnvelope(
|
|
77
|
-
createEnvelope({
|
|
78
|
-
payload: {
|
|
79
|
-
version: 1,
|
|
80
|
-
signing_public_key: base64UrlEncode(new Uint8Array(31)),
|
|
81
|
-
},
|
|
82
|
-
}),
|
|
83
|
-
),
|
|
84
|
-
),
|
|
85
|
-
).toThrow("Invalid mm_token signing_public_key length: expected 32, got 31");
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it("carries the exact encoded capability as a non-enumerable access token", () => {
|
|
89
|
-
const encoded = encodeEnvelope(createEnvelope());
|
|
90
|
-
const auth = createMmTokenAuth(encoded);
|
|
91
|
-
|
|
92
|
-
expect(auth.accessToken).toBe(encoded);
|
|
93
|
-
expect(isMmTokenAuth(auth)).toBe(true);
|
|
94
|
-
// Blob authorization must not leak through logging or serialization.
|
|
95
|
-
expect(Object.keys(auth)).not.toContain("accessToken");
|
|
96
|
-
expect(JSON.stringify(auth)).not.toContain(encoded);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it("re-encodes a decoded envelope object into the access token", () => {
|
|
100
|
-
const envelope = createEnvelope();
|
|
101
|
-
|
|
102
|
-
expect(createMmTokenAuth(envelope).accessToken).toBe(encodeEnvelope(envelope));
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it("does not recognize a non-MM signer as MM authentication", () => {
|
|
106
|
-
expect(isMmTokenAuth({ identifier: "a", signer: () => {}, signatureType: "ed25519" })).toBe(
|
|
107
|
-
false,
|
|
108
|
-
);
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
it("keeps the token payload and exposes its storage_id", () => {
|
|
112
|
-
const signer = createMmTokenAuth(encodeEnvelope(createEnvelope()));
|
|
113
|
-
|
|
114
|
-
expect(signer.mmTokenPayload.storage_id).toBe("storage-abc");
|
|
115
|
-
expect(mmTokenStorageId(signer)).toBe("storage-abc");
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it("fails when the token payload has no storage_id", () => {
|
|
119
|
-
const signer = createMmTokenAuth(
|
|
120
|
-
encodeEnvelope(
|
|
121
|
-
createEnvelope({
|
|
122
|
-
payload: {
|
|
123
|
-
version: 1,
|
|
124
|
-
signing_public_key: base64UrlEncode(signingPublicKeyBytes),
|
|
125
|
-
},
|
|
126
|
-
}),
|
|
127
|
-
),
|
|
128
|
-
);
|
|
129
|
-
|
|
130
|
-
expect(() => mmTokenStorageId(signer)).toThrow("mm_token payload is missing storage_id");
|
|
131
|
-
});
|
|
132
|
-
});
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { KwilSigner } from "@idos-network/kwil-js";
|
|
2
|
-
import {
|
|
3
|
-
base64UrlDecode,
|
|
4
|
-
base64UrlEncode,
|
|
5
|
-
utf8Decode,
|
|
6
|
-
utf8Encode,
|
|
7
|
-
} from "@idos-network/utils/codecs";
|
|
8
|
-
|
|
9
|
-
const ED25519_PUBLIC_KEY_BYTES = 32;
|
|
10
|
-
const ED25519_SIGNATURE_BYTES = 64;
|
|
11
|
-
|
|
12
|
-
/** Decoded UKYC capability envelope. KGW signature data is base64url(JSON of this). */
|
|
13
|
-
export interface MmTokenEnvelope {
|
|
14
|
-
payload: MmTokenPayload | Record<string, unknown>;
|
|
15
|
-
signature: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface MmTokenPayload {
|
|
19
|
-
signing_public_key: string;
|
|
20
|
-
storage_id?: string;
|
|
21
|
-
[key: string]: unknown;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* One MM/UKYC capability, valid both as a KGW `mm_token` signer and as the
|
|
26
|
-
* `Authorization: AccessToken …` credential for UKYC blob requests.
|
|
27
|
-
*/
|
|
28
|
-
export type MmTokenAuth = KwilSigner & {
|
|
29
|
-
readonly mmTokenPayload: MmTokenPayload | Record<string, unknown>;
|
|
30
|
-
/** Exact encoded envelope KGW and UKYC storage verify. Non-enumerable, so it stays out of logs. */
|
|
31
|
-
readonly accessToken: string;
|
|
32
|
-
/**
|
|
33
|
-
* A capability signs its own envelope, never an arbitrary message. Declared so callers
|
|
34
|
-
* handling a `Wallet` union can keep asking wallets for a message signature.
|
|
35
|
-
*/
|
|
36
|
-
readonly signMessage?: undefined;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export function isMmTokenAuth(value: unknown): value is MmTokenAuth {
|
|
40
|
-
return (
|
|
41
|
-
value !== null &&
|
|
42
|
-
typeof value === "object" &&
|
|
43
|
-
"signatureType" in value &&
|
|
44
|
-
value.signatureType === "mm_token" &&
|
|
45
|
-
"identifier" in value &&
|
|
46
|
-
"signer" in value &&
|
|
47
|
-
typeof (value as Partial<MmTokenAuth>).accessToken === "string"
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** `storage_id` from the capability token used to construct this signer. */
|
|
52
|
-
export function mmTokenStorageId(signer: KwilSigner): string {
|
|
53
|
-
const storageId = (signer as Partial<MmTokenAuth>).mmTokenPayload?.storage_id;
|
|
54
|
-
if (typeof storageId !== "string" || !storageId.trim()) {
|
|
55
|
-
throw new Error("mm_token payload is missing storage_id");
|
|
56
|
-
}
|
|
57
|
-
return storageId.trim();
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function isMmTokenEnvelope(value: unknown): value is MmTokenEnvelope {
|
|
61
|
-
return (
|
|
62
|
-
value !== null &&
|
|
63
|
-
typeof value === "object" &&
|
|
64
|
-
"payload" in value &&
|
|
65
|
-
value.payload !== null &&
|
|
66
|
-
typeof value.payload === "object" &&
|
|
67
|
-
!Array.isArray(value.payload) &&
|
|
68
|
-
"signature" in value &&
|
|
69
|
-
typeof value.signature === "string"
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function parseJson<T>(bytes: Uint8Array, errorMessage: string): T {
|
|
74
|
-
try {
|
|
75
|
-
return JSON.parse(utf8Decode(bytes)) as T;
|
|
76
|
-
} catch (error) {
|
|
77
|
-
throw new Error(errorMessage, { cause: error });
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function decodeBase64Url(value: string, errorMessage: string): Uint8Array {
|
|
82
|
-
try {
|
|
83
|
-
return base64UrlDecode(value);
|
|
84
|
-
} catch (error) {
|
|
85
|
-
throw new Error(errorMessage, { cause: error });
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Build the MM authentication object for one UKYC capability.
|
|
91
|
-
*
|
|
92
|
-
* Pass the MetaMask-issued capability token as a **base64url-encoded** envelope string
|
|
93
|
-
* (what KGW verifies). A decoded `{ payload, signature }` object is also accepted and
|
|
94
|
-
* will be re-encoded.
|
|
95
|
-
*
|
|
96
|
-
* `signMessage` always returns the UTF-8 bytes of that encoded string — KGW ignores the
|
|
97
|
-
* request message and only verifies the envelope.
|
|
98
|
-
*/
|
|
99
|
-
export function createMmTokenAuth(encodedEnvelope: string | MmTokenEnvelope): MmTokenAuth {
|
|
100
|
-
let encodedToken: string;
|
|
101
|
-
let envelope: MmTokenEnvelope;
|
|
102
|
-
|
|
103
|
-
if (typeof encodedEnvelope === "string") {
|
|
104
|
-
const trimmed = encodedEnvelope.trim();
|
|
105
|
-
if (!trimmed) {
|
|
106
|
-
throw new Error("Invalid mm_token envelope: empty");
|
|
107
|
-
}
|
|
108
|
-
encodedToken = trimmed;
|
|
109
|
-
const envelopeBytes = decodeBase64Url(trimmed, "Invalid mm_token envelope encoding");
|
|
110
|
-
const parsed = parseJson<unknown>(envelopeBytes, "Invalid mm_token envelope JSON");
|
|
111
|
-
if (!isMmTokenEnvelope(parsed)) {
|
|
112
|
-
throw new Error("Invalid mm_token envelope: expected payload object and signature string");
|
|
113
|
-
}
|
|
114
|
-
envelope = parsed;
|
|
115
|
-
} else {
|
|
116
|
-
if (!isMmTokenEnvelope(encodedEnvelope)) {
|
|
117
|
-
throw new Error("Invalid mm_token envelope: expected payload object and signature string");
|
|
118
|
-
}
|
|
119
|
-
envelope = encodedEnvelope;
|
|
120
|
-
encodedToken = base64UrlEncode(utf8Encode(JSON.stringify(envelope)));
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// KGW Verify receives UTF-8 of the base64url string, not the decoded JSON bytes.
|
|
124
|
-
const signatureData = utf8Encode(encodedToken);
|
|
125
|
-
|
|
126
|
-
const tokenSignatureBytes = decodeBase64Url(
|
|
127
|
-
envelope.signature,
|
|
128
|
-
"Invalid mm_token envelope signature encoding",
|
|
129
|
-
);
|
|
130
|
-
if (tokenSignatureBytes.length !== ED25519_SIGNATURE_BYTES) {
|
|
131
|
-
throw new Error(
|
|
132
|
-
`Invalid mm_token signature length: expected ${ED25519_SIGNATURE_BYTES}, got ${tokenSignatureBytes.length}`,
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
const signingPublicKey = envelope.payload.signing_public_key;
|
|
137
|
-
if (typeof signingPublicKey !== "string") {
|
|
138
|
-
throw new Error("Invalid mm_token payload: missing signing_public_key");
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const signingPublicKeyBytes = decodeBase64Url(
|
|
142
|
-
signingPublicKey,
|
|
143
|
-
"Invalid mm_token signing_public_key encoding",
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
if (signingPublicKeyBytes.length !== ED25519_PUBLIC_KEY_BYTES) {
|
|
147
|
-
throw new Error(
|
|
148
|
-
`Invalid mm_token signing_public_key length: expected ${ED25519_PUBLIC_KEY_BYTES}, got ${signingPublicKeyBytes.length}`,
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const auth = Object.assign(
|
|
153
|
-
new KwilSigner(async () => signatureData.slice(), signingPublicKeyBytes, "mm_token"),
|
|
154
|
-
{ mmTokenPayload: envelope.payload },
|
|
155
|
-
);
|
|
156
|
-
|
|
157
|
-
return Object.defineProperty(auth, "accessToken", {
|
|
158
|
-
value: encodedToken,
|
|
159
|
-
enumerable: false,
|
|
160
|
-
}) as MmTokenAuth;
|
|
161
|
-
}
|