@opendatalabs/connect 0.7.0 → 0.8.1-canary.1d2cf51
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 +74 -0
- package/package.json +32 -4
- package/dist/core/constants.d.ts +0 -33
- package/dist/core/constants.d.ts.map +0 -1
- package/dist/core/constants.js +0 -25
- package/dist/core/constants.js.map +0 -1
- package/dist/core/errors.d.ts +0 -47
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -50
- package/dist/core/errors.js.map +0 -1
- package/dist/core/grants.d.ts +0 -19
- package/dist/core/grants.d.ts.map +0 -1
- package/dist/core/grants.js +0 -31
- package/dist/core/grants.js.map +0 -1
- package/dist/core/index.d.ts +0 -5
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -4
- package/dist/core/index.js.map +0 -1
- package/dist/core/types.d.ts +0 -131
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/react/ConnectButton.d.ts +0 -27
- package/dist/react/ConnectButton.d.ts.map +0 -1
- package/dist/react/ConnectButton.js +0 -39
- package/dist/react/ConnectButton.js.map +0 -1
- package/dist/react/index.d.ts +0 -4
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js +0 -4
- package/dist/react/index.js.map +0 -1
- package/dist/react/useVanaConnect.d.ts +0 -50
- package/dist/react/useVanaConnect.d.ts.map +0 -1
- package/dist/react/useVanaConnect.js +0 -114
- package/dist/react/useVanaConnect.js.map +0 -1
- package/dist/react/useVanaData.d.ts +0 -69
- package/dist/react/useVanaData.d.ts.map +0 -1
- package/dist/react/useVanaData.js +0 -131
- package/dist/react/useVanaData.js.map +0 -1
- package/dist/server/config.d.ts +0 -36
- package/dist/server/config.d.ts.map +0 -1
- package/dist/server/config.js +0 -44
- package/dist/server/config.js.map +0 -1
- package/dist/server/connect.d.ts +0 -43
- package/dist/server/connect.d.ts.map +0 -1
- package/dist/server/connect.js +0 -98
- package/dist/server/connect.js.map +0 -1
- package/dist/server/data-client.d.ts +0 -31
- package/dist/server/data-client.d.ts.map +0 -1
- package/dist/server/data-client.js +0 -92
- package/dist/server/data-client.js.map +0 -1
- package/dist/server/index.d.ts +0 -8
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -8
- package/dist/server/index.js.map +0 -1
- package/dist/server/manifest-signer.d.ts +0 -25
- package/dist/server/manifest-signer.d.ts.map +0 -1
- package/dist/server/manifest-signer.js +0 -51
- package/dist/server/manifest-signer.js.map +0 -1
- package/dist/server/request-signer.d.ts +0 -31
- package/dist/server/request-signer.d.ts.map +0 -1
- package/dist/server/request-signer.js +0 -69
- package/dist/server/request-signer.js.map +0 -1
- package/dist/server/session-relay.d.ts +0 -39
- package/dist/server/session-relay.d.ts.map +0 -1
- package/dist/server/session-relay.js +0 -74
- package/dist/server/session-relay.js.map +0 -1
- package/dist/server/webhook.d.ts +0 -11
- package/dist/server/webhook.d.ts.map +0 -1
- package/dist/server/webhook.js +0 -18
- package/dist/server/webhook.js.map +0 -1
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { DataClientConfig, DataFetchParams } from "../core/types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Low-level client for the Data Portability Gateway and Personal Servers.
|
|
4
|
-
*
|
|
5
|
-
* @see {@link createDataClient} to create an instance.
|
|
6
|
-
*/
|
|
7
|
-
export interface DataClient {
|
|
8
|
-
/** Resolves a user's Personal Server URL via the gateway. */
|
|
9
|
-
resolveServerUrl(userAddress: string): Promise<string>;
|
|
10
|
-
/** Fetches data for a single scope from a Personal Server. */
|
|
11
|
-
fetchData(params: DataFetchParams): Promise<unknown>;
|
|
12
|
-
/** Lists available scopes on a Personal Server. */
|
|
13
|
-
listScopes(params: {
|
|
14
|
-
serverUrl: string;
|
|
15
|
-
}): Promise<unknown>;
|
|
16
|
-
/** Lists available versions for a scope on a Personal Server. */
|
|
17
|
-
listVersions(params: {
|
|
18
|
-
serverUrl: string;
|
|
19
|
-
scope: string;
|
|
20
|
-
}): Promise<unknown>;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Creates a low-level Data Gateway / Personal Server client.
|
|
24
|
-
*
|
|
25
|
-
* Prefer the high-level {@link getData} function for most use cases.
|
|
26
|
-
*
|
|
27
|
-
* @param config - Data client configuration.
|
|
28
|
-
* @returns A {@link DataClient} instance.
|
|
29
|
-
*/
|
|
30
|
-
export declare function createDataClient(config: DataClientConfig): DataClient;
|
|
31
|
-
//# sourceMappingURL=data-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/server/data-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAG1E;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,6DAA6D;IAC7D,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,8DAA8D;IAC9D,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,mDAAmD;IACnD,UAAU,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,iEAAiE;IACjE,YAAY,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CA0HrE"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { ConnectError, ConnectErrorCode } from "../core/errors.js";
|
|
2
|
-
import { createRequestSigner } from "./request-signer.js";
|
|
3
|
-
/**
|
|
4
|
-
* Creates a low-level Data Gateway / Personal Server client.
|
|
5
|
-
*
|
|
6
|
-
* Prefer the high-level {@link getData} function for most use cases.
|
|
7
|
-
*
|
|
8
|
-
* @param config - Data client configuration.
|
|
9
|
-
* @returns A {@link DataClient} instance.
|
|
10
|
-
*/
|
|
11
|
-
export function createDataClient(config) {
|
|
12
|
-
const gatewayBase = config.gatewayUrl.replace(/\/+$/, "");
|
|
13
|
-
const signer = createRequestSigner({ privateKey: config.privateKey });
|
|
14
|
-
return {
|
|
15
|
-
async resolveServerUrl(userAddress) {
|
|
16
|
-
const res = await fetch(`${gatewayBase}/v1/servers/${userAddress}`);
|
|
17
|
-
if (res.status === 404) {
|
|
18
|
-
throw new ConnectError(`No server registered for ${userAddress}`, ConnectErrorCode.SERVER_NOT_FOUND, 404);
|
|
19
|
-
}
|
|
20
|
-
if (!res.ok) {
|
|
21
|
-
throw new ConnectError(`Gateway error: ${res.status}`, ConnectErrorCode.GATEWAY_ERROR, res.status);
|
|
22
|
-
}
|
|
23
|
-
const envelope = (await res.json());
|
|
24
|
-
return envelope.data.serverUrl;
|
|
25
|
-
},
|
|
26
|
-
async fetchData(params) {
|
|
27
|
-
const base = params.serverUrl.replace(/\/+$/, "");
|
|
28
|
-
const queryParams = new URLSearchParams();
|
|
29
|
-
if (params.fileId)
|
|
30
|
-
queryParams.set("fileId", params.fileId);
|
|
31
|
-
if (params.at)
|
|
32
|
-
queryParams.set("at", params.at);
|
|
33
|
-
const qs = queryParams.toString();
|
|
34
|
-
const uri = `/v1/data/${params.scope}${qs ? `?${qs}` : ""}`;
|
|
35
|
-
const authHeader = await signer.signRequest({
|
|
36
|
-
aud: base,
|
|
37
|
-
method: "GET",
|
|
38
|
-
uri,
|
|
39
|
-
grantId: params.grantId,
|
|
40
|
-
});
|
|
41
|
-
const url = `${base}${uri}`;
|
|
42
|
-
const res = await fetch(url, {
|
|
43
|
-
headers: { Authorization: authHeader },
|
|
44
|
-
});
|
|
45
|
-
if (!res.ok) {
|
|
46
|
-
const body = await res.text().catch(() => "(unreadable)");
|
|
47
|
-
console.error("[data-client] fetchData failed", {
|
|
48
|
-
status: res.status,
|
|
49
|
-
url,
|
|
50
|
-
scope: params.scope,
|
|
51
|
-
grantId: params.grantId,
|
|
52
|
-
body,
|
|
53
|
-
});
|
|
54
|
-
throw new ConnectError(`Data fetch failed: ${res.status}`, ConnectErrorCode.DATA_FETCH_FAILED, res.status);
|
|
55
|
-
}
|
|
56
|
-
return res.json();
|
|
57
|
-
},
|
|
58
|
-
async listScopes(params) {
|
|
59
|
-
const base = params.serverUrl.replace(/\/+$/, "");
|
|
60
|
-
const uri = "/v1/data";
|
|
61
|
-
const authHeader = await signer.signRequest({
|
|
62
|
-
aud: base,
|
|
63
|
-
method: "GET",
|
|
64
|
-
uri,
|
|
65
|
-
});
|
|
66
|
-
const res = await fetch(`${base}${uri}`, {
|
|
67
|
-
headers: { Authorization: authHeader },
|
|
68
|
-
});
|
|
69
|
-
if (!res.ok) {
|
|
70
|
-
throw new ConnectError(`List scopes failed: ${res.status}`, ConnectErrorCode.LIST_SCOPES_FAILED, res.status);
|
|
71
|
-
}
|
|
72
|
-
return res.json();
|
|
73
|
-
},
|
|
74
|
-
async listVersions(params) {
|
|
75
|
-
const base = params.serverUrl.replace(/\/+$/, "");
|
|
76
|
-
const uri = `/v1/data/${params.scope}/versions`;
|
|
77
|
-
const authHeader = await signer.signRequest({
|
|
78
|
-
aud: base,
|
|
79
|
-
method: "GET",
|
|
80
|
-
uri,
|
|
81
|
-
});
|
|
82
|
-
const res = await fetch(`${base}${uri}`, {
|
|
83
|
-
headers: { Authorization: authHeader },
|
|
84
|
-
});
|
|
85
|
-
if (!res.ok) {
|
|
86
|
-
throw new ConnectError(`List versions failed: ${res.status}`, ConnectErrorCode.LIST_VERSIONS_FAILED, res.status);
|
|
87
|
-
}
|
|
88
|
-
return res.json();
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=data-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-client.js","sourceRoot":"","sources":["../../src/server/data-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAkB1D;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAEtE,OAAO;QACL,KAAK,CAAC,gBAAgB,CAAC,WAAmB;YACxC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,eAAe,WAAW,EAAE,CAAC,CAAC;YAEpE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,YAAY,CACpB,4BAA4B,WAAW,EAAE,EACzC,gBAAgB,CAAC,gBAAgB,EACjC,GAAG,CACJ,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,YAAY,CACpB,kBAAkB,GAAG,CAAC,MAAM,EAAE,EAC9B,gBAAgB,CAAC,aAAa,EAC9B,GAAG,CAAC,MAAM,CACX,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAEjC,CAAC;YACF,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAuB;YACrC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,MAAM;gBAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,EAAE;gBAAE,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,YAAY,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAE5D,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;gBAC1C,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,KAAK;gBACb,GAAG;gBACH,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;aACvC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,CAAC;gBAC1D,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE;oBAC9C,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,GAAG;oBACH,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,IAAI;iBACL,CAAC,CAAC;gBACH,MAAM,IAAI,YAAY,CACpB,sBAAsB,GAAG,CAAC,MAAM,EAAE,EAClC,gBAAgB,CAAC,iBAAiB,EAClC,GAAG,CAAC,MAAM,CACX,CAAC;YACJ,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,MAA6B;YAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,UAAU,CAAC;YAEvB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;gBAC1C,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,KAAK;gBACb,GAAG;aACJ,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE;gBACvC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;aACvC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,YAAY,CACpB,uBAAuB,GAAG,CAAC,MAAM,EAAE,EACnC,gBAAgB,CAAC,kBAAkB,EACnC,GAAG,CAAC,MAAM,CACX,CAAC;YACJ,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAGlB;YACC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,YAAY,MAAM,CAAC,KAAK,WAAW,CAAC;YAEhD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;gBAC1C,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,KAAK;gBACb,GAAG;aACJ,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE;gBACvC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;aACvC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,YAAY,CACpB,yBAAyB,GAAG,CAAC,MAAM,EAAE,EACrC,gBAAgB,CAAC,oBAAoB,EACrC,GAAG,CAAC,MAAM,CACX,CAAC;YACJ,CAAC;YAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/server/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { createRequestSigner, type RequestSigner } from "./request-signer.js";
|
|
2
|
-
export { createSessionRelay, type SessionRelay, type RelaySessionInitResult, } from "./session-relay.js";
|
|
3
|
-
export { createDataClient, type DataClient } from "./data-client.js";
|
|
4
|
-
export { connect, getData } from "./connect.js";
|
|
5
|
-
export { signVanaManifest } from "./manifest-signer.js";
|
|
6
|
-
export { createVanaConfig, type VanaConfig } from "./config.js";
|
|
7
|
-
export { verifyWebhook } from "./webhook.js";
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,sBAAsB,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/server/index.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { createRequestSigner } from "./request-signer.js";
|
|
2
|
-
export { createSessionRelay, } from "./session-relay.js";
|
|
3
|
-
export { createDataClient } from "./data-client.js";
|
|
4
|
-
export { connect, getData } from "./connect.js";
|
|
5
|
-
export { signVanaManifest } from "./manifest-signer.js";
|
|
6
|
-
export { createVanaConfig } from "./config.js";
|
|
7
|
-
export { verifyWebhook } from "./webhook.js";
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { VanaManifestConfig, VanaManifestBlock } from "../core/types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Signs a web app manifest block for Vana Desktop App identity verification.
|
|
4
|
-
*
|
|
5
|
-
* Include the returned block under the `vana` key in your web app manifest JSON,
|
|
6
|
-
* and make sure your HTML has `<link rel="manifest" href="/manifest.json">`.
|
|
7
|
-
*
|
|
8
|
-
* @param config - Manifest configuration including private key and app URLs.
|
|
9
|
-
* @returns A signed {@link VanaManifestBlock}.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* const vanaBlock = await signVanaManifest({
|
|
14
|
-
* privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
|
|
15
|
-
* appUrl: "https://yourapp.com",
|
|
16
|
-
* privacyPolicyUrl: "https://yourapp.com/privacy",
|
|
17
|
-
* termsUrl: "https://yourapp.com/terms",
|
|
18
|
-
* supportUrl: "https://yourapp.com/support",
|
|
19
|
-
* webhookUrl: "https://yourapp.com/api/webhook",
|
|
20
|
-
* });
|
|
21
|
-
* const manifest = { name: "Your App", vana: vanaBlock };
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export declare function signVanaManifest(config: VanaManifestConfig): Promise<VanaManifestBlock>;
|
|
25
|
-
//# sourceMappingURL=manifest-signer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-signer.d.ts","sourceRoot":"","sources":["../../src/server/manifest-signer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAa9E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAgB5B"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { privateKeyToAccount } from "viem/accounts";
|
|
2
|
-
function canonicalizeJson(obj) {
|
|
3
|
-
if (obj === null || typeof obj !== "object")
|
|
4
|
-
return obj;
|
|
5
|
-
if (Array.isArray(obj))
|
|
6
|
-
return obj.map(canonicalizeJson);
|
|
7
|
-
const sorted = {};
|
|
8
|
-
for (const key of Object.keys(obj).sort()) {
|
|
9
|
-
if (key === "signature")
|
|
10
|
-
continue;
|
|
11
|
-
sorted[key] = canonicalizeJson(obj[key]);
|
|
12
|
-
}
|
|
13
|
-
return sorted;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Signs a web app manifest block for Vana Desktop App identity verification.
|
|
17
|
-
*
|
|
18
|
-
* Include the returned block under the `vana` key in your web app manifest JSON,
|
|
19
|
-
* and make sure your HTML has `<link rel="manifest" href="/manifest.json">`.
|
|
20
|
-
*
|
|
21
|
-
* @param config - Manifest configuration including private key and app URLs.
|
|
22
|
-
* @returns A signed {@link VanaManifestBlock}.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* const vanaBlock = await signVanaManifest({
|
|
27
|
-
* privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
|
|
28
|
-
* appUrl: "https://yourapp.com",
|
|
29
|
-
* privacyPolicyUrl: "https://yourapp.com/privacy",
|
|
30
|
-
* termsUrl: "https://yourapp.com/terms",
|
|
31
|
-
* supportUrl: "https://yourapp.com/support",
|
|
32
|
-
* webhookUrl: "https://yourapp.com/api/webhook",
|
|
33
|
-
* });
|
|
34
|
-
* const manifest = { name: "Your App", vana: vanaBlock };
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export async function signVanaManifest(config) {
|
|
38
|
-
const account = privateKeyToAccount(config.privateKey);
|
|
39
|
-
const block = {
|
|
40
|
-
appUrl: config.appUrl,
|
|
41
|
-
privacyPolicyUrl: config.privacyPolicyUrl,
|
|
42
|
-
supportUrl: config.supportUrl,
|
|
43
|
-
termsUrl: config.termsUrl,
|
|
44
|
-
webhookUrl: config.webhookUrl,
|
|
45
|
-
};
|
|
46
|
-
const canonical = canonicalizeJson(block);
|
|
47
|
-
const message = JSON.stringify(canonical);
|
|
48
|
-
const signature = await account.signMessage({ message });
|
|
49
|
-
return { ...block, signature };
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=manifest-signer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-signer.js","sourceRoot":"","sources":["../../src/server/manifest-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGpD,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,IAAI,GAAG,KAAK,WAAW;YAAE,SAAS;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA0B;IAE1B,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,OAAO,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { RequestSignerConfig } from "../core/types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Generates `Web3Signed` authorization headers for protocol requests.
|
|
4
|
-
*
|
|
5
|
-
* @see {@link createRequestSigner} to create an instance.
|
|
6
|
-
*/
|
|
7
|
-
export interface RequestSigner {
|
|
8
|
-
/**
|
|
9
|
-
* Signs a request and returns the `Authorization` header value.
|
|
10
|
-
*
|
|
11
|
-
* @param params - Request metadata (audience, method, URI, optional body and grantId).
|
|
12
|
-
* @returns A `Web3Signed <payload>.<signature>` header string.
|
|
13
|
-
*/
|
|
14
|
-
signRequest(params: {
|
|
15
|
-
aud: string;
|
|
16
|
-
method: string;
|
|
17
|
-
uri: string;
|
|
18
|
-
body?: string;
|
|
19
|
-
grantId?: string;
|
|
20
|
-
}): Promise<string>;
|
|
21
|
-
/** The wallet address derived from the private key. */
|
|
22
|
-
readonly address: `0x${string}`;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Creates a request signer that generates `Web3Signed` authorization headers.
|
|
26
|
-
*
|
|
27
|
-
* @param config - Configuration containing the builder's private key.
|
|
28
|
-
* @returns A {@link RequestSigner} instance.
|
|
29
|
-
*/
|
|
30
|
-
export declare function createRequestSigner(config: RequestSignerConfig): RequestSigner;
|
|
31
|
-
//# sourceMappingURL=request-signer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-signer.d.ts","sourceRoot":"","sources":["../../src/server/request-signer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA+B5D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,GAC1B,aAAa,CAsCf"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { privateKeyToAccount } from "viem/accounts";
|
|
3
|
-
function base64urlEncode(input) {
|
|
4
|
-
return Buffer.from(input, "utf-8")
|
|
5
|
-
.toString("base64")
|
|
6
|
-
.replace(/\+/g, "-")
|
|
7
|
-
.replace(/\//g, "_")
|
|
8
|
-
.replace(/=+$/, "");
|
|
9
|
-
}
|
|
10
|
-
function canonicalizeJson(obj) {
|
|
11
|
-
if (obj === null || typeof obj !== "object")
|
|
12
|
-
return obj;
|
|
13
|
-
if (Array.isArray(obj))
|
|
14
|
-
return obj.map(canonicalizeJson);
|
|
15
|
-
const sorted = {};
|
|
16
|
-
for (const key of Object.keys(obj).sort()) {
|
|
17
|
-
if (key === "signature")
|
|
18
|
-
continue;
|
|
19
|
-
sorted[key] = canonicalizeJson(obj[key]);
|
|
20
|
-
}
|
|
21
|
-
return sorted;
|
|
22
|
-
}
|
|
23
|
-
function computeBodyHash(body) {
|
|
24
|
-
if (!body || body.length === 0) {
|
|
25
|
-
return "";
|
|
26
|
-
}
|
|
27
|
-
const parsed = JSON.parse(body);
|
|
28
|
-
const canonical = canonicalizeJson(parsed);
|
|
29
|
-
const canonicalStr = JSON.stringify(canonical);
|
|
30
|
-
return createHash("sha256").update(canonicalStr).digest("hex");
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Creates a request signer that generates `Web3Signed` authorization headers.
|
|
34
|
-
*
|
|
35
|
-
* @param config - Configuration containing the builder's private key.
|
|
36
|
-
* @returns A {@link RequestSigner} instance.
|
|
37
|
-
*/
|
|
38
|
-
export function createRequestSigner(config) {
|
|
39
|
-
const account = privateKeyToAccount(config.privateKey);
|
|
40
|
-
return {
|
|
41
|
-
address: account.address,
|
|
42
|
-
async signRequest(params) {
|
|
43
|
-
const now = Math.floor(Date.now() / 1000);
|
|
44
|
-
const payload = {
|
|
45
|
-
aud: params.aud,
|
|
46
|
-
bodyHash: computeBodyHash(params.body),
|
|
47
|
-
exp: now + 300,
|
|
48
|
-
iat: now,
|
|
49
|
-
method: params.method,
|
|
50
|
-
uri: params.uri,
|
|
51
|
-
};
|
|
52
|
-
if (params.grantId !== undefined) {
|
|
53
|
-
payload["grantId"] = params.grantId;
|
|
54
|
-
}
|
|
55
|
-
// Sort keys for deterministic serialization
|
|
56
|
-
const sortedPayload = Object.keys(payload)
|
|
57
|
-
.sort()
|
|
58
|
-
.reduce((acc, key) => {
|
|
59
|
-
acc[key] = payload[key];
|
|
60
|
-
return acc;
|
|
61
|
-
}, {});
|
|
62
|
-
const payloadJson = JSON.stringify(sortedPayload);
|
|
63
|
-
const payloadBase64 = base64urlEncode(payloadJson);
|
|
64
|
-
const signature = await account.signMessage({ message: payloadBase64 });
|
|
65
|
-
return `Web3Signed ${payloadBase64}.${signature}`;
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=request-signer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-signer.js","sourceRoot":"","sources":["../../src/server/request-signer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { SessionRelayConfig, SessionInitParams, SessionPollResult } from "../core/types.js";
|
|
2
|
-
/** Raw response from the Session Relay init endpoint. */
|
|
3
|
-
export interface RelaySessionInitResult {
|
|
4
|
-
sessionId: string;
|
|
5
|
-
deepLinkUrl: string;
|
|
6
|
-
expiresAt: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Low-level client for the Session Relay service.
|
|
10
|
-
*
|
|
11
|
-
* @see {@link createSessionRelay} to create an instance.
|
|
12
|
-
*/
|
|
13
|
-
export interface SessionRelay {
|
|
14
|
-
/** Creates a new session and returns the raw relay response (sessionId, deepLinkUrl, expiresAt). */
|
|
15
|
-
initSession(params: SessionInitParams): Promise<RelaySessionInitResult>;
|
|
16
|
-
/** Polls the session status once. */
|
|
17
|
-
pollSession(sessionId: string): Promise<SessionPollResult>;
|
|
18
|
-
/**
|
|
19
|
-
* Polls until the session reaches a terminal state (`approved`, `denied`, or `expired`).
|
|
20
|
-
*
|
|
21
|
-
* @param sessionId - The session to poll.
|
|
22
|
-
* @param opts - Optional polling interval (default 2 s) and timeout (default 15 min).
|
|
23
|
-
* @throws {@link ConnectError} with code `POLL_TIMEOUT` if the timeout is exceeded.
|
|
24
|
-
*/
|
|
25
|
-
pollUntilComplete(sessionId: string, opts?: {
|
|
26
|
-
interval?: number;
|
|
27
|
-
timeout?: number;
|
|
28
|
-
}): Promise<SessionPollResult>;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Creates a low-level Session Relay client.
|
|
32
|
-
*
|
|
33
|
-
* Prefer the high-level {@link connect} function for most use cases.
|
|
34
|
-
*
|
|
35
|
-
* @param config - Session Relay configuration.
|
|
36
|
-
* @returns A {@link SessionRelay} instance.
|
|
37
|
-
*/
|
|
38
|
-
export declare function createSessionRelay(config: SessionRelayConfig): SessionRelay;
|
|
39
|
-
//# sourceMappingURL=session-relay.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-relay.d.ts","sourceRoot":"","sources":["../../src/server/session-relay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAG1B,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,oGAAoG;IACpG,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACxE,qCAAqC;IACrC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3D;;;;;;OAMG;IACH,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CA8F3E"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ConnectError, ConnectErrorCode } from "../core/errors.js";
|
|
2
|
-
import { createRequestSigner } from "./request-signer.js";
|
|
3
|
-
/**
|
|
4
|
-
* Creates a low-level Session Relay client.
|
|
5
|
-
*
|
|
6
|
-
* Prefer the high-level {@link connect} function for most use cases.
|
|
7
|
-
*
|
|
8
|
-
* @param config - Session Relay configuration.
|
|
9
|
-
* @returns A {@link SessionRelay} instance.
|
|
10
|
-
*/
|
|
11
|
-
export function createSessionRelay(config) {
|
|
12
|
-
const baseUrl = config.sessionRelayUrl.replace(/\/+$/, "");
|
|
13
|
-
const signer = createRequestSigner({ privateKey: config.privateKey });
|
|
14
|
-
return {
|
|
15
|
-
async initSession(params) {
|
|
16
|
-
const body = JSON.stringify({
|
|
17
|
-
granteeAddress: config.granteeAddress,
|
|
18
|
-
scopes: params.scopes,
|
|
19
|
-
...(params.webhookUrl && { webhookUrl: params.webhookUrl }),
|
|
20
|
-
...(params.appUserId && { app_user_id: params.appUserId }),
|
|
21
|
-
});
|
|
22
|
-
const authHeader = await signer.signRequest({
|
|
23
|
-
aud: baseUrl,
|
|
24
|
-
method: "POST",
|
|
25
|
-
uri: "/v1/session/init",
|
|
26
|
-
body,
|
|
27
|
-
});
|
|
28
|
-
const res = await fetch(`${baseUrl}/v1/session/init`, {
|
|
29
|
-
method: "POST",
|
|
30
|
-
headers: {
|
|
31
|
-
"Content-Type": "application/json",
|
|
32
|
-
Authorization: authHeader,
|
|
33
|
-
},
|
|
34
|
-
body,
|
|
35
|
-
});
|
|
36
|
-
if (!res.ok) {
|
|
37
|
-
const errorBody = await res.json().catch(() => ({}));
|
|
38
|
-
const errorMsg = errorBody.error &&
|
|
39
|
-
typeof errorBody.error === "object"
|
|
40
|
-
? errorBody.error
|
|
41
|
-
.message
|
|
42
|
-
: `Session init failed: ${res.status}`;
|
|
43
|
-
throw new ConnectError(errorMsg, errorBody.error
|
|
44
|
-
?.errorCode ?? ConnectErrorCode.SESSION_INIT_FAILED, res.status);
|
|
45
|
-
}
|
|
46
|
-
return (await res.json());
|
|
47
|
-
},
|
|
48
|
-
async pollSession(sessionId) {
|
|
49
|
-
const res = await fetch(`${baseUrl}/v1/session/${sessionId}/poll`);
|
|
50
|
-
if (!res.ok) {
|
|
51
|
-
const errorBody = await res.json().catch(() => ({}));
|
|
52
|
-
throw new ConnectError(`Poll failed: ${res.status}`, errorBody.error
|
|
53
|
-
?.errorCode ?? ConnectErrorCode.POLL_FAILED, res.status);
|
|
54
|
-
}
|
|
55
|
-
return (await res.json());
|
|
56
|
-
},
|
|
57
|
-
async pollUntilComplete(sessionId, opts) {
|
|
58
|
-
const interval = opts?.interval ?? 2000;
|
|
59
|
-
const timeout = opts?.timeout ?? 900_000; // 15 minutes
|
|
60
|
-
const deadline = Date.now() + timeout;
|
|
61
|
-
while (Date.now() < deadline) {
|
|
62
|
-
const result = await this.pollSession(sessionId);
|
|
63
|
-
if (result.status === "approved" ||
|
|
64
|
-
result.status === "denied" ||
|
|
65
|
-
result.status === "expired") {
|
|
66
|
-
return result;
|
|
67
|
-
}
|
|
68
|
-
await new Promise((resolve) => setTimeout(resolve, interval));
|
|
69
|
-
}
|
|
70
|
-
throw new ConnectError("Polling timed out", ConnectErrorCode.POLL_TIMEOUT);
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=session-relay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-relay.js","sourceRoot":"","sources":["../../src/server/session-relay.ts"],"names":[],"mappings":"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"}
|
package/dist/server/webhook.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Verifies a webhook payload signature.
|
|
3
|
-
*
|
|
4
|
-
* @param payload - The raw request body as a string or Buffer.
|
|
5
|
-
* @param signature - The signature from the webhook request header.
|
|
6
|
-
* @param secret - The shared secret used to verify the signature.
|
|
7
|
-
* @returns The verified payload.
|
|
8
|
-
* @throws {@link ConnectError} with code `WEBHOOK_INVALID` — this function is not yet implemented.
|
|
9
|
-
*/
|
|
10
|
-
export declare function verifyWebhook(payload: string | Buffer, signature: string, secret: string): unknown;
|
|
11
|
-
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAUT"}
|
package/dist/server/webhook.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ConnectError, ConnectErrorCode } from "../core/errors.js";
|
|
2
|
-
/**
|
|
3
|
-
* Verifies a webhook payload signature.
|
|
4
|
-
*
|
|
5
|
-
* @param payload - The raw request body as a string or Buffer.
|
|
6
|
-
* @param signature - The signature from the webhook request header.
|
|
7
|
-
* @param secret - The shared secret used to verify the signature.
|
|
8
|
-
* @returns The verified payload.
|
|
9
|
-
* @throws {@link ConnectError} with code `WEBHOOK_INVALID` — this function is not yet implemented.
|
|
10
|
-
*/
|
|
11
|
-
export function verifyWebhook(payload, signature, secret) {
|
|
12
|
-
void payload;
|
|
13
|
-
void signature;
|
|
14
|
-
void secret;
|
|
15
|
-
// TODO: Implement when Data Portability Protocol webhook signing spec is available
|
|
16
|
-
throw new ConnectError("verifyWebhook() is not yet implemented. Webhook signing scheme is pending protocol specification.", ConnectErrorCode.WEBHOOK_INVALID);
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=webhook.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/server/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAwB,EACxB,SAAiB,EACjB,MAAc;IAEd,KAAK,OAAO,CAAC;IACb,KAAK,SAAS,CAAC;IACf,KAAK,MAAM,CAAC;IAEZ,mFAAmF;IACnF,MAAM,IAAI,YAAY,CACpB,mGAAmG,EACnG,gBAAgB,CAAC,eAAe,CACjC,CAAC;AACJ,CAAC"}
|