@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.
Files changed (234) hide show
  1. package/README.md +12 -40
  2. package/dist/commonjs/funcs/accessCheck.d.ts +19 -0
  3. package/dist/commonjs/funcs/accessCheck.d.ts.map +1 -0
  4. package/dist/commonjs/funcs/accessCheck.js +129 -0
  5. package/dist/commonjs/funcs/accessCheck.js.map +1 -0
  6. package/dist/commonjs/funcs/experiencesFilesCreate.d.ts +1 -1
  7. package/dist/commonjs/funcs/experiencesFilesCreate.d.ts.map +1 -1
  8. package/dist/commonjs/funcs/experiencesFilesCreate.js +3 -24
  9. package/dist/commonjs/funcs/experiencesFilesCreate.js.map +1 -1
  10. package/dist/commonjs/funcs/lessonsFilesCreate.d.ts +1 -1
  11. package/dist/commonjs/funcs/lessonsFilesCreate.d.ts.map +1 -1
  12. package/dist/commonjs/funcs/lessonsFilesCreate.js +3 -24
  13. package/dist/commonjs/funcs/lessonsFilesCreate.js.map +1 -1
  14. package/dist/commonjs/funcs/usersGet.d.ts +19 -0
  15. package/dist/commonjs/funcs/usersGet.d.ts.map +1 -0
  16. package/dist/commonjs/funcs/usersGet.js +125 -0
  17. package/dist/commonjs/funcs/usersGet.js.map +1 -0
  18. package/dist/commonjs/index.d.ts +1 -0
  19. package/dist/commonjs/index.d.ts.map +1 -1
  20. package/dist/commonjs/index.js +1 -0
  21. package/dist/commonjs/index.js.map +1 -1
  22. package/dist/commonjs/lib/config.d.ts +3 -3
  23. package/dist/commonjs/lib/config.js +3 -3
  24. package/dist/commonjs/lib/verify-user-token.d.ts +35 -0
  25. package/dist/commonjs/lib/verify-user-token.d.ts.map +1 -0
  26. package/dist/commonjs/lib/verify-user-token.js +75 -0
  27. package/dist/commonjs/lib/verify-user-token.js.map +1 -0
  28. package/dist/commonjs/models/accesscheck.d.ts +13 -0
  29. package/dist/commonjs/models/accesscheck.d.ts.map +1 -0
  30. package/dist/commonjs/models/accesscheck.js +60 -0
  31. package/dist/commonjs/models/accesscheck.js.map +1 -0
  32. package/dist/commonjs/models/booking.d.ts +7 -7
  33. package/dist/commonjs/models/booking.d.ts.map +1 -1
  34. package/dist/commonjs/models/booking.js +9 -9
  35. package/dist/commonjs/models/booking.js.map +1 -1
  36. package/dist/commonjs/models/eventtype.d.ts +22 -51
  37. package/dist/commonjs/models/eventtype.d.ts.map +1 -1
  38. package/dist/commonjs/models/eventtype.js +22 -73
  39. package/dist/commonjs/models/eventtype.js.map +1 -1
  40. package/dist/commonjs/models/formation.d.ts +5 -25
  41. package/dist/commonjs/models/formation.d.ts.map +1 -1
  42. package/dist/commonjs/models/formation.js +6 -37
  43. package/dist/commonjs/models/formation.js.map +1 -1
  44. package/dist/commonjs/models/formationdocument.d.ts +2 -10
  45. package/dist/commonjs/models/formationdocument.d.ts.map +1 -1
  46. package/dist/commonjs/models/formationdocument.js +3 -16
  47. package/dist/commonjs/models/formationdocument.js.map +1 -1
  48. package/dist/commonjs/models/index.d.ts +2 -0
  49. package/dist/commonjs/models/index.d.ts.map +1 -1
  50. package/dist/commonjs/models/index.js +2 -0
  51. package/dist/commonjs/models/index.js.map +1 -1
  52. package/dist/commonjs/models/me.d.ts +1 -1
  53. package/dist/commonjs/models/me.d.ts.map +1 -1
  54. package/dist/commonjs/models/me.js +1 -1
  55. package/dist/commonjs/models/me.js.map +1 -1
  56. package/dist/commonjs/models/operations/checkaccess.d.ts +20 -0
  57. package/dist/commonjs/models/operations/checkaccess.d.ts.map +1 -0
  58. package/dist/commonjs/models/operations/checkaccess.js +55 -0
  59. package/dist/commonjs/models/operations/checkaccess.js.map +1 -0
  60. package/dist/commonjs/models/operations/createdigitaldownloadfile.d.ts +3 -15
  61. package/dist/commonjs/models/operations/createdigitaldownloadfile.d.ts.map +1 -1
  62. package/dist/commonjs/models/operations/createdigitaldownloadfile.js +6 -16
  63. package/dist/commonjs/models/operations/createdigitaldownloadfile.js.map +1 -1
  64. package/dist/commonjs/models/operations/createlessonfile.d.ts +3 -15
  65. package/dist/commonjs/models/operations/createlessonfile.d.ts.map +1 -1
  66. package/dist/commonjs/models/operations/createlessonfile.js +6 -16
  67. package/dist/commonjs/models/operations/createlessonfile.js.map +1 -1
  68. package/dist/commonjs/models/operations/getuser.d.ts +15 -0
  69. package/dist/commonjs/models/operations/getuser.d.ts.map +1 -0
  70. package/dist/commonjs/models/operations/getuser.js +49 -0
  71. package/dist/commonjs/models/operations/getuser.js.map +1 -0
  72. package/dist/commonjs/models/operations/index.d.ts +2 -0
  73. package/dist/commonjs/models/operations/index.d.ts.map +1 -1
  74. package/dist/commonjs/models/operations/index.js +2 -0
  75. package/dist/commonjs/models/operations/index.js.map +1 -1
  76. package/dist/commonjs/models/operations/retryformationpayment.d.ts +5 -25
  77. package/dist/commonjs/models/operations/retryformationpayment.d.ts.map +1 -1
  78. package/dist/commonjs/models/operations/retryformationpayment.js +6 -36
  79. package/dist/commonjs/models/operations/retryformationpayment.js.map +1 -1
  80. package/dist/commonjs/models/operations/submitformation.d.ts +5 -25
  81. package/dist/commonjs/models/operations/submitformation.d.ts.map +1 -1
  82. package/dist/commonjs/models/operations/submitformation.js +6 -36
  83. package/dist/commonjs/models/operations/submitformation.js.map +1 -1
  84. package/dist/commonjs/models/user.d.ts +14 -0
  85. package/dist/commonjs/models/user.d.ts.map +1 -0
  86. package/dist/commonjs/models/user.js +61 -0
  87. package/dist/commonjs/models/user.js.map +1 -0
  88. package/dist/commonjs/sdk/access.d.ts +13 -0
  89. package/dist/commonjs/sdk/access.d.ts.map +1 -0
  90. package/dist/commonjs/sdk/access.js +22 -0
  91. package/dist/commonjs/sdk/access.js.map +1 -0
  92. package/dist/commonjs/sdk/experiencesfiles.d.ts +1 -1
  93. package/dist/commonjs/sdk/experiencesfiles.js +1 -1
  94. package/dist/commonjs/sdk/lessonsfiles.d.ts +1 -1
  95. package/dist/commonjs/sdk/lessonsfiles.js +1 -1
  96. package/dist/commonjs/sdk/sdk.d.ts +6 -0
  97. package/dist/commonjs/sdk/sdk.d.ts.map +1 -1
  98. package/dist/commonjs/sdk/sdk.js +8 -0
  99. package/dist/commonjs/sdk/sdk.js.map +1 -1
  100. package/dist/commonjs/sdk/users.d.ts +13 -0
  101. package/dist/commonjs/sdk/users.d.ts.map +1 -0
  102. package/dist/commonjs/sdk/users.js +22 -0
  103. package/dist/commonjs/sdk/users.js.map +1 -0
  104. package/dist/esm/funcs/accessCheck.d.ts +19 -0
  105. package/dist/esm/funcs/accessCheck.d.ts.map +1 -0
  106. package/dist/esm/funcs/accessCheck.js +93 -0
  107. package/dist/esm/funcs/accessCheck.js.map +1 -0
  108. package/dist/esm/funcs/experiencesFilesCreate.d.ts +1 -1
  109. package/dist/esm/funcs/experiencesFilesCreate.d.ts.map +1 -1
  110. package/dist/esm/funcs/experiencesFilesCreate.js +4 -25
  111. package/dist/esm/funcs/experiencesFilesCreate.js.map +1 -1
  112. package/dist/esm/funcs/lessonsFilesCreate.d.ts +1 -1
  113. package/dist/esm/funcs/lessonsFilesCreate.d.ts.map +1 -1
  114. package/dist/esm/funcs/lessonsFilesCreate.js +4 -25
  115. package/dist/esm/funcs/lessonsFilesCreate.js.map +1 -1
  116. package/dist/esm/funcs/usersGet.d.ts +19 -0
  117. package/dist/esm/funcs/usersGet.d.ts.map +1 -0
  118. package/dist/esm/funcs/usersGet.js +89 -0
  119. package/dist/esm/funcs/usersGet.js.map +1 -0
  120. package/dist/esm/index.d.ts +1 -0
  121. package/dist/esm/index.d.ts.map +1 -1
  122. package/dist/esm/index.js +1 -0
  123. package/dist/esm/index.js.map +1 -1
  124. package/dist/esm/lib/config.d.ts +3 -3
  125. package/dist/esm/lib/config.js +3 -3
  126. package/dist/esm/lib/verify-user-token.d.ts +35 -0
  127. package/dist/esm/lib/verify-user-token.d.ts.map +1 -0
  128. package/dist/esm/lib/verify-user-token.js +72 -0
  129. package/dist/esm/lib/verify-user-token.js.map +1 -0
  130. package/dist/esm/models/accesscheck.d.ts +13 -0
  131. package/dist/esm/models/accesscheck.d.ts.map +1 -0
  132. package/dist/esm/models/accesscheck.js +23 -0
  133. package/dist/esm/models/accesscheck.js.map +1 -0
  134. package/dist/esm/models/booking.d.ts +7 -7
  135. package/dist/esm/models/booking.d.ts.map +1 -1
  136. package/dist/esm/models/booking.js +7 -7
  137. package/dist/esm/models/booking.js.map +1 -1
  138. package/dist/esm/models/eventtype.d.ts +22 -51
  139. package/dist/esm/models/eventtype.d.ts.map +1 -1
  140. package/dist/esm/models/eventtype.js +21 -62
  141. package/dist/esm/models/eventtype.js.map +1 -1
  142. package/dist/esm/models/formation.d.ts +5 -25
  143. package/dist/esm/models/formation.d.ts.map +1 -1
  144. package/dist/esm/models/formation.js +5 -31
  145. package/dist/esm/models/formation.js.map +1 -1
  146. package/dist/esm/models/formationdocument.d.ts +2 -10
  147. package/dist/esm/models/formationdocument.d.ts.map +1 -1
  148. package/dist/esm/models/formationdocument.js +2 -13
  149. package/dist/esm/models/formationdocument.js.map +1 -1
  150. package/dist/esm/models/index.d.ts +2 -0
  151. package/dist/esm/models/index.d.ts.map +1 -1
  152. package/dist/esm/models/index.js +2 -0
  153. package/dist/esm/models/index.js.map +1 -1
  154. package/dist/esm/models/me.d.ts +1 -1
  155. package/dist/esm/models/me.d.ts.map +1 -1
  156. package/dist/esm/models/me.js +1 -1
  157. package/dist/esm/models/me.js.map +1 -1
  158. package/dist/esm/models/operations/checkaccess.d.ts +20 -0
  159. package/dist/esm/models/operations/checkaccess.d.ts.map +1 -0
  160. package/dist/esm/models/operations/checkaccess.js +18 -0
  161. package/dist/esm/models/operations/checkaccess.js.map +1 -0
  162. package/dist/esm/models/operations/createdigitaldownloadfile.d.ts +3 -15
  163. package/dist/esm/models/operations/createdigitaldownloadfile.d.ts.map +1 -1
  164. package/dist/esm/models/operations/createdigitaldownloadfile.js +5 -14
  165. package/dist/esm/models/operations/createdigitaldownloadfile.js.map +1 -1
  166. package/dist/esm/models/operations/createlessonfile.d.ts +3 -15
  167. package/dist/esm/models/operations/createlessonfile.d.ts.map +1 -1
  168. package/dist/esm/models/operations/createlessonfile.js +5 -14
  169. package/dist/esm/models/operations/createlessonfile.js.map +1 -1
  170. package/dist/esm/models/operations/getuser.d.ts +15 -0
  171. package/dist/esm/models/operations/getuser.d.ts.map +1 -0
  172. package/dist/esm/models/operations/getuser.js +12 -0
  173. package/dist/esm/models/operations/getuser.js.map +1 -0
  174. package/dist/esm/models/operations/index.d.ts +2 -0
  175. package/dist/esm/models/operations/index.d.ts.map +1 -1
  176. package/dist/esm/models/operations/index.js +2 -0
  177. package/dist/esm/models/operations/index.js.map +1 -1
  178. package/dist/esm/models/operations/retryformationpayment.d.ts +5 -25
  179. package/dist/esm/models/operations/retryformationpayment.d.ts.map +1 -1
  180. package/dist/esm/models/operations/retryformationpayment.js +5 -30
  181. package/dist/esm/models/operations/retryformationpayment.js.map +1 -1
  182. package/dist/esm/models/operations/submitformation.d.ts +5 -25
  183. package/dist/esm/models/operations/submitformation.d.ts.map +1 -1
  184. package/dist/esm/models/operations/submitformation.js +5 -30
  185. package/dist/esm/models/operations/submitformation.js.map +1 -1
  186. package/dist/esm/models/user.d.ts +14 -0
  187. package/dist/esm/models/user.d.ts.map +1 -0
  188. package/dist/esm/models/user.js +24 -0
  189. package/dist/esm/models/user.js.map +1 -0
  190. package/dist/esm/sdk/access.d.ts +13 -0
  191. package/dist/esm/sdk/access.d.ts.map +1 -0
  192. package/dist/esm/sdk/access.js +18 -0
  193. package/dist/esm/sdk/access.js.map +1 -0
  194. package/dist/esm/sdk/experiencesfiles.d.ts +1 -1
  195. package/dist/esm/sdk/experiencesfiles.js +1 -1
  196. package/dist/esm/sdk/lessonsfiles.d.ts +1 -1
  197. package/dist/esm/sdk/lessonsfiles.js +1 -1
  198. package/dist/esm/sdk/sdk.d.ts +6 -0
  199. package/dist/esm/sdk/sdk.d.ts.map +1 -1
  200. package/dist/esm/sdk/sdk.js +8 -0
  201. package/dist/esm/sdk/sdk.js.map +1 -1
  202. package/dist/esm/sdk/users.d.ts +13 -0
  203. package/dist/esm/sdk/users.d.ts.map +1 -0
  204. package/dist/esm/sdk/users.js +18 -0
  205. package/dist/esm/sdk/users.js.map +1 -0
  206. package/jsr.json +1 -1
  207. package/package.json +2 -1
  208. package/src/funcs/accessCheck.ts +182 -0
  209. package/src/funcs/experiencesFilesCreate.ts +4 -38
  210. package/src/funcs/lessonsFilesCreate.ts +4 -38
  211. package/src/funcs/usersGet.ts +178 -0
  212. package/src/index.ts +1 -0
  213. package/src/lib/config.ts +3 -3
  214. package/src/lib/verify-user-token.ts +118 -0
  215. package/src/models/accesscheck.ts +44 -0
  216. package/src/models/booking.ts +15 -15
  217. package/src/models/eventtype.ts +37 -212
  218. package/src/models/formation.ts +10 -102
  219. package/src/models/formationdocument.ts +4 -39
  220. package/src/models/index.ts +2 -0
  221. package/src/models/me.ts +2 -2
  222. package/src/models/operations/checkaccess.ts +45 -0
  223. package/src/models/operations/createdigitaldownloadfile.ts +8 -40
  224. package/src/models/operations/createlessonfile.ts +8 -38
  225. package/src/models/operations/getuser.ts +30 -0
  226. package/src/models/operations/index.ts +2 -0
  227. package/src/models/operations/retryformationpayment.ts +10 -105
  228. package/src/models/operations/submitformation.ts +10 -105
  229. package/src/models/user.ts +42 -0
  230. package/src/sdk/access.ts +28 -0
  231. package/src/sdk/experiencesfiles.ts +1 -1
  232. package/src/sdk/lessonsfiles.ts +1 -1
  233. package/src/sdk/sdk.ts +12 -0
  234. 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 { appendForm, encodeSimple, normalizeBlob } from "../lib/encodings.js";
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 one or more deliverable files to a digital download experience (multipart upload). Returns the full file list.
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 = new FormData();
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 { appendForm, encodeSimple, normalizeBlob } from "../lib/encodings.js";
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 one or more files to a lesson (multipart upload)
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 = new FormData();
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
@@ -3,6 +3,7 @@
3
3
  */
4
4
 
5
5
  export * from "./lib/config.js";
6
+ export * from "./lib/verify-user-token.js";
6
7
  export * as files from "./lib/files.js";
7
8
  export { HTTPClient } from "./lib/http.js";
8
9
  export type { Fetcher, HTTPClientOptions } from "./lib/http.js";
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.0",
65
- genVersion: "2.913.3",
66
- userAgent: "speakeasy-sdk/typescript 0.6.0 2.913.3 1.0.0 @crevio/sdk",
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
+ }