@crevio/sdk 0.6.0 → 0.6.5
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 +12 -40
- package/dist/commonjs/funcs/accessCheck.d.ts +19 -0
- package/dist/commonjs/funcs/accessCheck.d.ts.map +1 -0
- package/dist/commonjs/funcs/accessCheck.js +129 -0
- package/dist/commonjs/funcs/accessCheck.js.map +1 -0
- package/dist/commonjs/funcs/experiencesFilesCreate.d.ts +1 -1
- package/dist/commonjs/funcs/experiencesFilesCreate.d.ts.map +1 -1
- package/dist/commonjs/funcs/experiencesFilesCreate.js +3 -24
- package/dist/commonjs/funcs/experiencesFilesCreate.js.map +1 -1
- package/dist/commonjs/funcs/lessonsFilesCreate.d.ts +1 -1
- package/dist/commonjs/funcs/lessonsFilesCreate.d.ts.map +1 -1
- package/dist/commonjs/funcs/lessonsFilesCreate.js +3 -24
- package/dist/commonjs/funcs/lessonsFilesCreate.js.map +1 -1
- package/dist/commonjs/funcs/usersGet.d.ts +19 -0
- package/dist/commonjs/funcs/usersGet.d.ts.map +1 -0
- package/dist/commonjs/funcs/usersGet.js +125 -0
- package/dist/commonjs/funcs/usersGet.js.map +1 -0
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +1 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/lib/config.d.ts +3 -3
- package/dist/commonjs/lib/config.js +3 -3
- package/dist/commonjs/lib/verify-user-token.d.ts +35 -0
- package/dist/commonjs/lib/verify-user-token.d.ts.map +1 -0
- package/dist/commonjs/lib/verify-user-token.js +75 -0
- package/dist/commonjs/lib/verify-user-token.js.map +1 -0
- package/dist/commonjs/models/accesscheck.d.ts +13 -0
- package/dist/commonjs/models/accesscheck.d.ts.map +1 -0
- package/dist/commonjs/models/accesscheck.js +60 -0
- package/dist/commonjs/models/accesscheck.js.map +1 -0
- package/dist/commonjs/models/booking.d.ts +7 -7
- package/dist/commonjs/models/booking.d.ts.map +1 -1
- package/dist/commonjs/models/booking.js +9 -9
- package/dist/commonjs/models/booking.js.map +1 -1
- package/dist/commonjs/models/eventtype.d.ts +22 -51
- package/dist/commonjs/models/eventtype.d.ts.map +1 -1
- package/dist/commonjs/models/eventtype.js +22 -73
- package/dist/commonjs/models/eventtype.js.map +1 -1
- package/dist/commonjs/models/formation.d.ts +5 -25
- package/dist/commonjs/models/formation.d.ts.map +1 -1
- package/dist/commonjs/models/formation.js +6 -37
- package/dist/commonjs/models/formation.js.map +1 -1
- package/dist/commonjs/models/formationdocument.d.ts +2 -10
- package/dist/commonjs/models/formationdocument.d.ts.map +1 -1
- package/dist/commonjs/models/formationdocument.js +3 -16
- package/dist/commonjs/models/formationdocument.js.map +1 -1
- package/dist/commonjs/models/index.d.ts +2 -0
- package/dist/commonjs/models/index.d.ts.map +1 -1
- package/dist/commonjs/models/index.js +2 -0
- package/dist/commonjs/models/index.js.map +1 -1
- package/dist/commonjs/models/me.d.ts +1 -1
- package/dist/commonjs/models/me.d.ts.map +1 -1
- package/dist/commonjs/models/me.js +1 -1
- package/dist/commonjs/models/me.js.map +1 -1
- package/dist/commonjs/models/operations/checkaccess.d.ts +20 -0
- package/dist/commonjs/models/operations/checkaccess.d.ts.map +1 -0
- package/dist/commonjs/models/operations/checkaccess.js +55 -0
- package/dist/commonjs/models/operations/checkaccess.js.map +1 -0
- package/dist/commonjs/models/operations/createdigitaldownloadfile.d.ts +3 -15
- package/dist/commonjs/models/operations/createdigitaldownloadfile.d.ts.map +1 -1
- package/dist/commonjs/models/operations/createdigitaldownloadfile.js +6 -16
- package/dist/commonjs/models/operations/createdigitaldownloadfile.js.map +1 -1
- package/dist/commonjs/models/operations/createlessonfile.d.ts +3 -15
- package/dist/commonjs/models/operations/createlessonfile.d.ts.map +1 -1
- package/dist/commonjs/models/operations/createlessonfile.js +6 -16
- package/dist/commonjs/models/operations/createlessonfile.js.map +1 -1
- package/dist/commonjs/models/operations/getuser.d.ts +15 -0
- package/dist/commonjs/models/operations/getuser.d.ts.map +1 -0
- package/dist/commonjs/models/operations/getuser.js +49 -0
- package/dist/commonjs/models/operations/getuser.js.map +1 -0
- package/dist/commonjs/models/operations/index.d.ts +2 -0
- package/dist/commonjs/models/operations/index.d.ts.map +1 -1
- package/dist/commonjs/models/operations/index.js +2 -0
- package/dist/commonjs/models/operations/index.js.map +1 -1
- package/dist/commonjs/models/operations/retryformationpayment.d.ts +5 -25
- package/dist/commonjs/models/operations/retryformationpayment.d.ts.map +1 -1
- package/dist/commonjs/models/operations/retryformationpayment.js +6 -36
- package/dist/commonjs/models/operations/retryformationpayment.js.map +1 -1
- package/dist/commonjs/models/operations/submitformation.d.ts +5 -25
- package/dist/commonjs/models/operations/submitformation.d.ts.map +1 -1
- package/dist/commonjs/models/operations/submitformation.js +6 -36
- package/dist/commonjs/models/operations/submitformation.js.map +1 -1
- package/dist/commonjs/models/user.d.ts +14 -0
- package/dist/commonjs/models/user.d.ts.map +1 -0
- package/dist/commonjs/models/user.js +61 -0
- package/dist/commonjs/models/user.js.map +1 -0
- package/dist/commonjs/sdk/access.d.ts +13 -0
- package/dist/commonjs/sdk/access.d.ts.map +1 -0
- package/dist/commonjs/sdk/access.js +22 -0
- package/dist/commonjs/sdk/access.js.map +1 -0
- package/dist/commonjs/sdk/experiencesfiles.d.ts +1 -1
- package/dist/commonjs/sdk/experiencesfiles.js +1 -1
- package/dist/commonjs/sdk/lessonsfiles.d.ts +1 -1
- package/dist/commonjs/sdk/lessonsfiles.js +1 -1
- package/dist/commonjs/sdk/sdk.d.ts +6 -0
- package/dist/commonjs/sdk/sdk.d.ts.map +1 -1
- package/dist/commonjs/sdk/sdk.js +8 -0
- package/dist/commonjs/sdk/sdk.js.map +1 -1
- package/dist/commonjs/sdk/users.d.ts +13 -0
- package/dist/commonjs/sdk/users.d.ts.map +1 -0
- package/dist/commonjs/sdk/users.js +22 -0
- package/dist/commonjs/sdk/users.js.map +1 -0
- package/dist/esm/funcs/accessCheck.d.ts +19 -0
- package/dist/esm/funcs/accessCheck.d.ts.map +1 -0
- package/dist/esm/funcs/accessCheck.js +93 -0
- package/dist/esm/funcs/accessCheck.js.map +1 -0
- package/dist/esm/funcs/experiencesFilesCreate.d.ts +1 -1
- package/dist/esm/funcs/experiencesFilesCreate.d.ts.map +1 -1
- package/dist/esm/funcs/experiencesFilesCreate.js +4 -25
- package/dist/esm/funcs/experiencesFilesCreate.js.map +1 -1
- package/dist/esm/funcs/lessonsFilesCreate.d.ts +1 -1
- package/dist/esm/funcs/lessonsFilesCreate.d.ts.map +1 -1
- package/dist/esm/funcs/lessonsFilesCreate.js +4 -25
- package/dist/esm/funcs/lessonsFilesCreate.js.map +1 -1
- package/dist/esm/funcs/usersGet.d.ts +19 -0
- package/dist/esm/funcs/usersGet.d.ts.map +1 -0
- package/dist/esm/funcs/usersGet.js +89 -0
- package/dist/esm/funcs/usersGet.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/config.d.ts +3 -3
- package/dist/esm/lib/config.js +3 -3
- package/dist/esm/lib/verify-user-token.d.ts +35 -0
- package/dist/esm/lib/verify-user-token.d.ts.map +1 -0
- package/dist/esm/lib/verify-user-token.js +72 -0
- package/dist/esm/lib/verify-user-token.js.map +1 -0
- package/dist/esm/models/accesscheck.d.ts +13 -0
- package/dist/esm/models/accesscheck.d.ts.map +1 -0
- package/dist/esm/models/accesscheck.js +23 -0
- package/dist/esm/models/accesscheck.js.map +1 -0
- package/dist/esm/models/booking.d.ts +7 -7
- package/dist/esm/models/booking.d.ts.map +1 -1
- package/dist/esm/models/booking.js +7 -7
- package/dist/esm/models/booking.js.map +1 -1
- package/dist/esm/models/eventtype.d.ts +22 -51
- package/dist/esm/models/eventtype.d.ts.map +1 -1
- package/dist/esm/models/eventtype.js +21 -62
- package/dist/esm/models/eventtype.js.map +1 -1
- package/dist/esm/models/formation.d.ts +5 -25
- package/dist/esm/models/formation.d.ts.map +1 -1
- package/dist/esm/models/formation.js +5 -31
- package/dist/esm/models/formation.js.map +1 -1
- package/dist/esm/models/formationdocument.d.ts +2 -10
- package/dist/esm/models/formationdocument.d.ts.map +1 -1
- package/dist/esm/models/formationdocument.js +2 -13
- package/dist/esm/models/formationdocument.js.map +1 -1
- package/dist/esm/models/index.d.ts +2 -0
- package/dist/esm/models/index.d.ts.map +1 -1
- package/dist/esm/models/index.js +2 -0
- package/dist/esm/models/index.js.map +1 -1
- package/dist/esm/models/me.d.ts +1 -1
- package/dist/esm/models/me.d.ts.map +1 -1
- package/dist/esm/models/me.js +1 -1
- package/dist/esm/models/me.js.map +1 -1
- package/dist/esm/models/operations/checkaccess.d.ts +20 -0
- package/dist/esm/models/operations/checkaccess.d.ts.map +1 -0
- package/dist/esm/models/operations/checkaccess.js +18 -0
- package/dist/esm/models/operations/checkaccess.js.map +1 -0
- package/dist/esm/models/operations/createdigitaldownloadfile.d.ts +3 -15
- package/dist/esm/models/operations/createdigitaldownloadfile.d.ts.map +1 -1
- package/dist/esm/models/operations/createdigitaldownloadfile.js +5 -14
- package/dist/esm/models/operations/createdigitaldownloadfile.js.map +1 -1
- package/dist/esm/models/operations/createlessonfile.d.ts +3 -15
- package/dist/esm/models/operations/createlessonfile.d.ts.map +1 -1
- package/dist/esm/models/operations/createlessonfile.js +5 -14
- package/dist/esm/models/operations/createlessonfile.js.map +1 -1
- package/dist/esm/models/operations/getuser.d.ts +15 -0
- package/dist/esm/models/operations/getuser.d.ts.map +1 -0
- package/dist/esm/models/operations/getuser.js +12 -0
- package/dist/esm/models/operations/getuser.js.map +1 -0
- package/dist/esm/models/operations/index.d.ts +2 -0
- package/dist/esm/models/operations/index.d.ts.map +1 -1
- package/dist/esm/models/operations/index.js +2 -0
- package/dist/esm/models/operations/index.js.map +1 -1
- package/dist/esm/models/operations/retryformationpayment.d.ts +5 -25
- package/dist/esm/models/operations/retryformationpayment.d.ts.map +1 -1
- package/dist/esm/models/operations/retryformationpayment.js +5 -30
- package/dist/esm/models/operations/retryformationpayment.js.map +1 -1
- package/dist/esm/models/operations/submitformation.d.ts +5 -25
- package/dist/esm/models/operations/submitformation.d.ts.map +1 -1
- package/dist/esm/models/operations/submitformation.js +5 -30
- package/dist/esm/models/operations/submitformation.js.map +1 -1
- package/dist/esm/models/user.d.ts +14 -0
- package/dist/esm/models/user.d.ts.map +1 -0
- package/dist/esm/models/user.js +24 -0
- package/dist/esm/models/user.js.map +1 -0
- package/dist/esm/sdk/access.d.ts +13 -0
- package/dist/esm/sdk/access.d.ts.map +1 -0
- package/dist/esm/sdk/access.js +18 -0
- package/dist/esm/sdk/access.js.map +1 -0
- package/dist/esm/sdk/experiencesfiles.d.ts +1 -1
- package/dist/esm/sdk/experiencesfiles.js +1 -1
- package/dist/esm/sdk/lessonsfiles.d.ts +1 -1
- package/dist/esm/sdk/lessonsfiles.js +1 -1
- package/dist/esm/sdk/sdk.d.ts +6 -0
- package/dist/esm/sdk/sdk.d.ts.map +1 -1
- package/dist/esm/sdk/sdk.js +8 -0
- package/dist/esm/sdk/sdk.js.map +1 -1
- package/dist/esm/sdk/users.d.ts +13 -0
- package/dist/esm/sdk/users.d.ts.map +1 -0
- package/dist/esm/sdk/users.js +18 -0
- package/dist/esm/sdk/users.js.map +1 -0
- package/jsr.json +1 -1
- package/package.json +2 -1
- package/src/funcs/accessCheck.ts +182 -0
- package/src/funcs/experiencesFilesCreate.ts +4 -38
- package/src/funcs/lessonsFilesCreate.ts +4 -38
- package/src/funcs/usersGet.ts +178 -0
- package/src/index.ts +1 -0
- package/src/lib/config.ts +3 -3
- package/src/lib/verify-user-token.ts +118 -0
- package/src/models/accesscheck.ts +44 -0
- package/src/models/booking.ts +15 -15
- package/src/models/eventtype.ts +37 -212
- package/src/models/formation.ts +10 -102
- package/src/models/formationdocument.ts +4 -39
- package/src/models/index.ts +2 -0
- package/src/models/me.ts +2 -2
- package/src/models/operations/checkaccess.ts +45 -0
- package/src/models/operations/createdigitaldownloadfile.ts +8 -40
- package/src/models/operations/createlessonfile.ts +8 -38
- package/src/models/operations/getuser.ts +30 -0
- package/src/models/operations/index.ts +2 -0
- package/src/models/operations/retryformationpayment.ts +10 -105
- package/src/models/operations/submitformation.ts +10 -105
- package/src/models/user.ts +42 -0
- package/src/sdk/access.ts +28 -0
- package/src/sdk/experiencesfiles.ts +1 -1
- package/src/sdk/lessonsfiles.ts +1 -1
- package/src/sdk/sdk.ts +12 -0
- package/src/sdk/users.ts +28 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { CrevioCore } from "../core.js";
|
|
6
|
+
import { encodeSimple } from "../lib/encodings.js";
|
|
7
|
+
import { matchStatusCode } from "../lib/http.js";
|
|
8
|
+
import * as M from "../lib/matchers.js";
|
|
9
|
+
import { compactMap } from "../lib/primitives.js";
|
|
10
|
+
import { safeParse } from "../lib/schemas.js";
|
|
11
|
+
import { RequestOptions } from "../lib/sdks.js";
|
|
12
|
+
import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
|
|
13
|
+
import { pathToFunc } from "../lib/url.js";
|
|
14
|
+
import { CrevioError } from "../models/errors/crevioerror.js";
|
|
15
|
+
import {
|
|
16
|
+
ConnectionError,
|
|
17
|
+
InvalidRequestError,
|
|
18
|
+
RequestAbortedError,
|
|
19
|
+
RequestTimeoutError,
|
|
20
|
+
UnexpectedClientError,
|
|
21
|
+
} from "../models/errors/httpclienterrors.js";
|
|
22
|
+
import * as errors from "../models/errors/index.js";
|
|
23
|
+
import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
|
|
24
|
+
import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
|
|
25
|
+
import * as models from "../models/index.js";
|
|
26
|
+
import * as operations from "../models/operations/index.js";
|
|
27
|
+
import { APICall, APIPromise } from "../types/async.js";
|
|
28
|
+
import { Result } from "../types/fp.js";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Check access
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* Returns whether a buyer (user_… or cus_… id) has access to a resource (the account acct_…, a prod_…, or an exp_…) and at what level (no_access, customer, admin). Powers entitlement gating on deployed sites.
|
|
35
|
+
*/
|
|
36
|
+
export function accessCheck(
|
|
37
|
+
client: CrevioCore,
|
|
38
|
+
request: operations.CheckAccessRequest,
|
|
39
|
+
options?: RequestOptions,
|
|
40
|
+
): APIPromise<
|
|
41
|
+
Result<
|
|
42
|
+
models.AccessCheck,
|
|
43
|
+
| errors.ErrorT
|
|
44
|
+
| CrevioError
|
|
45
|
+
| ResponseValidationError
|
|
46
|
+
| ConnectionError
|
|
47
|
+
| RequestAbortedError
|
|
48
|
+
| RequestTimeoutError
|
|
49
|
+
| InvalidRequestError
|
|
50
|
+
| UnexpectedClientError
|
|
51
|
+
| SDKValidationError
|
|
52
|
+
>
|
|
53
|
+
> {
|
|
54
|
+
return new APIPromise($do(
|
|
55
|
+
client,
|
|
56
|
+
request,
|
|
57
|
+
options,
|
|
58
|
+
));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function $do(
|
|
62
|
+
client: CrevioCore,
|
|
63
|
+
request: operations.CheckAccessRequest,
|
|
64
|
+
options?: RequestOptions,
|
|
65
|
+
): Promise<
|
|
66
|
+
[
|
|
67
|
+
Result<
|
|
68
|
+
models.AccessCheck,
|
|
69
|
+
| errors.ErrorT
|
|
70
|
+
| CrevioError
|
|
71
|
+
| ResponseValidationError
|
|
72
|
+
| ConnectionError
|
|
73
|
+
| RequestAbortedError
|
|
74
|
+
| RequestTimeoutError
|
|
75
|
+
| InvalidRequestError
|
|
76
|
+
| UnexpectedClientError
|
|
77
|
+
| SDKValidationError
|
|
78
|
+
>,
|
|
79
|
+
APICall,
|
|
80
|
+
]
|
|
81
|
+
> {
|
|
82
|
+
const parsed = safeParse(
|
|
83
|
+
request,
|
|
84
|
+
(value) => operations.CheckAccessRequest$outboundSchema.parse(value),
|
|
85
|
+
"Input validation failed",
|
|
86
|
+
);
|
|
87
|
+
if (!parsed.ok) {
|
|
88
|
+
return [parsed, { status: "invalid" }];
|
|
89
|
+
}
|
|
90
|
+
const payload = parsed.value;
|
|
91
|
+
const body = null;
|
|
92
|
+
|
|
93
|
+
const pathParams = {
|
|
94
|
+
id: encodeSimple("id", payload.id, {
|
|
95
|
+
explode: false,
|
|
96
|
+
charEncoding: "percent",
|
|
97
|
+
}),
|
|
98
|
+
resource_id: encodeSimple("resource_id", payload.resource_id, {
|
|
99
|
+
explode: false,
|
|
100
|
+
charEncoding: "percent",
|
|
101
|
+
}),
|
|
102
|
+
};
|
|
103
|
+
const path = pathToFunc("/users/{id}/access/{resource_id}")(pathParams);
|
|
104
|
+
|
|
105
|
+
const headers = new Headers(compactMap({
|
|
106
|
+
Accept: "application/json",
|
|
107
|
+
}));
|
|
108
|
+
|
|
109
|
+
const secConfig = await extractSecurity(client._options.apiKey);
|
|
110
|
+
const securityInput = secConfig == null ? {} : { apiKey: secConfig };
|
|
111
|
+
const requestSecurity = resolveGlobalSecurity(securityInput);
|
|
112
|
+
|
|
113
|
+
const context = {
|
|
114
|
+
options: client._options,
|
|
115
|
+
baseURL: options?.serverURL ?? client._baseURL ?? "",
|
|
116
|
+
operationID: "checkAccess",
|
|
117
|
+
oAuth2Scopes: null,
|
|
118
|
+
|
|
119
|
+
resolvedSecurity: requestSecurity,
|
|
120
|
+
|
|
121
|
+
securitySource: client._options.apiKey,
|
|
122
|
+
retryConfig: options?.retries
|
|
123
|
+
|| client._options.retryConfig
|
|
124
|
+
|| { strategy: "none" },
|
|
125
|
+
retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"],
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const requestRes = client._createRequest(context, {
|
|
129
|
+
security: requestSecurity,
|
|
130
|
+
method: "GET",
|
|
131
|
+
baseURL: options?.serverURL,
|
|
132
|
+
path: path,
|
|
133
|
+
headers: headers,
|
|
134
|
+
body: body,
|
|
135
|
+
userAgent: client._options.userAgent,
|
|
136
|
+
timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
|
|
137
|
+
}, options);
|
|
138
|
+
if (!requestRes.ok) {
|
|
139
|
+
return [requestRes, { status: "invalid" }];
|
|
140
|
+
}
|
|
141
|
+
const req = requestRes.value;
|
|
142
|
+
|
|
143
|
+
const doResult = await client._do(req, {
|
|
144
|
+
context,
|
|
145
|
+
isErrorStatusCode: (statusCode: number) =>
|
|
146
|
+
matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]),
|
|
147
|
+
retryConfig: context.retryConfig,
|
|
148
|
+
retryCodes: context.retryCodes,
|
|
149
|
+
});
|
|
150
|
+
if (!doResult.ok) {
|
|
151
|
+
return [doResult, { status: "request-error", request: req }];
|
|
152
|
+
}
|
|
153
|
+
const response = doResult.value;
|
|
154
|
+
|
|
155
|
+
const responseFields = {
|
|
156
|
+
HttpMeta: { Response: response, Request: req },
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
const [result] = await M.match<
|
|
160
|
+
models.AccessCheck,
|
|
161
|
+
| errors.ErrorT
|
|
162
|
+
| CrevioError
|
|
163
|
+
| ResponseValidationError
|
|
164
|
+
| ConnectionError
|
|
165
|
+
| RequestAbortedError
|
|
166
|
+
| RequestTimeoutError
|
|
167
|
+
| InvalidRequestError
|
|
168
|
+
| UnexpectedClientError
|
|
169
|
+
| SDKValidationError
|
|
170
|
+
>(
|
|
171
|
+
M.json(200, models.AccessCheck$inboundSchema),
|
|
172
|
+
M.jsonErr([400, 401, 403, 404], errors.ErrorT$inboundSchema),
|
|
173
|
+
M.jsonErr(500, errors.ErrorT$inboundSchema),
|
|
174
|
+
M.fail("4XX"),
|
|
175
|
+
M.fail("5XX"),
|
|
176
|
+
)(response, req, { extraFields: responseFields });
|
|
177
|
+
if (!result.ok) {
|
|
178
|
+
return [result, { status: "complete", request: req, response }];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return [result, { status: "complete", request: req, response }];
|
|
182
|
+
}
|
|
@@ -3,12 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { CrevioCore } from "../core.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
bytesToBlob,
|
|
9
|
-
getContentTypeFromFileName,
|
|
10
|
-
readableStreamToArrayBuffer,
|
|
11
|
-
} from "../lib/files.js";
|
|
6
|
+
import { encodeJSON, encodeSimple } from "../lib/encodings.js";
|
|
12
7
|
import { matchStatusCode } from "../lib/http.js";
|
|
13
8
|
import * as M from "../lib/matchers.js";
|
|
14
9
|
import { compactMap } from "../lib/primitives.js";
|
|
@@ -30,15 +25,13 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
|
|
|
30
25
|
import * as models from "../models/index.js";
|
|
31
26
|
import * as operations from "../models/operations/index.js";
|
|
32
27
|
import { APICall, APIPromise } from "../types/async.js";
|
|
33
|
-
import { isBlobLike } from "../types/blobs.js";
|
|
34
28
|
import { Result } from "../types/fp.js";
|
|
35
|
-
import { isReadableStream } from "../types/streams.js";
|
|
36
29
|
|
|
37
30
|
/**
|
|
38
31
|
* Upload digital download files
|
|
39
32
|
*
|
|
40
33
|
* @remarks
|
|
41
|
-
* Attaches
|
|
34
|
+
* Attaches already-uploaded files to a digital download experience as deliverables. Upload the bytes first with `POST /files` (presigned upload), then reference the resulting ids here: `{ "file_ids": ["file_..."] }`. Appends to the existing set and de-duplicates, so re-sending an already-attached id is a safe no-op. Returns the full file list.
|
|
42
35
|
*/
|
|
43
36
|
export function experiencesFilesCreate(
|
|
44
37
|
client: CrevioCore,
|
|
@@ -96,35 +89,7 @@ async function $do(
|
|
|
96
89
|
return [parsed, { status: "invalid" }];
|
|
97
90
|
}
|
|
98
91
|
const payload = parsed.value;
|
|
99
|
-
const body =
|
|
100
|
-
|
|
101
|
-
for (const fileItem of payload.RequestBody.files ?? []) {
|
|
102
|
-
if (isBlobLike(fileItem)) {
|
|
103
|
-
const file = fileItem;
|
|
104
|
-
const blob = await normalizeBlob(file);
|
|
105
|
-
const name = "name" in file ? (file.name as string) : undefined;
|
|
106
|
-
appendForm(body, "files[]", blob, name);
|
|
107
|
-
} else if (isReadableStream(fileItem.content)) {
|
|
108
|
-
const buffer = await readableStreamToArrayBuffer(fileItem.content);
|
|
109
|
-
const contentType = getContentTypeFromFileName(fileItem.fileName)
|
|
110
|
-
|| "application/octet-stream";
|
|
111
|
-
appendForm(
|
|
112
|
-
body,
|
|
113
|
-
"files[]",
|
|
114
|
-
bytesToBlob(buffer, contentType),
|
|
115
|
-
fileItem.fileName,
|
|
116
|
-
);
|
|
117
|
-
} else {
|
|
118
|
-
const contentType = getContentTypeFromFileName(fileItem.fileName)
|
|
119
|
-
|| "application/octet-stream";
|
|
120
|
-
appendForm(
|
|
121
|
-
body,
|
|
122
|
-
"files[]",
|
|
123
|
-
bytesToBlob(fileItem.content, contentType),
|
|
124
|
-
fileItem.fileName,
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
92
|
+
const body = encodeJSON("body", payload.RequestBody, { explode: true });
|
|
128
93
|
|
|
129
94
|
const pathParams = {
|
|
130
95
|
experience_id: encodeSimple("experience_id", payload.experience_id, {
|
|
@@ -135,6 +100,7 @@ async function $do(
|
|
|
135
100
|
const path = pathToFunc("/experiences/{experience_id}/files")(pathParams);
|
|
136
101
|
|
|
137
102
|
const headers = new Headers(compactMap({
|
|
103
|
+
"Content-Type": "application/json",
|
|
138
104
|
Accept: "application/json",
|
|
139
105
|
}));
|
|
140
106
|
|
|
@@ -3,12 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { CrevioCore } from "../core.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
bytesToBlob,
|
|
9
|
-
getContentTypeFromFileName,
|
|
10
|
-
readableStreamToArrayBuffer,
|
|
11
|
-
} from "../lib/files.js";
|
|
6
|
+
import { encodeJSON, encodeSimple } from "../lib/encodings.js";
|
|
12
7
|
import { matchStatusCode } from "../lib/http.js";
|
|
13
8
|
import * as M from "../lib/matchers.js";
|
|
14
9
|
import { compactMap } from "../lib/primitives.js";
|
|
@@ -30,15 +25,13 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
|
|
|
30
25
|
import * as models from "../models/index.js";
|
|
31
26
|
import * as operations from "../models/operations/index.js";
|
|
32
27
|
import { APICall, APIPromise } from "../types/async.js";
|
|
33
|
-
import { isBlobLike } from "../types/blobs.js";
|
|
34
28
|
import { Result } from "../types/fp.js";
|
|
35
|
-
import { isReadableStream } from "../types/streams.js";
|
|
36
29
|
|
|
37
30
|
/**
|
|
38
31
|
* Upload lesson files
|
|
39
32
|
*
|
|
40
33
|
* @remarks
|
|
41
|
-
* Attaches
|
|
34
|
+
* Attaches already-uploaded files to a lesson. Upload the bytes first with `POST /files` (presigned upload), then reference the resulting ids here: `{ "file_ids": ["file_..."] }`. Appends to the existing set and de-duplicates, so re-sending an already-attached id is a safe no-op. Returns the full file list.
|
|
42
35
|
*/
|
|
43
36
|
export function lessonsFilesCreate(
|
|
44
37
|
client: CrevioCore,
|
|
@@ -95,35 +88,7 @@ async function $do(
|
|
|
95
88
|
return [parsed, { status: "invalid" }];
|
|
96
89
|
}
|
|
97
90
|
const payload = parsed.value;
|
|
98
|
-
const body =
|
|
99
|
-
|
|
100
|
-
for (const fileItem of payload.RequestBody.files ?? []) {
|
|
101
|
-
if (isBlobLike(fileItem)) {
|
|
102
|
-
const file = fileItem;
|
|
103
|
-
const blob = await normalizeBlob(file);
|
|
104
|
-
const name = "name" in file ? (file.name as string) : undefined;
|
|
105
|
-
appendForm(body, "files[]", blob, name);
|
|
106
|
-
} else if (isReadableStream(fileItem.content)) {
|
|
107
|
-
const buffer = await readableStreamToArrayBuffer(fileItem.content);
|
|
108
|
-
const contentType = getContentTypeFromFileName(fileItem.fileName)
|
|
109
|
-
|| "application/octet-stream";
|
|
110
|
-
appendForm(
|
|
111
|
-
body,
|
|
112
|
-
"files[]",
|
|
113
|
-
bytesToBlob(buffer, contentType),
|
|
114
|
-
fileItem.fileName,
|
|
115
|
-
);
|
|
116
|
-
} else {
|
|
117
|
-
const contentType = getContentTypeFromFileName(fileItem.fileName)
|
|
118
|
-
|| "application/octet-stream";
|
|
119
|
-
appendForm(
|
|
120
|
-
body,
|
|
121
|
-
"files[]",
|
|
122
|
-
bytesToBlob(fileItem.content, contentType),
|
|
123
|
-
fileItem.fileName,
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
91
|
+
const body = encodeJSON("body", payload.RequestBody, { explode: true });
|
|
127
92
|
|
|
128
93
|
const pathParams = {
|
|
129
94
|
lesson_id: encodeSimple("lesson_id", payload.lesson_id, {
|
|
@@ -134,6 +99,7 @@ async function $do(
|
|
|
134
99
|
const path = pathToFunc("/lessons/{lesson_id}/files")(pathParams);
|
|
135
100
|
|
|
136
101
|
const headers = new Headers(compactMap({
|
|
102
|
+
"Content-Type": "application/json",
|
|
137
103
|
Accept: "application/json",
|
|
138
104
|
}));
|
|
139
105
|
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { CrevioCore } from "../core.js";
|
|
6
|
+
import { encodeSimple } from "../lib/encodings.js";
|
|
7
|
+
import { matchStatusCode } from "../lib/http.js";
|
|
8
|
+
import * as M from "../lib/matchers.js";
|
|
9
|
+
import { compactMap } from "../lib/primitives.js";
|
|
10
|
+
import { safeParse } from "../lib/schemas.js";
|
|
11
|
+
import { RequestOptions } from "../lib/sdks.js";
|
|
12
|
+
import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
|
|
13
|
+
import { pathToFunc } from "../lib/url.js";
|
|
14
|
+
import { CrevioError } from "../models/errors/crevioerror.js";
|
|
15
|
+
import {
|
|
16
|
+
ConnectionError,
|
|
17
|
+
InvalidRequestError,
|
|
18
|
+
RequestAbortedError,
|
|
19
|
+
RequestTimeoutError,
|
|
20
|
+
UnexpectedClientError,
|
|
21
|
+
} from "../models/errors/httpclienterrors.js";
|
|
22
|
+
import * as errors from "../models/errors/index.js";
|
|
23
|
+
import { ResponseValidationError } from "../models/errors/responsevalidationerror.js";
|
|
24
|
+
import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
|
|
25
|
+
import * as models from "../models/index.js";
|
|
26
|
+
import * as operations from "../models/operations/index.js";
|
|
27
|
+
import { APICall, APIPromise } from "../types/async.js";
|
|
28
|
+
import { Result } from "../types/fp.js";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get user
|
|
32
|
+
*
|
|
33
|
+
* @remarks
|
|
34
|
+
* Returns the profile (first/last name, email) of a buyer signed in on a deployed site, resolved from their user_… id or username. Scoped to the account; pair with getUser/verifyUserToken on the site.
|
|
35
|
+
*/
|
|
36
|
+
export function usersGet(
|
|
37
|
+
client: CrevioCore,
|
|
38
|
+
request: operations.GetUserRequest,
|
|
39
|
+
options?: RequestOptions,
|
|
40
|
+
): APIPromise<
|
|
41
|
+
Result<
|
|
42
|
+
models.User,
|
|
43
|
+
| errors.ErrorT
|
|
44
|
+
| CrevioError
|
|
45
|
+
| ResponseValidationError
|
|
46
|
+
| ConnectionError
|
|
47
|
+
| RequestAbortedError
|
|
48
|
+
| RequestTimeoutError
|
|
49
|
+
| InvalidRequestError
|
|
50
|
+
| UnexpectedClientError
|
|
51
|
+
| SDKValidationError
|
|
52
|
+
>
|
|
53
|
+
> {
|
|
54
|
+
return new APIPromise($do(
|
|
55
|
+
client,
|
|
56
|
+
request,
|
|
57
|
+
options,
|
|
58
|
+
));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function $do(
|
|
62
|
+
client: CrevioCore,
|
|
63
|
+
request: operations.GetUserRequest,
|
|
64
|
+
options?: RequestOptions,
|
|
65
|
+
): Promise<
|
|
66
|
+
[
|
|
67
|
+
Result<
|
|
68
|
+
models.User,
|
|
69
|
+
| errors.ErrorT
|
|
70
|
+
| CrevioError
|
|
71
|
+
| ResponseValidationError
|
|
72
|
+
| ConnectionError
|
|
73
|
+
| RequestAbortedError
|
|
74
|
+
| RequestTimeoutError
|
|
75
|
+
| InvalidRequestError
|
|
76
|
+
| UnexpectedClientError
|
|
77
|
+
| SDKValidationError
|
|
78
|
+
>,
|
|
79
|
+
APICall,
|
|
80
|
+
]
|
|
81
|
+
> {
|
|
82
|
+
const parsed = safeParse(
|
|
83
|
+
request,
|
|
84
|
+
(value) => operations.GetUserRequest$outboundSchema.parse(value),
|
|
85
|
+
"Input validation failed",
|
|
86
|
+
);
|
|
87
|
+
if (!parsed.ok) {
|
|
88
|
+
return [parsed, { status: "invalid" }];
|
|
89
|
+
}
|
|
90
|
+
const payload = parsed.value;
|
|
91
|
+
const body = null;
|
|
92
|
+
|
|
93
|
+
const pathParams = {
|
|
94
|
+
id: encodeSimple("id", payload.id, {
|
|
95
|
+
explode: false,
|
|
96
|
+
charEncoding: "percent",
|
|
97
|
+
}),
|
|
98
|
+
};
|
|
99
|
+
const path = pathToFunc("/users/{id}")(pathParams);
|
|
100
|
+
|
|
101
|
+
const headers = new Headers(compactMap({
|
|
102
|
+
Accept: "application/json",
|
|
103
|
+
}));
|
|
104
|
+
|
|
105
|
+
const secConfig = await extractSecurity(client._options.apiKey);
|
|
106
|
+
const securityInput = secConfig == null ? {} : { apiKey: secConfig };
|
|
107
|
+
const requestSecurity = resolveGlobalSecurity(securityInput);
|
|
108
|
+
|
|
109
|
+
const context = {
|
|
110
|
+
options: client._options,
|
|
111
|
+
baseURL: options?.serverURL ?? client._baseURL ?? "",
|
|
112
|
+
operationID: "getUser",
|
|
113
|
+
oAuth2Scopes: null,
|
|
114
|
+
|
|
115
|
+
resolvedSecurity: requestSecurity,
|
|
116
|
+
|
|
117
|
+
securitySource: client._options.apiKey,
|
|
118
|
+
retryConfig: options?.retries
|
|
119
|
+
|| client._options.retryConfig
|
|
120
|
+
|| { strategy: "none" },
|
|
121
|
+
retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"],
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const requestRes = client._createRequest(context, {
|
|
125
|
+
security: requestSecurity,
|
|
126
|
+
method: "GET",
|
|
127
|
+
baseURL: options?.serverURL,
|
|
128
|
+
path: path,
|
|
129
|
+
headers: headers,
|
|
130
|
+
body: body,
|
|
131
|
+
userAgent: client._options.userAgent,
|
|
132
|
+
timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
|
|
133
|
+
}, options);
|
|
134
|
+
if (!requestRes.ok) {
|
|
135
|
+
return [requestRes, { status: "invalid" }];
|
|
136
|
+
}
|
|
137
|
+
const req = requestRes.value;
|
|
138
|
+
|
|
139
|
+
const doResult = await client._do(req, {
|
|
140
|
+
context,
|
|
141
|
+
isErrorStatusCode: (statusCode: number) =>
|
|
142
|
+
matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]),
|
|
143
|
+
retryConfig: context.retryConfig,
|
|
144
|
+
retryCodes: context.retryCodes,
|
|
145
|
+
});
|
|
146
|
+
if (!doResult.ok) {
|
|
147
|
+
return [doResult, { status: "request-error", request: req }];
|
|
148
|
+
}
|
|
149
|
+
const response = doResult.value;
|
|
150
|
+
|
|
151
|
+
const responseFields = {
|
|
152
|
+
HttpMeta: { Response: response, Request: req },
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const [result] = await M.match<
|
|
156
|
+
models.User,
|
|
157
|
+
| errors.ErrorT
|
|
158
|
+
| CrevioError
|
|
159
|
+
| ResponseValidationError
|
|
160
|
+
| ConnectionError
|
|
161
|
+
| RequestAbortedError
|
|
162
|
+
| RequestTimeoutError
|
|
163
|
+
| InvalidRequestError
|
|
164
|
+
| UnexpectedClientError
|
|
165
|
+
| SDKValidationError
|
|
166
|
+
>(
|
|
167
|
+
M.json(200, models.User$inboundSchema),
|
|
168
|
+
M.jsonErr([400, 401, 403, 404], errors.ErrorT$inboundSchema),
|
|
169
|
+
M.jsonErr(500, errors.ErrorT$inboundSchema),
|
|
170
|
+
M.fail("4XX"),
|
|
171
|
+
M.fail("5XX"),
|
|
172
|
+
)(response, req, { extraFields: responseFields });
|
|
173
|
+
if (!result.ok) {
|
|
174
|
+
return [result, { status: "complete", request: req, response }];
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return [result, { status: "complete", request: req, response }];
|
|
178
|
+
}
|
package/src/index.ts
CHANGED
package/src/lib/config.ts
CHANGED
|
@@ -61,7 +61,7 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
|
|
|
61
61
|
export const SDK_METADATA = {
|
|
62
62
|
language: "typescript",
|
|
63
63
|
openapiDocVersion: "1.0.0",
|
|
64
|
-
sdkVersion: "0.6.
|
|
65
|
-
genVersion: "2.
|
|
66
|
-
userAgent: "speakeasy-sdk/typescript 0.6.
|
|
64
|
+
sdkVersion: "0.6.5",
|
|
65
|
+
genVersion: "2.914.0",
|
|
66
|
+
userAgent: "speakeasy-sdk/typescript 0.6.5 2.914.0 1.0.0 @crevio/sdk",
|
|
67
67
|
} as const;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// Hand-written helper (a custom file Speakeasy does not generate, so it
|
|
2
|
+
// survives `speakeasy run` untouched). It is the Crevio equivalent of Whop's
|
|
3
|
+
// `verifyUserToken`, and follows the same contract: read the signed user token
|
|
4
|
+
// the platform forwards on each request, verify its signature, and return the
|
|
5
|
+
// authenticated identity.
|
|
6
|
+
//
|
|
7
|
+
// The one export line in index.ts must be re-added after each regen
|
|
8
|
+
// (persistentEdits is disabled to avoid three-way merge conflicts).
|
|
9
|
+
//
|
|
10
|
+
// The token is a compact EdDSA (Ed25519) JWS minted by Rails (Sites::Token).
|
|
11
|
+
// On Crevio-hosted apps the dispatch worker verifies it at the edge and forwards
|
|
12
|
+
// it as the `x-crevio-user-token` header (stripping any inbound spoof); we verify
|
|
13
|
+
// it again here against the published JWKS so the guarantee holds even for apps
|
|
14
|
+
// hosted off-platform, where no dispatch worker sits in front.
|
|
15
|
+
|
|
16
|
+
import { createRemoteJWKSet, jwtVerify } from "jose";
|
|
17
|
+
|
|
18
|
+
const TOKEN_HEADER = "x-crevio-user-token";
|
|
19
|
+
const ISSUER = "crevio";
|
|
20
|
+
const DEFAULT_JWKS_URL = "https://crevio.co/.well-known/jwks.json";
|
|
21
|
+
|
|
22
|
+
export interface CrevioUser {
|
|
23
|
+
/** The signed-in end-user's Crevio user id (e.g. "user_abc123"). */
|
|
24
|
+
userId: string;
|
|
25
|
+
/** The account (merchant) this request is scoped to (e.g. "acct_abc123"). */
|
|
26
|
+
accountId: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Accepts anything that carries request headers: a WHATWG `Headers`/`Request`
|
|
30
|
+
// (browsers, Workers, Deno, Next.js `headers()`), or a plain header object
|
|
31
|
+
// (Node `IncomingHttpHeaders`, Express `req.headers`).
|
|
32
|
+
export type HeaderSource =
|
|
33
|
+
| Headers
|
|
34
|
+
| Request
|
|
35
|
+
| Record<string, string | string[] | undefined>
|
|
36
|
+
| null
|
|
37
|
+
| undefined;
|
|
38
|
+
|
|
39
|
+
export interface VerifyUserTokenOptions {
|
|
40
|
+
/**
|
|
41
|
+
* Where to fetch the Ed25519 public key set. Defaults to Crevio production
|
|
42
|
+
* (`https://crevio.co/.well-known/jwks.json`). Point this at your dev host
|
|
43
|
+
* (or the local dev proxy) when developing. Results are cached per URL.
|
|
44
|
+
*/
|
|
45
|
+
jwksUrl?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Expected `aud` claim (the site's worker name). Off-platform apps should set
|
|
48
|
+
* this to reject tokens minted for a different site; on-platform the dispatch
|
|
49
|
+
* worker already binds the token to this site, so it can be omitted.
|
|
50
|
+
*/
|
|
51
|
+
audience?: string;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// jose caches keys internally and refreshes on unknown `kid`, so we keep one
|
|
55
|
+
// remote key set per JWKS URL for the life of the process.
|
|
56
|
+
const keySets = new Map<string, ReturnType<typeof createRemoteJWKSet>>();
|
|
57
|
+
|
|
58
|
+
function jwksFor(url: string): ReturnType<typeof createRemoteJWKSet> {
|
|
59
|
+
let set = keySets.get(url);
|
|
60
|
+
if (!set) {
|
|
61
|
+
set = createRemoteJWKSet(new URL(url));
|
|
62
|
+
keySets.set(url, set);
|
|
63
|
+
}
|
|
64
|
+
return set;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function readHeader(source: HeaderSource, name: string): string | null {
|
|
68
|
+
if (!source) return null;
|
|
69
|
+
|
|
70
|
+
const headers = source instanceof Request ? source.headers : source;
|
|
71
|
+
|
|
72
|
+
// Headers, ReadonlyHeaders (Next.js), and Request#headers all expose `.get`.
|
|
73
|
+
if (typeof (headers as { get?: unknown }).get === "function") {
|
|
74
|
+
return (headers as { get(n: string): string | null }).get(name) ?? null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const record = headers as Record<string, string | string[] | undefined>;
|
|
78
|
+
const value = record[name] ?? record[name.toLowerCase()];
|
|
79
|
+
return Array.isArray(value) ? (value[0] ?? null) : (value ?? null);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Verifies the signed user token the Crevio platform forwards on the request and
|
|
84
|
+
* returns the authenticated visitor, or `null` for an anonymous visitor (no
|
|
85
|
+
* token) or an invalid/expired/forged token — always fail-closed.
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* const user = await verifyUserToken(await headers());
|
|
90
|
+
* if (!user) return <SignInWithCrevio />;
|
|
91
|
+
* const { hasAccess } = await crevio.access.check({ id: user.userId, resourceId: "exp_123" });
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export async function verifyUserToken(
|
|
95
|
+
source: HeaderSource,
|
|
96
|
+
options?: VerifyUserTokenOptions,
|
|
97
|
+
): Promise<CrevioUser | null> {
|
|
98
|
+
const token = readHeader(source, TOKEN_HEADER);
|
|
99
|
+
if (!token) return null;
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
const { payload } = await jwtVerify(
|
|
103
|
+
token,
|
|
104
|
+
jwksFor(options?.jwksUrl ?? DEFAULT_JWKS_URL),
|
|
105
|
+
options?.audience
|
|
106
|
+
? { issuer: ISSUER, audience: options.audience }
|
|
107
|
+
: { issuer: ISSUER },
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
const userId = payload.sub;
|
|
111
|
+
const accountId = payload["acc"];
|
|
112
|
+
if (typeof userId !== "string" || typeof accountId !== "string") return null;
|
|
113
|
+
|
|
114
|
+
return { userId, accountId };
|
|
115
|
+
} catch {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import * as z from "zod/v3";
|
|
6
|
+
import { remap as remap$ } from "../lib/primitives.js";
|
|
7
|
+
import { safeParse } from "../lib/schemas.js";
|
|
8
|
+
import { Result as SafeParseResult } from "../types/fp.js";
|
|
9
|
+
import { SDKValidationError } from "./errors/sdkvalidationerror.js";
|
|
10
|
+
|
|
11
|
+
export type AccessCheck = {
|
|
12
|
+
object: string;
|
|
13
|
+
hasAccess: boolean;
|
|
14
|
+
accessLevel: string;
|
|
15
|
+
expiresAt: string | null;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** @internal */
|
|
19
|
+
export const AccessCheck$inboundSchema: z.ZodType<
|
|
20
|
+
AccessCheck,
|
|
21
|
+
z.ZodTypeDef,
|
|
22
|
+
unknown
|
|
23
|
+
> = z.object({
|
|
24
|
+
object: z.string(),
|
|
25
|
+
has_access: z.boolean(),
|
|
26
|
+
access_level: z.string(),
|
|
27
|
+
expires_at: z.nullable(z.string()),
|
|
28
|
+
}).transform((v) => {
|
|
29
|
+
return remap$(v, {
|
|
30
|
+
"has_access": "hasAccess",
|
|
31
|
+
"access_level": "accessLevel",
|
|
32
|
+
"expires_at": "expiresAt",
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export function accessCheckFromJSON(
|
|
37
|
+
jsonString: string,
|
|
38
|
+
): SafeParseResult<AccessCheck, SDKValidationError> {
|
|
39
|
+
return safeParse(
|
|
40
|
+
jsonString,
|
|
41
|
+
(x) => AccessCheck$inboundSchema.parse(JSON.parse(x)),
|
|
42
|
+
`Failed to parse 'AccessCheck' from JSON`,
|
|
43
|
+
);
|
|
44
|
+
}
|