@amigo-ai/platform-sdk 0.4.2 → 0.4.3
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 +26 -2
- package/api.md +14 -21
- package/dist/core/openapi-client.js +89 -55
- package/dist/core/openapi-client.js.map +1 -1
- package/dist/core/request-options.js +80 -0
- package/dist/core/request-options.js.map +1 -0
- package/dist/core/webhooks.js +9 -0
- package/dist/core/webhooks.js.map +1 -1
- package/dist/index.cjs +356 -122
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +81 -47
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +356 -122
- package/dist/index.mjs.map +3 -3
- package/dist/resources/base.js +33 -0
- package/dist/resources/base.js.map +1 -1
- package/dist/types/core/openapi-client.d.ts +2 -0
- package/dist/types/core/openapi-client.d.ts.map +1 -1
- package/dist/types/core/request-options.d.ts +66 -0
- package/dist/types/core/request-options.d.ts.map +1 -0
- package/dist/types/core/webhooks.d.ts.map +1 -1
- package/dist/types/index.d.ts +14 -23
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/resources/base.d.ts +8 -3
- package/dist/types/resources/base.d.ts.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -105,11 +105,33 @@ Public builds are generated from the committed [`openapi.json`](./openapi.json)
|
|
|
105
105
|
npm run openapi:sync
|
|
106
106
|
```
|
|
107
107
|
|
|
108
|
-
For a repo-local overview of the exported client surface, see [api.md](./api.md).
|
|
108
|
+
For a repo-local overview of the exported client surface, see the generated [api.md](./api.md).
|
|
109
109
|
|
|
110
110
|
## Advanced request control
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
The normal resource surface supports scoped request overrides, so you can keep the ergonomic API while adding timeout, retry, and header controls:
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
const agents = await client
|
|
116
|
+
.withOptions({
|
|
117
|
+
timeout: 5_000,
|
|
118
|
+
maxRetries: 1,
|
|
119
|
+
headers: { 'X-Debug-Trace': 'true' },
|
|
120
|
+
})
|
|
121
|
+
.agents.list({ limit: 10 })
|
|
122
|
+
|
|
123
|
+
console.log(agents._request_id)
|
|
124
|
+
console.log(agents.lastResponse.statusCode)
|
|
125
|
+
console.log(agents.items)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
You can scope options to a single resource as well:
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
const agent = await client.agents.withOptions({ timeout: 2_000 }).get('agent-id')
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
For lower-level control, use the built-in typed HTTP helpers. Workspace-scoped routes automatically receive your configured `workspaceId`, and the configured value wins if `workspace_id` is provided manually.
|
|
113
135
|
|
|
114
136
|
```typescript
|
|
115
137
|
const result = await client.GET('/v1/{workspace_id}/agents', {
|
|
@@ -133,6 +155,8 @@ Available helpers:
|
|
|
133
155
|
- `client.DELETE(...)`
|
|
134
156
|
- `client.HEAD(...)`
|
|
135
157
|
- `client.OPTIONS(...)`
|
|
158
|
+
- `client.withOptions(...)`
|
|
159
|
+
- `client.<resource>.withOptions(...)`
|
|
136
160
|
|
|
137
161
|
### Response metadata
|
|
138
162
|
|
package/api.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# API Surface
|
|
2
2
|
|
|
3
|
+
> Generated from source. Do not edit directly.
|
|
4
|
+
|
|
3
5
|
Repo-local reference for the public TypeScript SDK surface. This document complements the product docs and stays focused on the package exports that ship from this repository.
|
|
4
6
|
|
|
5
7
|
## Client
|
|
@@ -14,17 +16,18 @@ Configuration fields:
|
|
|
14
16
|
- `retry?: RetryOptions`
|
|
15
17
|
- `maxRetries?: number`
|
|
16
18
|
- `timeout?: number`
|
|
17
|
-
- `headers?:
|
|
19
|
+
- `headers?: HeadersOptions`
|
|
18
20
|
- `hooks?: ClientHooks`
|
|
19
|
-
- `fetch?: typeof fetch`
|
|
21
|
+
- `fetch?: typeof globalThis.fetch`
|
|
20
22
|
|
|
21
23
|
Instance fields:
|
|
22
24
|
|
|
23
25
|
- `workspaceId: string`
|
|
24
26
|
- `baseUrl: string`
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
Client methods:
|
|
27
29
|
|
|
30
|
+
- `withOptions(options)`
|
|
28
31
|
- `GET(path, options?)`
|
|
29
32
|
- `POST(path, options?)`
|
|
30
33
|
- `PUT(path, options?)`
|
|
@@ -35,7 +38,8 @@ Low-level typed request helpers:
|
|
|
35
38
|
|
|
36
39
|
Notes:
|
|
37
40
|
|
|
38
|
-
- Workspace-scoped paths
|
|
41
|
+
- Workspace-scoped paths receive the configured `workspaceId` automatically, and the configured value wins if `workspace_id` is provided manually.
|
|
42
|
+
- `client.withOptions(options)` and `client.<resource>.withOptions(options)` layer headers, timeout, and retry overrides onto the normal resource surface.
|
|
39
43
|
- Low-level helpers return `AmigoResponse<T>` with `data`, `response`, `requestId`, and `rateLimit`.
|
|
40
44
|
- Object responses from resource methods include `_request_id` and `lastResponse` metadata.
|
|
41
45
|
|
|
@@ -43,27 +47,16 @@ Notes:
|
|
|
43
47
|
|
|
44
48
|
- Errors: `AmigoError`, `BadRequestError`, `AuthenticationError`, `PermissionError`, `NotFoundError`, `ConflictError`, `ValidationError`, `RateLimitError`, `ServerError`, `ServiceUnavailableError`, `NetworkError`, `RequestTimeoutError`, `ParseError`, `ConfigurationError`
|
|
45
49
|
- Error guards: `isAmigoError`, `isNotFoundError`, `isRateLimitError`, `isAuthenticationError`, `isRequestTimeoutError`
|
|
50
|
+
- Request option types: `AmigoRequestOptions`, `ScopedRequestOptions`
|
|
46
51
|
- Webhooks: `verifyWebhookSignature`, `parseWebhookEvent`, `WebhookVerificationError`
|
|
47
|
-
- Pagination: `paginate`
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
- Generated types: `components`, `operations`, `paths`
|
|
51
|
-
|
|
52
|
-
## Response types
|
|
53
|
-
|
|
54
|
-
- `AmigoRequestOptions<T>`
|
|
55
|
-
- `AmigoResponse<T>`
|
|
56
|
-
- `ResponseMetadata`
|
|
57
|
-
- `LastResponseInfo`
|
|
58
|
-
- `RetryOptions`
|
|
59
|
-
- `RateLimitInfo`
|
|
60
|
-
- `ClientHooks`
|
|
61
|
-
- `RequestHookContext`
|
|
62
|
-
- `ResponseHookContext`
|
|
63
|
-
- `ErrorHookContext`
|
|
52
|
+
- Pagination and response helpers: `paginate`, `buildLastResponse`, `extractRequestId`
|
|
53
|
+
- Response and hook types: `PaginatedList`, `ListParams`, `LastResponseInfo`, `ResponseMetadata`, `WithResponseMetadata`, `AmigoResponse`, `RetryOptions`, `RateLimitInfo`, `ClientHooks`, `RequestHookContext`, `ResponseHookContext`, `ErrorHookContext`
|
|
54
|
+
- Generated OpenAPI types: `paths`, `components`, `operations`
|
|
64
55
|
|
|
65
56
|
## Resources
|
|
66
57
|
|
|
58
|
+
All workspace-scoped resources also expose `withOptions(options)`.
|
|
59
|
+
|
|
67
60
|
### `workspaces`
|
|
68
61
|
|
|
69
62
|
- `create`
|
|
@@ -9,70 +9,27 @@ import createClientImport from 'openapi-fetch';
|
|
|
9
9
|
import { createAuthMiddleware } from './auth.js';
|
|
10
10
|
import { createApiError, NetworkError, RequestTimeoutError } from './errors.js';
|
|
11
11
|
import { parseRateLimitHeaders } from './rate-limit.js';
|
|
12
|
+
import { stripRequestControls, } from './request-options.js';
|
|
12
13
|
import { shouldRetry, computeDelay, resolveRetryOptions } from './retry.js';
|
|
13
14
|
import { extractRequestId } from './utils.js';
|
|
14
15
|
// Handle ESM/CJS interop for openapi-fetch (esbuild __toESM wrapper)
|
|
15
16
|
const createClient = typeof createClientImport === 'function'
|
|
16
17
|
? createClientImport
|
|
17
18
|
: createClientImport.default;
|
|
19
|
+
const platformClientContext = new WeakMap();
|
|
18
20
|
export function createPlatformClient(config) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const requestRetry = getRequestOption(baseRequest, 'retry');
|
|
25
|
-
const requestMaxRetries = getRequestOption(baseRequest, 'maxRetries');
|
|
26
|
-
const retryOpts = resolveRetryOptions(requestRetry ?? config.retry, requestMaxRetries ?? config.maxRetries);
|
|
27
|
-
const timeoutMs = getRequestOption(baseRequest, 'timeout') ?? config.timeout;
|
|
28
|
-
const isIdempotent = method === 'GET' || method === 'HEAD' || method === 'OPTIONS';
|
|
29
|
-
for (let attempt = 0; attempt < retryOpts.maxAttempts; attempt++) {
|
|
30
|
-
let response;
|
|
31
|
-
let error;
|
|
32
|
-
let timedOut = false;
|
|
33
|
-
try {
|
|
34
|
-
const prepared = prepareRequestForAttempt(baseRequest, timeoutMs);
|
|
35
|
-
try {
|
|
36
|
-
response = await baseFetch(prepared.request, init);
|
|
37
|
-
}
|
|
38
|
-
finally {
|
|
39
|
-
timedOut = prepared.timedOut;
|
|
40
|
-
prepared.cleanup();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
error = err;
|
|
45
|
-
}
|
|
46
|
-
if (!error && response && response.ok)
|
|
47
|
-
return response;
|
|
48
|
-
const ctx = { method, attempt, response: response, options: retryOpts };
|
|
49
|
-
const attemptsRemain = attempt + 1 < retryOpts.maxAttempts;
|
|
50
|
-
if (error) {
|
|
51
|
-
if (timedOut) {
|
|
52
|
-
throw new RequestTimeoutError(`Request timed out after ${timeoutMs}ms`, timeoutMs, error);
|
|
53
|
-
}
|
|
54
|
-
if (isIdempotent && attemptsRemain) {
|
|
55
|
-
await sleep(computeDelay(attempt, new Response(), retryOpts));
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
throw new NetworkError(`Network error: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
59
|
-
}
|
|
60
|
-
if (response && attemptsRemain && shouldRetry(ctx)) {
|
|
61
|
-
const delay = computeDelay(attempt, response, retryOpts);
|
|
62
|
-
if (baseRequest.signal.aborted)
|
|
63
|
-
return response;
|
|
64
|
-
await sleep(delay);
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
return response;
|
|
68
|
-
}
|
|
69
|
-
throw new NetworkError('Retry loop exhausted');
|
|
21
|
+
const transport = toRequestTransport(config.fetch ?? globalThis.fetch);
|
|
22
|
+
const defaults = {
|
|
23
|
+
retry: config.retry,
|
|
24
|
+
maxRetries: config.maxRetries,
|
|
25
|
+
timeout: config.timeout,
|
|
70
26
|
};
|
|
71
27
|
const client = createClient({
|
|
72
28
|
baseUrl: config.baseUrl,
|
|
73
|
-
fetch:
|
|
29
|
+
fetch: createRetryingFetch(transport, defaults),
|
|
74
30
|
headers: config.headers,
|
|
75
31
|
});
|
|
32
|
+
platformClientContext.set(client, { transport, defaults });
|
|
76
33
|
// Error middleware — convert HTTP errors to typed AmigoError subclasses
|
|
77
34
|
const errorMiddleware = {
|
|
78
35
|
async onResponse({ response }) {
|
|
@@ -114,12 +71,89 @@ export function createPlatformClient(config) {
|
|
|
114
71
|
}
|
|
115
72
|
return client;
|
|
116
73
|
}
|
|
74
|
+
export function applyPlatformRequestOptions(client, init) {
|
|
75
|
+
if (!init) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const context = platformClientContext.get(client);
|
|
79
|
+
const stripped = stripRequestControls(init);
|
|
80
|
+
if (!context) {
|
|
81
|
+
return stripped;
|
|
82
|
+
}
|
|
83
|
+
const overrideFetch = stripped?.fetch;
|
|
84
|
+
const hasControlOverride = overrideFetch !== undefined ||
|
|
85
|
+
init.timeout !== undefined ||
|
|
86
|
+
init.maxRetries !== undefined ||
|
|
87
|
+
init.retry !== undefined;
|
|
88
|
+
if (!hasControlOverride) {
|
|
89
|
+
return stripped;
|
|
90
|
+
}
|
|
91
|
+
const transport = toRequestTransport((overrideFetch ?? context.transport));
|
|
92
|
+
const fetch = createRetryingFetch(transport, {
|
|
93
|
+
timeout: init.timeout ?? context.defaults.timeout,
|
|
94
|
+
maxRetries: init.maxRetries ?? context.defaults.maxRetries,
|
|
95
|
+
retry: init.retry ?? context.defaults.retry,
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
...stripped,
|
|
99
|
+
fetch,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function createRetryingFetch(transport, defaults) {
|
|
103
|
+
return async (input, init) => {
|
|
104
|
+
const baseRequest = input instanceof Request ? input : new Request(input, init);
|
|
105
|
+
const method = baseRequest.method.toUpperCase();
|
|
106
|
+
const retryOpts = resolveRetryOptions(defaults.retry, defaults.maxRetries);
|
|
107
|
+
const timeoutMs = defaults.timeout;
|
|
108
|
+
const isIdempotent = method === 'GET' || method === 'HEAD' || method === 'OPTIONS';
|
|
109
|
+
for (let attempt = 0; attempt < retryOpts.maxAttempts; attempt++) {
|
|
110
|
+
let response;
|
|
111
|
+
let error;
|
|
112
|
+
let timedOut = false;
|
|
113
|
+
try {
|
|
114
|
+
const prepared = prepareRequestForAttempt(baseRequest, timeoutMs);
|
|
115
|
+
try {
|
|
116
|
+
response = await transport(prepared.request);
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
timedOut = prepared.timedOut;
|
|
120
|
+
prepared.cleanup();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
error = err;
|
|
125
|
+
}
|
|
126
|
+
if (!error && response && response.ok)
|
|
127
|
+
return response;
|
|
128
|
+
const ctx = { method, attempt, response: response, options: retryOpts };
|
|
129
|
+
const attemptsRemain = attempt + 1 < retryOpts.maxAttempts;
|
|
130
|
+
if (error) {
|
|
131
|
+
if (timedOut) {
|
|
132
|
+
throw new RequestTimeoutError(`Request timed out after ${timeoutMs}ms`, timeoutMs, error);
|
|
133
|
+
}
|
|
134
|
+
if (isIdempotent && attemptsRemain) {
|
|
135
|
+
await sleep(computeDelay(attempt, new Response(), retryOpts));
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
throw new NetworkError(`Network error: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
139
|
+
}
|
|
140
|
+
if (response && attemptsRemain && shouldRetry(ctx)) {
|
|
141
|
+
const delay = computeDelay(attempt, response, retryOpts);
|
|
142
|
+
if (baseRequest.signal.aborted)
|
|
143
|
+
return response;
|
|
144
|
+
await sleep(delay);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
return response;
|
|
148
|
+
}
|
|
149
|
+
throw new NetworkError('Retry loop exhausted');
|
|
150
|
+
};
|
|
151
|
+
}
|
|
117
152
|
function sleep(ms) {
|
|
118
153
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
119
154
|
}
|
|
120
|
-
function
|
|
121
|
-
|
|
122
|
-
return value;
|
|
155
|
+
function toRequestTransport(fetcher) {
|
|
156
|
+
return async (input) => fetcher(input);
|
|
123
157
|
}
|
|
124
158
|
function prepareRequestForAttempt(request, timeoutMs) {
|
|
125
159
|
const attemptRequest = request.clone();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-client.js","sourceRoot":"","sources":["../../src/core/openapi-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,kBAA4D,MAAM,eAAe,CAAA;AAExF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAqB,MAAM,YAAY,CAAA;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAE7C,qEAAqE;AACrE,MAAM,YAAY,GAChB,OAAO,kBAAkB,KAAK,UAAU;IACtC,CAAC,CAAC,kBAAkB;IACpB,CAAC,CAAE,kBAAwE,CAAC,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"openapi-client.js","sourceRoot":"","sources":["../../src/core/openapi-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export function stripRequestControls(options) {
|
|
2
|
+
if (!options) {
|
|
3
|
+
return undefined;
|
|
4
|
+
}
|
|
5
|
+
const rest = { ...options };
|
|
6
|
+
delete rest.timeout;
|
|
7
|
+
delete rest.maxRetries;
|
|
8
|
+
delete rest.retry;
|
|
9
|
+
return rest;
|
|
10
|
+
}
|
|
11
|
+
export function mergeRequestOptions(base, override) {
|
|
12
|
+
if (!base) {
|
|
13
|
+
return override;
|
|
14
|
+
}
|
|
15
|
+
if (!override) {
|
|
16
|
+
return base;
|
|
17
|
+
}
|
|
18
|
+
const mergeableOverride = override;
|
|
19
|
+
return {
|
|
20
|
+
...base,
|
|
21
|
+
...override,
|
|
22
|
+
headers: mergeHeaders(base.headers, mergeableOverride.headers),
|
|
23
|
+
signal: mergeableOverride.signal ?? base.signal,
|
|
24
|
+
timeout: mergeableOverride.timeout ?? base.timeout,
|
|
25
|
+
maxRetries: mergeableOverride.maxRetries ?? base.maxRetries,
|
|
26
|
+
retry: mergeableOverride.retry ?? base.retry,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function mergeScopedRequestOptions(base, override) {
|
|
30
|
+
return mergeRequestOptions(base, override) ?? override;
|
|
31
|
+
}
|
|
32
|
+
export function mergeHeaders(base, override) {
|
|
33
|
+
if (!base && !override) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const headers = new Headers();
|
|
37
|
+
let hasEntries = false;
|
|
38
|
+
applyHeaders(headers, base, () => {
|
|
39
|
+
hasEntries = true;
|
|
40
|
+
});
|
|
41
|
+
applyHeaders(headers, override, () => {
|
|
42
|
+
hasEntries = true;
|
|
43
|
+
});
|
|
44
|
+
return hasEntries ? headers : undefined;
|
|
45
|
+
}
|
|
46
|
+
function applyHeaders(target, source, onSet) {
|
|
47
|
+
if (!source) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (source instanceof Headers) {
|
|
51
|
+
source.forEach((value, key) => {
|
|
52
|
+
target.set(key, value);
|
|
53
|
+
onSet();
|
|
54
|
+
});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (Array.isArray(source)) {
|
|
58
|
+
for (const [key, value] of source) {
|
|
59
|
+
if (!key) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (value === null || value === undefined) {
|
|
63
|
+
target.delete(key);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
target.set(key, String(value));
|
|
67
|
+
onSet();
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
for (const [key, value] of Object.entries(source)) {
|
|
72
|
+
if (value === null || value === undefined) {
|
|
73
|
+
target.delete(key);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
target.set(key, Array.isArray(value) ? value.map((item) => String(item)).join(', ') : String(value));
|
|
77
|
+
onSet();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=request-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-options.js","sourceRoot":"","sources":["../../src/core/request-options.ts"],"names":[],"mappings":"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"}
|
package/dist/core/webhooks.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const textEncoder = new TextEncoder();
|
|
2
2
|
const MAX_TIMESTAMP_SKEW_MS = 5 * 60 * 1000;
|
|
3
|
+
let webCryptoPromise;
|
|
3
4
|
export class WebhookVerificationError extends Error {
|
|
4
5
|
constructor(message) {
|
|
5
6
|
super(message);
|
|
@@ -90,6 +91,7 @@ function toUint8Array(payload) {
|
|
|
90
91
|
return new Uint8Array(payload);
|
|
91
92
|
}
|
|
92
93
|
async function signWebhookPayload(payload, secret, timestamp) {
|
|
94
|
+
const crypto = await resolveWebCrypto();
|
|
93
95
|
const key = await crypto.subtle.importKey('raw', textEncoder.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
|
|
94
96
|
const message = timestamp
|
|
95
97
|
? concatUint8Arrays(textEncoder.encode(`v1:${timestamp}:`), payload)
|
|
@@ -97,6 +99,13 @@ async function signWebhookPayload(payload, secret, timestamp) {
|
|
|
97
99
|
const mac = await crypto.subtle.sign('HMAC', key, toCryptoBuffer(message));
|
|
98
100
|
return new Uint8Array(mac);
|
|
99
101
|
}
|
|
102
|
+
async function resolveWebCrypto() {
|
|
103
|
+
if (globalThis.crypto?.subtle) {
|
|
104
|
+
return globalThis.crypto;
|
|
105
|
+
}
|
|
106
|
+
webCryptoPromise ??= import('node:crypto').then(({ webcrypto }) => webcrypto);
|
|
107
|
+
return await webCryptoPromise;
|
|
108
|
+
}
|
|
100
109
|
function normalizeSignature(signature) {
|
|
101
110
|
const normalized = signature.startsWith('sha256=') ? signature.slice(7) : signature;
|
|
102
111
|
if (!/^[a-fA-F0-9]+$/.test(normalized) || normalized.length % 2 !== 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/core/webhooks.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;AACrC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/core/webhooks.ts"],"names":[],"mappings":"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"}
|