@0xkey-io/http 0.1.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 +5 -0
- package/LICENSE +201 -0
- package/README.md +94 -0
- package/dist/__generated__/barrel.d.ts +2 -0
- package/dist/__generated__/barrel.d.ts.map +1 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.client.d.ts +1794 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.client.d.ts.map +1 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.client.js +3022 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.client.js.map +1 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.client.mjs +3020 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.client.mjs.map +1 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.fetcher.d.ts +150383 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.fetcher.d.ts.map +1 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.fetcher.js +2880 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.fetcher.js.map +1 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.fetcher.mjs +2639 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.fetcher.mjs.map +1 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.types.d.ts +6732 -0
- package/dist/__generated__/services/coordinator/public/v1/public_api.types.d.ts.map +1 -0
- package/dist/_kernel/transport.d.ts +2 -0
- package/dist/_kernel/transport.d.ts.map +1 -0
- package/dist/_kernel/transport.js +8 -0
- package/dist/_kernel/transport.js.map +1 -0
- package/dist/_kernel/transport.mjs +6 -0
- package/dist/_kernel/transport.mjs.map +1 -0
- package/dist/async.d.ts +32 -0
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +158 -0
- package/dist/async.js.map +1 -0
- package/dist/async.mjs +155 -0
- package/dist/async.mjs.map +1 -0
- package/dist/base.d.ts +91 -0
- package/dist/base.d.ts.map +1 -0
- package/dist/base.js +172 -0
- package/dist/base.js.map +1 -0
- package/dist/base.mjs +165 -0
- package/dist/base.mjs.map +1 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +48 -0
- package/dist/config.js.map +1 -0
- package/dist/config.mjs +43 -0
- package/dist/config.mjs.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/shared.d.ts +76 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +138 -0
- package/dist/shared.js.map +1 -0
- package/dist/shared.mjs +128 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/universal.d.ts +4 -0
- package/dist/universal.d.ts.map +1 -0
- package/dist/universal.js +10 -0
- package/dist/universal.js.map +1 -0
- package/dist/universal.mjs +8 -0
- package/dist/universal.mjs.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/dist/version.mjs +4 -0
- package/dist/version.mjs.map +1 -0
- package/dist/webauthn-json/api.d.ts +13 -0
- package/dist/webauthn-json/api.d.ts.map +1 -0
- package/dist/webauthn-json/api.js +16 -0
- package/dist/webauthn-json/api.js.map +1 -0
- package/dist/webauthn-json/api.mjs +13 -0
- package/dist/webauthn-json/api.mjs.map +1 -0
- package/dist/webauthn-json/base64url.d.ts +4 -0
- package/dist/webauthn-json/base64url.d.ts.map +1 -0
- package/dist/webauthn-json/base64url.js +22 -0
- package/dist/webauthn-json/base64url.js.map +1 -0
- package/dist/webauthn-json/base64url.mjs +20 -0
- package/dist/webauthn-json/base64url.mjs.map +1 -0
- package/dist/webauthn-json/convert.d.ts +8 -0
- package/dist/webauthn-json/convert.d.ts.map +1 -0
- package/dist/webauthn-json/convert.js +71 -0
- package/dist/webauthn-json/convert.js.map +1 -0
- package/dist/webauthn-json/convert.mjs +64 -0
- package/dist/webauthn-json/convert.mjs.map +1 -0
- package/dist/webauthn-json/index.d.ts +14 -0
- package/dist/webauthn-json/index.d.ts.map +1 -0
- package/dist/webauthn-json/index.js +18 -0
- package/dist/webauthn-json/index.js.map +1 -0
- package/dist/webauthn-json/index.mjs +15 -0
- package/dist/webauthn-json/index.mjs.map +1 -0
- package/dist/webauthn-json/json.d.ts +92 -0
- package/dist/webauthn-json/json.d.ts.map +1 -0
- package/dist/webauthn-json/schema-format.d.ts +13 -0
- package/dist/webauthn-json/schema-format.d.ts.map +1 -0
- package/dist/webauthn-json/schema.d.ts +9 -0
- package/dist/webauthn-json/schema.d.ts.map +1 -0
- package/dist/webauthn-json/schema.js +40 -0
- package/dist/webauthn-json/schema.js.map +1 -0
- package/dist/webauthn-json/schema.mjs +37 -0
- package/dist/webauthn-json/schema.mjs.map +1 -0
- package/dist/webauthn.d.ts +24 -0
- package/dist/webauthn.d.ts.map +1 -0
- package/dist/webauthn.js +97 -0
- package/dist/webauthn.js.map +1 -0
- package/dist/webauthn.mjs +93 -0
- package/dist/webauthn.mjs.map +1 -0
- package/package.json +57 -0
package/dist/async.mjs
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { getActivity } from './__generated__/services/coordinator/public/v1/public_api.fetcher.mjs';
|
|
2
|
+
import { ZeroXKeyActivityError } from './shared.mjs';
|
|
3
|
+
import { sleep } from './_kernel/transport.mjs';
|
|
4
|
+
|
|
5
|
+
const DEFAULT_REFRESH_INTERVAL_MS = 500;
|
|
6
|
+
/**
|
|
7
|
+
* Wraps a request to create a fetcher with built-in async polling support.
|
|
8
|
+
*
|
|
9
|
+
* @deprecated this function only works with {@link ZeroXKeyApi}.
|
|
10
|
+
* Use {@link ZeroXKeyClient} and {@link createActivityPoller} instead.
|
|
11
|
+
*/
|
|
12
|
+
function withAsyncPolling(params) {
|
|
13
|
+
const { request, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS } = params;
|
|
14
|
+
return async (input) => {
|
|
15
|
+
const initialResponse = await request(input);
|
|
16
|
+
let activity = initialResponse.activity;
|
|
17
|
+
while (true) {
|
|
18
|
+
switch (activity.status) {
|
|
19
|
+
case "ACTIVITY_STATUS_COMPLETED": {
|
|
20
|
+
return activity;
|
|
21
|
+
}
|
|
22
|
+
case "ACTIVITY_STATUS_CREATED": {
|
|
23
|
+
// Async pending state -- keep polling
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
case "ACTIVITY_STATUS_PENDING": {
|
|
27
|
+
// Async pending state -- keep polling
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case "ACTIVITY_STATUS_CONSENSUS_NEEDED": {
|
|
31
|
+
// If the activity requires consensus, we shouldn't be polling forever.
|
|
32
|
+
// You can read the `ZeroXKeyActivityError` thrown to get the `activityId`,
|
|
33
|
+
// store it somewhere, then re-fetch the activity via `.postGetActivity(...)`
|
|
34
|
+
// when the required approvals/rejections are in place.
|
|
35
|
+
throw new ZeroXKeyActivityError({
|
|
36
|
+
message: `Consensus needed for activity ${activity.id}`,
|
|
37
|
+
activityId: activity.id,
|
|
38
|
+
activityStatus: activity.status,
|
|
39
|
+
activityType: activity.type,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
case "ACTIVITY_STATUS_FAILED": {
|
|
43
|
+
// Activity failed
|
|
44
|
+
throw new ZeroXKeyActivityError({
|
|
45
|
+
message: `Activity ${activity.id} failed`,
|
|
46
|
+
activityId: activity.id,
|
|
47
|
+
activityStatus: activity.status,
|
|
48
|
+
activityType: activity.type,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
case "ACTIVITY_STATUS_REJECTED": {
|
|
52
|
+
// Activity was rejected
|
|
53
|
+
throw new ZeroXKeyActivityError({
|
|
54
|
+
message: `Activity ${activity.id} was rejected`,
|
|
55
|
+
activityId: activity.id,
|
|
56
|
+
activityStatus: activity.status,
|
|
57
|
+
activityType: activity.type,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
default: {
|
|
61
|
+
// Make sure the switch block is exhaustive
|
|
62
|
+
assertNever(activity.status);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
await sleep(refreshIntervalMs);
|
|
66
|
+
const pollingResponse = await getActivity({
|
|
67
|
+
body: {
|
|
68
|
+
activityId: activity.id,
|
|
69
|
+
organizationId: activity.organizationId,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
activity = pollingResponse.activity;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Wraps a client request function (e.g. `client.createPrivateKeys`) in a poller.
|
|
78
|
+
* The default refresh interval is 500ms.
|
|
79
|
+
*
|
|
80
|
+
* The returned poller will poll until the activity becomes `COMPLETED`.
|
|
81
|
+
* If the activity becomes `FAILED` or `REJECTED` or is flagged as `NEEDS_CONSENSUS`, an error is thrown.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* const activityPoller = createActivityPoller(client, client.createPrivateKeys);
|
|
85
|
+
* const activity = await activityPoller(input);
|
|
86
|
+
* console.log(activity.result); // activity is completed
|
|
87
|
+
*/
|
|
88
|
+
function createActivityPoller(params) {
|
|
89
|
+
const { client, requestFn, refreshIntervalMs = DEFAULT_REFRESH_INTERVAL_MS, } = params;
|
|
90
|
+
return async (input) => {
|
|
91
|
+
const initialResponse = await requestFn(input);
|
|
92
|
+
let activity = initialResponse.activity;
|
|
93
|
+
while (true) {
|
|
94
|
+
switch (activity.status) {
|
|
95
|
+
case "ACTIVITY_STATUS_COMPLETED": {
|
|
96
|
+
return activity;
|
|
97
|
+
}
|
|
98
|
+
case "ACTIVITY_STATUS_CREATED": {
|
|
99
|
+
// Async pending state -- keep polling
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case "ACTIVITY_STATUS_PENDING": {
|
|
103
|
+
// Async pending state -- keep polling
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case "ACTIVITY_STATUS_CONSENSUS_NEEDED": {
|
|
107
|
+
// If the activity requires consensus, we shouldn't be polling forever.
|
|
108
|
+
// You can read the `ZeroXKeyActivityError` thrown to get the `activityId`,
|
|
109
|
+
// store it somewhere, then re-fetch the activity via `.postGetActivity(...)`
|
|
110
|
+
// when the required approvals/rejections are in place.
|
|
111
|
+
throw new ZeroXKeyActivityError({
|
|
112
|
+
message: `Consensus needed for activity ${activity.id}`,
|
|
113
|
+
activityId: activity.id,
|
|
114
|
+
activityStatus: activity.status,
|
|
115
|
+
activityType: activity.type,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
case "ACTIVITY_STATUS_FAILED": {
|
|
119
|
+
// Activity failed
|
|
120
|
+
throw new ZeroXKeyActivityError({
|
|
121
|
+
message: `Activity ${activity.id} failed`,
|
|
122
|
+
activityId: activity.id,
|
|
123
|
+
activityStatus: activity.status,
|
|
124
|
+
activityType: activity.type,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
case "ACTIVITY_STATUS_REJECTED": {
|
|
128
|
+
// Activity was rejected
|
|
129
|
+
throw new ZeroXKeyActivityError({
|
|
130
|
+
message: `Activity ${activity.id} was rejected`,
|
|
131
|
+
activityId: activity.id,
|
|
132
|
+
activityStatus: activity.status,
|
|
133
|
+
activityType: activity.type,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
default: {
|
|
137
|
+
// Make sure the switch block is exhaustive
|
|
138
|
+
assertNever(activity.status);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
await sleep(refreshIntervalMs);
|
|
142
|
+
const pollingResponse = await client.getActivity({
|
|
143
|
+
activityId: activity.id,
|
|
144
|
+
organizationId: activity.organizationId,
|
|
145
|
+
});
|
|
146
|
+
activity = pollingResponse.activity;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function assertNever(input, message) {
|
|
151
|
+
throw new Error(`Unexpected case: ${JSON.stringify(input)}`);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export { createActivityPoller, withAsyncPolling };
|
|
155
|
+
//# sourceMappingURL=async.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.mjs","sources":["../src/async.ts"],"sourcesContent":[null],"names":["ZeroXKeyApi.getActivity"],"mappings":"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"}
|
package/dist/base.d.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { fetch } from "./universal";
|
|
2
|
+
import { ZeroXKeyCredentialRequestOptions } from "./webauthn";
|
|
3
|
+
import type { ZeroXKeyClient } from ".";
|
|
4
|
+
export type { ZeroXKeyCredentialRequestOptions };
|
|
5
|
+
export { fetch };
|
|
6
|
+
type TBasicType = string;
|
|
7
|
+
type TQueryShape = Record<string, TBasicType | Array<TBasicType>>;
|
|
8
|
+
type THeadersShape = Record<string, TBasicType> | undefined;
|
|
9
|
+
type TBodyShape = Record<string, any>;
|
|
10
|
+
type TSubstitutionShape = Record<string, any>;
|
|
11
|
+
/**
|
|
12
|
+
* Represents a signed request ready to be POSTed to ZeroXKey
|
|
13
|
+
* @deprecated use {@link TSignedRequest} instead
|
|
14
|
+
*/
|
|
15
|
+
export type SignedRequest = {
|
|
16
|
+
body: string;
|
|
17
|
+
stamp: string;
|
|
18
|
+
url: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated
|
|
22
|
+
*/
|
|
23
|
+
export declare function signedRequest<B extends TBodyShape = never, Q extends TQueryShape = never, S extends TSubstitutionShape = never>(input: {
|
|
24
|
+
uri: string;
|
|
25
|
+
query?: Q;
|
|
26
|
+
body?: B;
|
|
27
|
+
substitution?: S;
|
|
28
|
+
options?: ZeroXKeyCredentialRequestOptions | undefined;
|
|
29
|
+
}): Promise<SignedRequest>;
|
|
30
|
+
export declare function request<ResponseData = never, B extends TBodyShape = never, Q extends TQueryShape = never, S extends TSubstitutionShape = never, H extends THeadersShape = never>(input: {
|
|
31
|
+
uri: string;
|
|
32
|
+
method: "POST";
|
|
33
|
+
headers?: H;
|
|
34
|
+
query?: Q;
|
|
35
|
+
body?: B;
|
|
36
|
+
substitution?: S;
|
|
37
|
+
}): Promise<ResponseData>;
|
|
38
|
+
/**
|
|
39
|
+
* Seals and stamps the request body with your ZeroXKey API credentials.
|
|
40
|
+
*
|
|
41
|
+
* You can either:
|
|
42
|
+
* - Before calling `sealAndStampRequestBody(...)`, initialize with your ZeroXKey API credentials via `init(...)`
|
|
43
|
+
* - Or, provide `apiPublicKey` and `apiPrivateKey` here as arguments
|
|
44
|
+
*/
|
|
45
|
+
export declare function sealAndStampRequestBody(input: {
|
|
46
|
+
body: Record<string, any>;
|
|
47
|
+
apiPublicKey?: string;
|
|
48
|
+
apiPrivateKey?: string;
|
|
49
|
+
}): Promise<{
|
|
50
|
+
sealedBody: string;
|
|
51
|
+
xStamp: string;
|
|
52
|
+
}>;
|
|
53
|
+
export declare function isHttpClient(client: any): client is ZeroXKeyClient;
|
|
54
|
+
export type THttpConfig = {
|
|
55
|
+
baseUrl: string;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Represents a signed request ready to be POSTed to ZeroXKey
|
|
59
|
+
*/
|
|
60
|
+
export type TSignedRequest = {
|
|
61
|
+
body: string;
|
|
62
|
+
stamp: TStamp;
|
|
63
|
+
url: string;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Represents a stamp header name/value pair
|
|
67
|
+
*/
|
|
68
|
+
export type TStamp = {
|
|
69
|
+
stampHeaderName: string;
|
|
70
|
+
stampHeaderValue: string;
|
|
71
|
+
};
|
|
72
|
+
export type GrpcStatus = {
|
|
73
|
+
message: string;
|
|
74
|
+
code: number;
|
|
75
|
+
details: unknown[] | null;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Interface to implement if you want to provide your own stampers to your {@link ZeroXKeyClient}.
|
|
79
|
+
* Currently ZeroXKey provides 2 stampers:
|
|
80
|
+
* - applications signing requests with Passkeys or webauthn devices should use `@0xkey-io/webauthn-stamper`
|
|
81
|
+
* - applications signing requests with API keys should use `@0xkey-io/api-key-stamper`
|
|
82
|
+
*/
|
|
83
|
+
export interface TStamper {
|
|
84
|
+
stamp: (input: string) => Promise<TStamp>;
|
|
85
|
+
}
|
|
86
|
+
export declare class ZeroXKeyRequestError extends Error {
|
|
87
|
+
details: any[] | null;
|
|
88
|
+
code: number;
|
|
89
|
+
constructor(input: GrpcStatus);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|
package/dist/base.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var apiKeyStamper = require('@0xkey-io/api-key-stamper');
|
|
4
|
+
var universal = require('./universal.js');
|
|
5
|
+
var config = require('./config.js');
|
|
6
|
+
var encoding = require('@0xkey-io/encoding');
|
|
7
|
+
var webauthn = require('./webauthn.js');
|
|
8
|
+
|
|
9
|
+
const sharedHeaders = {
|
|
10
|
+
"Content-Type": "application/json",
|
|
11
|
+
};
|
|
12
|
+
const sharedRequestOptions = {
|
|
13
|
+
redirect: "follow",
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated
|
|
17
|
+
*/
|
|
18
|
+
async function signedRequest(input) {
|
|
19
|
+
const { uri: inputUri, query: inputQuery = {}, substitution: inputSubstitution = {}, body: inputBody = {}, } = input;
|
|
20
|
+
const url = constructUrl({
|
|
21
|
+
uri: inputUri,
|
|
22
|
+
query: inputQuery,
|
|
23
|
+
substitution: inputSubstitution,
|
|
24
|
+
});
|
|
25
|
+
const body = JSON.stringify(inputBody);
|
|
26
|
+
const stamp = await webauthn.getWebAuthnAssertion(body, input.options);
|
|
27
|
+
return {
|
|
28
|
+
url: url.toString(),
|
|
29
|
+
body,
|
|
30
|
+
stamp,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async function request(input) {
|
|
34
|
+
const { uri: inputUri, method, headers: inputHeaders = {}, query: inputQuery = {}, substitution: inputSubstitution = {}, body: inputBody = {}, } = input;
|
|
35
|
+
const url = constructUrl({
|
|
36
|
+
uri: inputUri,
|
|
37
|
+
query: inputQuery,
|
|
38
|
+
substitution: inputSubstitution,
|
|
39
|
+
});
|
|
40
|
+
const { sealedBody, xStamp } = await sealAndStampRequestBody({
|
|
41
|
+
body: inputBody,
|
|
42
|
+
});
|
|
43
|
+
const response = await universal.fetch(url.toString(), {
|
|
44
|
+
...sharedRequestOptions,
|
|
45
|
+
method,
|
|
46
|
+
headers: {
|
|
47
|
+
...sharedHeaders,
|
|
48
|
+
...inputHeaders,
|
|
49
|
+
"X-Stamp": xStamp,
|
|
50
|
+
},
|
|
51
|
+
body: sealedBody,
|
|
52
|
+
});
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
// Can't use native `cause` here because it's not well supported on Node v16
|
|
55
|
+
// https://node.green/#ES2022-features-Error-cause-property
|
|
56
|
+
let res;
|
|
57
|
+
try {
|
|
58
|
+
res = await response.json();
|
|
59
|
+
}
|
|
60
|
+
catch (_) {
|
|
61
|
+
throw new Error(`${response.status} ${response.statusText}`);
|
|
62
|
+
}
|
|
63
|
+
throw new ZeroXKeyRequestError(res);
|
|
64
|
+
}
|
|
65
|
+
const data = await response.json();
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
function constructUrl(input) {
|
|
69
|
+
const { uri, query, substitution } = input;
|
|
70
|
+
const baseUrl = getBaseUrl();
|
|
71
|
+
const url = new URL(substitutePath(uri, substitution), baseUrl);
|
|
72
|
+
for (const key in query) {
|
|
73
|
+
const value = query[key];
|
|
74
|
+
if (Array.isArray(value)) {
|
|
75
|
+
for (const item of value) {
|
|
76
|
+
url.searchParams.append(key, item);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
url.searchParams.append(key, value ?? "");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return url;
|
|
84
|
+
}
|
|
85
|
+
function getBaseUrl() {
|
|
86
|
+
try {
|
|
87
|
+
const { baseUrl } = config.getConfig();
|
|
88
|
+
return baseUrl;
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
const { baseUrl } = config.getBrowserConfig();
|
|
92
|
+
return baseUrl;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function substitutePath(uri, substitutionMap) {
|
|
96
|
+
let result = uri;
|
|
97
|
+
const keyList = Object.keys(substitutionMap);
|
|
98
|
+
for (const key of keyList) {
|
|
99
|
+
const output = result.replaceAll(`{${key}}`, substitutionMap[key]);
|
|
100
|
+
invariant(output !== result, `Substitution error: cannot find "${key}" in URI "${uri}". \`substitutionMap\`: ${JSON.stringify(substitutionMap)}`);
|
|
101
|
+
result = output;
|
|
102
|
+
}
|
|
103
|
+
invariant(!/\{.*\}/.test(result), `Substitution error: found unsubstituted components in "${result}"`);
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
function invariant(condition, message) {
|
|
107
|
+
if (!condition) {
|
|
108
|
+
throw new Error(message);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function stableStringify(input) {
|
|
112
|
+
return JSON.stringify(input);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Seals and stamps the request body with your ZeroXKey API credentials.
|
|
116
|
+
*
|
|
117
|
+
* You can either:
|
|
118
|
+
* - Before calling `sealAndStampRequestBody(...)`, initialize with your ZeroXKey API credentials via `init(...)`
|
|
119
|
+
* - Or, provide `apiPublicKey` and `apiPrivateKey` here as arguments
|
|
120
|
+
*/
|
|
121
|
+
async function sealAndStampRequestBody(input) {
|
|
122
|
+
const { body } = input;
|
|
123
|
+
let { apiPublicKey, apiPrivateKey } = input;
|
|
124
|
+
if (!apiPublicKey) {
|
|
125
|
+
const config$1 = config.getConfig();
|
|
126
|
+
apiPublicKey = config$1.apiPublicKey;
|
|
127
|
+
}
|
|
128
|
+
if (!apiPrivateKey) {
|
|
129
|
+
const config$1 = config.getConfig();
|
|
130
|
+
apiPrivateKey = config$1.apiPrivateKey;
|
|
131
|
+
}
|
|
132
|
+
const sealedBody = stableStringify(body);
|
|
133
|
+
const signature = await apiKeyStamper.signWithApiKey({
|
|
134
|
+
content: sealedBody,
|
|
135
|
+
privateKey: apiPrivateKey,
|
|
136
|
+
publicKey: apiPublicKey,
|
|
137
|
+
});
|
|
138
|
+
const sealedStamp = stableStringify({
|
|
139
|
+
publicKey: apiPublicKey,
|
|
140
|
+
scheme: "SIGNATURE_SCHEME_TK_API_P256",
|
|
141
|
+
signature: signature,
|
|
142
|
+
});
|
|
143
|
+
const xStamp = encoding.stringToBase64urlString(sealedStamp);
|
|
144
|
+
return {
|
|
145
|
+
sealedBody,
|
|
146
|
+
xStamp,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// Check if the client is an instance of ZeroXKeyClient. We check the name field here since the 'instanceof' operator does not work across if the http client isn't EXACTLY the same (mismatching versions).
|
|
150
|
+
function isHttpClient(client) {
|
|
151
|
+
return client?.name === "ZeroXKeyClient";
|
|
152
|
+
}
|
|
153
|
+
class ZeroXKeyRequestError extends Error {
|
|
154
|
+
constructor(input) {
|
|
155
|
+
let zeroXKeyErrorMessage = `ZeroXKey error ${input.code}: ${input.message}`;
|
|
156
|
+
if (input.details != null) {
|
|
157
|
+
zeroXKeyErrorMessage += ` (Details: ${JSON.stringify(input.details)})`;
|
|
158
|
+
}
|
|
159
|
+
super(zeroXKeyErrorMessage);
|
|
160
|
+
this.name = "ZeroXKeyRequestError";
|
|
161
|
+
this.details = input.details ?? null;
|
|
162
|
+
this.code = input.code;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
exports.fetch = universal.fetch;
|
|
167
|
+
exports.ZeroXKeyRequestError = ZeroXKeyRequestError;
|
|
168
|
+
exports.isHttpClient = isHttpClient;
|
|
169
|
+
exports.request = request;
|
|
170
|
+
exports.sealAndStampRequestBody = sealAndStampRequestBody;
|
|
171
|
+
exports.signedRequest = signedRequest;
|
|
172
|
+
//# sourceMappingURL=base.js.map
|
package/dist/base.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../src/base.ts"],"sourcesContent":[null],"names":["getWebAuthnAssertion","fetch","getConfig","getBrowserConfig","config","signWithApiKey","stringToBase64urlString"],"mappings":"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"}
|
package/dist/base.mjs
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { signWithApiKey } from '@0xkey-io/api-key-stamper';
|
|
2
|
+
import { fetch } from './universal.mjs';
|
|
3
|
+
import { getConfig, getBrowserConfig } from './config.mjs';
|
|
4
|
+
import { stringToBase64urlString } from '@0xkey-io/encoding';
|
|
5
|
+
import { getWebAuthnAssertion } from './webauthn.mjs';
|
|
6
|
+
|
|
7
|
+
const sharedHeaders = {
|
|
8
|
+
"Content-Type": "application/json",
|
|
9
|
+
};
|
|
10
|
+
const sharedRequestOptions = {
|
|
11
|
+
redirect: "follow",
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* @deprecated
|
|
15
|
+
*/
|
|
16
|
+
async function signedRequest(input) {
|
|
17
|
+
const { uri: inputUri, query: inputQuery = {}, substitution: inputSubstitution = {}, body: inputBody = {}, } = input;
|
|
18
|
+
const url = constructUrl({
|
|
19
|
+
uri: inputUri,
|
|
20
|
+
query: inputQuery,
|
|
21
|
+
substitution: inputSubstitution,
|
|
22
|
+
});
|
|
23
|
+
const body = JSON.stringify(inputBody);
|
|
24
|
+
const stamp = await getWebAuthnAssertion(body, input.options);
|
|
25
|
+
return {
|
|
26
|
+
url: url.toString(),
|
|
27
|
+
body,
|
|
28
|
+
stamp,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
async function request(input) {
|
|
32
|
+
const { uri: inputUri, method, headers: inputHeaders = {}, query: inputQuery = {}, substitution: inputSubstitution = {}, body: inputBody = {}, } = input;
|
|
33
|
+
const url = constructUrl({
|
|
34
|
+
uri: inputUri,
|
|
35
|
+
query: inputQuery,
|
|
36
|
+
substitution: inputSubstitution,
|
|
37
|
+
});
|
|
38
|
+
const { sealedBody, xStamp } = await sealAndStampRequestBody({
|
|
39
|
+
body: inputBody,
|
|
40
|
+
});
|
|
41
|
+
const response = await fetch(url.toString(), {
|
|
42
|
+
...sharedRequestOptions,
|
|
43
|
+
method,
|
|
44
|
+
headers: {
|
|
45
|
+
...sharedHeaders,
|
|
46
|
+
...inputHeaders,
|
|
47
|
+
"X-Stamp": xStamp,
|
|
48
|
+
},
|
|
49
|
+
body: sealedBody,
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
// Can't use native `cause` here because it's not well supported on Node v16
|
|
53
|
+
// https://node.green/#ES2022-features-Error-cause-property
|
|
54
|
+
let res;
|
|
55
|
+
try {
|
|
56
|
+
res = await response.json();
|
|
57
|
+
}
|
|
58
|
+
catch (_) {
|
|
59
|
+
throw new Error(`${response.status} ${response.statusText}`);
|
|
60
|
+
}
|
|
61
|
+
throw new ZeroXKeyRequestError(res);
|
|
62
|
+
}
|
|
63
|
+
const data = await response.json();
|
|
64
|
+
return data;
|
|
65
|
+
}
|
|
66
|
+
function constructUrl(input) {
|
|
67
|
+
const { uri, query, substitution } = input;
|
|
68
|
+
const baseUrl = getBaseUrl();
|
|
69
|
+
const url = new URL(substitutePath(uri, substitution), baseUrl);
|
|
70
|
+
for (const key in query) {
|
|
71
|
+
const value = query[key];
|
|
72
|
+
if (Array.isArray(value)) {
|
|
73
|
+
for (const item of value) {
|
|
74
|
+
url.searchParams.append(key, item);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
url.searchParams.append(key, value ?? "");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return url;
|
|
82
|
+
}
|
|
83
|
+
function getBaseUrl() {
|
|
84
|
+
try {
|
|
85
|
+
const { baseUrl } = getConfig();
|
|
86
|
+
return baseUrl;
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
const { baseUrl } = getBrowserConfig();
|
|
90
|
+
return baseUrl;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function substitutePath(uri, substitutionMap) {
|
|
94
|
+
let result = uri;
|
|
95
|
+
const keyList = Object.keys(substitutionMap);
|
|
96
|
+
for (const key of keyList) {
|
|
97
|
+
const output = result.replaceAll(`{${key}}`, substitutionMap[key]);
|
|
98
|
+
invariant(output !== result, `Substitution error: cannot find "${key}" in URI "${uri}". \`substitutionMap\`: ${JSON.stringify(substitutionMap)}`);
|
|
99
|
+
result = output;
|
|
100
|
+
}
|
|
101
|
+
invariant(!/\{.*\}/.test(result), `Substitution error: found unsubstituted components in "${result}"`);
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
function invariant(condition, message) {
|
|
105
|
+
if (!condition) {
|
|
106
|
+
throw new Error(message);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function stableStringify(input) {
|
|
110
|
+
return JSON.stringify(input);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Seals and stamps the request body with your ZeroXKey API credentials.
|
|
114
|
+
*
|
|
115
|
+
* You can either:
|
|
116
|
+
* - Before calling `sealAndStampRequestBody(...)`, initialize with your ZeroXKey API credentials via `init(...)`
|
|
117
|
+
* - Or, provide `apiPublicKey` and `apiPrivateKey` here as arguments
|
|
118
|
+
*/
|
|
119
|
+
async function sealAndStampRequestBody(input) {
|
|
120
|
+
const { body } = input;
|
|
121
|
+
let { apiPublicKey, apiPrivateKey } = input;
|
|
122
|
+
if (!apiPublicKey) {
|
|
123
|
+
const config = getConfig();
|
|
124
|
+
apiPublicKey = config.apiPublicKey;
|
|
125
|
+
}
|
|
126
|
+
if (!apiPrivateKey) {
|
|
127
|
+
const config = getConfig();
|
|
128
|
+
apiPrivateKey = config.apiPrivateKey;
|
|
129
|
+
}
|
|
130
|
+
const sealedBody = stableStringify(body);
|
|
131
|
+
const signature = await signWithApiKey({
|
|
132
|
+
content: sealedBody,
|
|
133
|
+
privateKey: apiPrivateKey,
|
|
134
|
+
publicKey: apiPublicKey,
|
|
135
|
+
});
|
|
136
|
+
const sealedStamp = stableStringify({
|
|
137
|
+
publicKey: apiPublicKey,
|
|
138
|
+
scheme: "SIGNATURE_SCHEME_TK_API_P256",
|
|
139
|
+
signature: signature,
|
|
140
|
+
});
|
|
141
|
+
const xStamp = stringToBase64urlString(sealedStamp);
|
|
142
|
+
return {
|
|
143
|
+
sealedBody,
|
|
144
|
+
xStamp,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// Check if the client is an instance of ZeroXKeyClient. We check the name field here since the 'instanceof' operator does not work across if the http client isn't EXACTLY the same (mismatching versions).
|
|
148
|
+
function isHttpClient(client) {
|
|
149
|
+
return client?.name === "ZeroXKeyClient";
|
|
150
|
+
}
|
|
151
|
+
class ZeroXKeyRequestError extends Error {
|
|
152
|
+
constructor(input) {
|
|
153
|
+
let zeroXKeyErrorMessage = `ZeroXKey error ${input.code}: ${input.message}`;
|
|
154
|
+
if (input.details != null) {
|
|
155
|
+
zeroXKeyErrorMessage += ` (Details: ${JSON.stringify(input.details)})`;
|
|
156
|
+
}
|
|
157
|
+
super(zeroXKeyErrorMessage);
|
|
158
|
+
this.name = "ZeroXKeyRequestError";
|
|
159
|
+
this.details = input.details ?? null;
|
|
160
|
+
this.code = input.code;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export { ZeroXKeyRequestError, fetch, isHttpClient, request, sealAndStampRequestBody, signedRequest };
|
|
165
|
+
//# sourceMappingURL=base.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.mjs","sources":["../src/base.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
type TConfig = {
|
|
2
|
+
/**
|
|
3
|
+
* ZeroXKey API public key
|
|
4
|
+
*/
|
|
5
|
+
apiPublicKey: string;
|
|
6
|
+
/**
|
|
7
|
+
* ZeroXKey API private key
|
|
8
|
+
*/
|
|
9
|
+
apiPrivateKey: string;
|
|
10
|
+
/**
|
|
11
|
+
* ZeroXKey API base URL
|
|
12
|
+
*/
|
|
13
|
+
baseUrl: string;
|
|
14
|
+
};
|
|
15
|
+
type TBrowserConfig = {
|
|
16
|
+
/**
|
|
17
|
+
* ZeroXKey API base URL
|
|
18
|
+
*/
|
|
19
|
+
baseUrl: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* @deprecated use {@link ZeroXKeyClient} instead, which doesn't rely on global initialization logic.
|
|
23
|
+
*/
|
|
24
|
+
export declare function browserInit(value: TBrowserConfig): void;
|
|
25
|
+
/**
|
|
26
|
+
* @deprecated use {@link ZeroXKeyClient} instead, which doesn't rely on global initialization logic.
|
|
27
|
+
*/
|
|
28
|
+
export declare function init(value: TConfig): void;
|
|
29
|
+
export declare function getConfig(): TConfig;
|
|
30
|
+
export declare function getBrowserConfig(): TBrowserConfig;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,KAAK,OAAO,GAAG;IACb;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAYF;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAEvD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAWzC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAMnC;AAED,wBAAgB,gBAAgB,IAAI,cAAc,CAIjD"}
|