@settlemint/dalp-sdk 3.1.33 → 3.2.0-rc.1

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 (133) hide show
  1. package/LICENSE +3 -157
  2. package/README.md +276 -169
  3. package/dist/auth/client.d.ts +114 -0
  4. package/dist/auth/invite-step-up.d.ts +2 -0
  5. package/dist/auth/live.d.ts +47 -0
  6. package/dist/auth/native-passkey.d.ts +8 -0
  7. package/dist/{auth-permissions.d.ts → auth/permissions.d.ts} +0 -8
  8. package/dist/auth/wallet-plugins.d.ts +196 -0
  9. package/dist/auth-surface.d.ts +2 -0
  10. package/dist/auth.d.ts +8 -115
  11. package/dist/auth.js +540 -0
  12. package/dist/chunk-6hckdbwt.js +600 -0
  13. package/dist/chunk-7mvx7xq8.js +4 -0
  14. package/dist/chunk-b03ycwb7.js +68 -0
  15. package/dist/chunk-crtb9edj.js +29 -0
  16. package/dist/chunk-g5j1xky8.js +99 -0
  17. package/dist/chunk-grdfnbwd.js +1529 -0
  18. package/dist/chunk-j43gfc9p.js +5 -0
  19. package/dist/chunk-k3ntysxx.js +57 -0
  20. package/dist/chunk-ptwkww6j.js +38 -0
  21. package/dist/chunk-qncpzave.js +185 -0
  22. package/dist/chunk-t8v94nvb.js +5 -0
  23. package/dist/chunk-xnarraj7.js +339 -0
  24. package/dist/client/conditional-request.d.ts +8 -0
  25. package/dist/client/factory.d.ts +4 -0
  26. package/dist/client/query-serializer.d.ts +1 -0
  27. package/dist/client/request-compression.d.ts +12 -0
  28. package/dist/client/ssr-fetch.d.ts +10 -0
  29. package/dist/client/step-up-challenge.d.ts +10 -0
  30. package/dist/effect.d.ts +39 -0
  31. package/dist/effect.js +110 -0
  32. package/dist/errors/api-error.d.ts +35 -0
  33. package/dist/errors/error-codes.d.ts +18 -0
  34. package/dist/errors/find-current-error.d.ts +2 -0
  35. package/dist/errors/public-error.d.ts +3 -0
  36. package/dist/errors/public-error.js +9 -0
  37. package/dist/errors/sdk-error.d.ts +52 -0
  38. package/dist/errors/sdk-error.js +8 -0
  39. package/dist/generated/api-types.d.ts +104535 -0
  40. package/dist/generated/api-types.ts +111921 -0
  41. package/dist/generated/console-routes.d.ts +12 -0
  42. package/dist/generated/error-catalog.d.ts +9 -0
  43. package/dist/generated/error-codes.d.ts +9 -0
  44. package/dist/generated/response-scalars.d.ts +9 -0
  45. package/dist/generated/response-schemas.d.ts +9 -0
  46. package/dist/generated/route-error-codes.d.ts +9 -0
  47. package/dist/generated/routes.d.ts +12 -0
  48. package/dist/index.d.ts +28 -45
  49. package/dist/index.js +159 -94522
  50. package/dist/proxy/builder.d.ts +17 -0
  51. package/dist/proxy/client-core.d.ts +36 -0
  52. package/dist/proxy/client.d.ts +5 -0
  53. package/dist/proxy/fetch-executor.d.ts +7 -0
  54. package/dist/proxy/flat-args.d.ts +24 -0
  55. package/dist/proxy/response-decode.d.ts +38 -0
  56. package/dist/proxy/sse.d.ts +11 -0
  57. package/dist/proxy/step-up-challenge.d.ts +4 -0
  58. package/dist/proxy/tanstack.d.ts +6 -0
  59. package/dist/proxy/transport.d.ts +76 -0
  60. package/dist/react-query.d.ts +2 -0
  61. package/dist/react-query.js +14 -0
  62. package/dist/routes/cli-command.d.ts +17 -0
  63. package/dist/routes/console.d.ts +14 -0
  64. package/dist/routes/console.js +27 -0
  65. package/dist/routes/index.d.ts +6 -0
  66. package/dist/routes/index.js +122 -0
  67. package/dist/routes/types.d.ts +73 -0
  68. package/dist/runtime-exports.d.ts +4 -0
  69. package/dist/runtime-exports.js +38 -0
  70. package/dist/runtime.d.ts +8 -0
  71. package/dist/scalars/big-decimal.d.ts +22 -0
  72. package/dist/scalars/big-int.d.ts +3 -0
  73. package/dist/scalars/dalp-scalars.d.ts +28 -0
  74. package/dist/scalars/ethereum-address.d.ts +3 -0
  75. package/dist/scalars/exchange-rates.d.ts +13 -0
  76. package/dist/scalars/index.d.ts +14 -0
  77. package/dist/scalars/index.js +236 -0
  78. package/dist/scalars/organization-id.d.ts +5 -0
  79. package/dist/scalars/token-decimals.d.ts +4 -0
  80. package/dist/secret.d.ts +12 -0
  81. package/dist/server-proxy.d.ts +39 -0
  82. package/dist/server-proxy.js +186 -0
  83. package/dist/sign-webhook-receipt.d.ts +16 -0
  84. package/dist/sign-webhook-receipt.js +26 -0
  85. package/dist/transport/cookie-store.d.ts +9 -0
  86. package/dist/transport/sse-lifecycle.d.ts +24 -0
  87. package/dist/types.d.ts +38 -114
  88. package/dist/url.d.ts +0 -1
  89. package/dist/verify-webhook.d.ts +18 -28
  90. package/dist/verify-webhook.js +8 -0
  91. package/dist/version.d.ts +0 -3
  92. package/dist/wait-for-transaction.d.ts +46 -86
  93. package/dist/wait-for-transaction.js +154 -0
  94. package/dist/webhook-events.d.ts +1360 -35
  95. package/package.json +176 -36
  96. package/dist/api-types.generated.d.ts +0 -14160
  97. package/dist/api-types.generated.d.ts.map +0 -1
  98. package/dist/auth-permissions.d.ts.map +0 -1
  99. package/dist/auth-wallet-plugins.d.ts +0 -86
  100. package/dist/auth-wallet-plugins.d.ts.map +0 -1
  101. package/dist/auth.d.ts.map +0 -1
  102. package/dist/bundler.d.ts +0 -217
  103. package/dist/bundler.d.ts.map +0 -1
  104. package/dist/client.d.ts +0 -19
  105. package/dist/client.d.ts.map +0 -1
  106. package/dist/contract-errors.d.ts +0 -4156
  107. package/dist/contract-errors.d.ts.map +0 -1
  108. package/dist/contract.d.ts +0 -22
  109. package/dist/contract.d.ts.map +0 -1
  110. package/dist/cookie-store.d.ts +0 -10
  111. package/dist/cookie-store.d.ts.map +0 -1
  112. package/dist/dapi-errors.d.ts +0 -656
  113. package/dist/dapi-errors.d.ts.map +0 -1
  114. package/dist/errors.d.ts +0 -639
  115. package/dist/errors.d.ts.map +0 -1
  116. package/dist/index.d.ts.map +0 -1
  117. package/dist/platform.d.ts +0 -41
  118. package/dist/platform.d.ts.map +0 -1
  119. package/dist/plugins/index.d.ts +0 -13
  120. package/dist/plugins/index.d.ts.map +0 -1
  121. package/dist/plugins/index.js +0 -8
  122. package/dist/sdk-error.d.ts +0 -74
  123. package/dist/sdk-error.d.ts.map +0 -1
  124. package/dist/serializers.d.ts +0 -41
  125. package/dist/serializers.d.ts.map +0 -1
  126. package/dist/types.d.ts.map +0 -1
  127. package/dist/url.d.ts.map +0 -1
  128. package/dist/verify-webhook.d.ts.map +0 -1
  129. package/dist/version.d.ts.map +0 -1
  130. package/dist/version.generated.d.ts +0 -8
  131. package/dist/version.generated.d.ts.map +0 -1
  132. package/dist/wait-for-transaction.d.ts.map +0 -1
  133. package/dist/webhook-events.d.ts.map +0 -1
@@ -0,0 +1,600 @@
1
+ import {
2
+ createDalpSdkConfigurationError2
3
+ } from "./chunk-k3ntysxx.js";
4
+
5
+ // src/auth-surface.ts
6
+ var DALP_AUTH_SURFACE_HEADER2 = "X-Dalp-Auth-Surface";
7
+
8
+ // src/secret.ts
9
+ var SECRET_REDACTION_MARKER2 = "[REDACTED]";
10
+ var inspectSymbol = Symbol.for("nodejs.util.inspect.custom");
11
+ var secretValue = new WeakMap;
12
+
13
+ class Secret2 {
14
+ constructor(value) {
15
+ secretValue.set(this, value);
16
+ Object.freeze(this);
17
+ }
18
+ static from(value) {
19
+ if (value.trim().length === 0) {
20
+ throw new TypeError("DALP SDK: a secret value must not be empty.");
21
+ }
22
+ return new Secret2(value);
23
+ }
24
+ toString() {
25
+ return SECRET_REDACTION_MARKER2;
26
+ }
27
+ toJSON() {
28
+ return SECRET_REDACTION_MARKER2;
29
+ }
30
+ [inspectSymbol]() {
31
+ return SECRET_REDACTION_MARKER2;
32
+ }
33
+ }
34
+ var secret2 = (value) => Secret2.from(value);
35
+ var unwrapSecret = (value) => {
36
+ const raw = secretValue.get(value);
37
+ if (raw === undefined) {
38
+ throw new TypeError("DALP SDK: cannot unwrap an invalid secret value.");
39
+ }
40
+ return raw;
41
+ };
42
+
43
+ // src/runtime.ts
44
+ var REACT_NATIVE_NAVIGATOR_PRODUCT = "ReactNative";
45
+ function detectDalpRuntime() {
46
+ if (Reflect.get(globalThis, "navigator") !== undefined && Reflect.get(navigator, "product") === REACT_NATIVE_NAVIGATOR_PRODUCT) {
47
+ return "react-native";
48
+ }
49
+ return globalThis.window === undefined ? "server" : "browser";
50
+ }
51
+ function runtimeCredentials(runtime) {
52
+ return runtime === "browser" ? "include" : "omit";
53
+ }
54
+ function refuseCrossOriginBrowserSession(runtime, baseUrl, usesApiKey) {
55
+ if (runtime !== "browser" || usesApiKey) {
56
+ return;
57
+ }
58
+ const browserOrigin = globalThis.window?.location?.origin;
59
+ const targetOrigin = new URL(baseUrl).origin;
60
+ if (browserOrigin === undefined || browserOrigin === targetOrigin) {
61
+ return;
62
+ }
63
+ throw createDalpSdkConfigurationError2({
64
+ message: "DALP SDK: browser cookie sessions must use the application origin; mount createDalpProxy at /api.",
65
+ why: `The browser page is ${browserOrigin}, but the client targets ${targetOrigin}; host-only session cookies do not cross origins.`,
66
+ fix: "Set the browser client baseUrl to window.location.origin and mount createDalpProxy at /api on that origin."
67
+ });
68
+ }
69
+ var WHATWG_FETCH_POLYFILL_FLAG = "polyfill";
70
+ function isBufferingFetch(fetchImpl) {
71
+ return typeof fetchImpl === "function" && Reflect.get(fetchImpl, WHATWG_FETCH_POLYFILL_FLAG) === true;
72
+ }
73
+ function keepBufferingMarker(wrapped, wrapper) {
74
+ return isBufferingFetch(wrapped) ? Object.assign(wrapper, { [WHATWG_FETCH_POLYFILL_FLAG]: true }) : wrapper;
75
+ }
76
+ function globalFetch() {
77
+ return keepBufferingMarker(globalThis.fetch, (input, init) => globalThis.fetch(input, init));
78
+ }
79
+ function refuseBundledApiKey(runtime) {
80
+ if (runtime === "server") {
81
+ return;
82
+ }
83
+ throw createDalpSdkConfigurationError2({
84
+ message: `DALP SDK: API keys are server/CLI-only credentials and cannot configure a ${runtime} client.`,
85
+ why: "An API key placed in a browser or app bundle ships the credential to every visitor or device.",
86
+ fix: "Keep the API key on the server or CLI process; browser and app clients authenticate with the session cookie."
87
+ });
88
+ }
89
+
90
+ // ../kernel/error/src/base-error-fields.ts
91
+ import { Function, Schema as Schema2 } from "effect";
92
+
93
+ // ../kernel/error/src/sensitive-error-fields.ts
94
+ import { Effect, Predicate, Result, Schema, SchemaGetter } from "effect";
95
+
96
+ // ../kernel/error/src/scrub-url-credentials.ts
97
+ var CREDENTIAL_PATH_SEGMENT_RE = /[A-Za-z0-9_-]{16,}/gu;
98
+ var TRAILING_PUNCTUATION_RE = /[.,;:!?]+$/u;
99
+ var REDACTED = "[REDACTED]";
100
+ function scrubUrlCredentials(candidate) {
101
+ const trailing = TRAILING_PUNCTUATION_RE.exec(candidate)?.[0] ?? "";
102
+ const core = trailing === "" ? candidate : candidate.slice(0, -trailing.length);
103
+ try {
104
+ const url = new URL(core);
105
+ url.username = "";
106
+ url.password = "";
107
+ url.search = "";
108
+ url.pathname = url.pathname.split("/").map((segment) => segment.replaceAll(CREDENTIAL_PATH_SEGMENT_RE, REDACTED)).join("/");
109
+ return url.toString() + trailing;
110
+ } catch {
111
+ return `[REDACTED-URL]${trailing}`;
112
+ }
113
+ }
114
+
115
+ // ../kernel/error/src/sensitive-error-fields.ts
116
+ var LOWER_UPPER_BOUNDARY_PATTERN = /([a-z0-9])([A-Z])/gu;
117
+ var ACRONYM_BOUNDARY_PATTERN = /([A-Z]+)([A-Z][a-z])/gu;
118
+ var NON_ALPHANUMERIC_RUN_PATTERN = /[^a-zA-Z0-9]+/u;
119
+ var TRAILING_DIGITS_PATTERN = /\d+$/u;
120
+ var SERIALIZABLE_CAUSE_MAX_DEPTH = 8;
121
+ var SERIALIZABLE_CAUSE_MAX_BYTES = 32768;
122
+ var TRUNCATED_CAUSE = "[Truncated]";
123
+ var REDACTED_CAUSE = "[Redacted]";
124
+ var CIRCULAR_CAUSE = "[Circular]";
125
+ var UNAVAILABLE_CAUSE = "[Unavailable]";
126
+ var textEncoder = new TextEncoder;
127
+ var isJson = Schema.is(Schema.Json);
128
+ var strongDiagnosticSuffixes = new Set([
129
+ "algorithm",
130
+ "count",
131
+ "country",
132
+ "domain",
133
+ "format",
134
+ "kind",
135
+ "length",
136
+ "scheme",
137
+ "size",
138
+ "status",
139
+ "type",
140
+ "version"
141
+ ]);
142
+ var weakDiagnosticSuffixes = new Set(["code", "name"]);
143
+ var sensitiveSingleTokens = new Set([
144
+ "authorization",
145
+ "cookie",
146
+ "credential",
147
+ "cvv",
148
+ "email",
149
+ "iban",
150
+ "jwt",
151
+ "mnemonic",
152
+ "otp",
153
+ "password",
154
+ "payload",
155
+ "phone",
156
+ "pii",
157
+ "pin",
158
+ "secret",
159
+ "signature",
160
+ "ssn",
161
+ "token"
162
+ ]);
163
+ var sensitiveTokenSequences = [
164
+ ["account", "number"],
165
+ ["api", "key"],
166
+ ["card", "number"],
167
+ ["date", "of", "birth"],
168
+ ["national", "id"],
169
+ ["passport", "number"],
170
+ ["private", "key"],
171
+ ["seed", "phrase"],
172
+ ["session", "id"]
173
+ ];
174
+ var splitEncodedKey = (key) => key.replaceAll(LOWER_UPPER_BOUNDARY_PATTERN, "$1 $2").replaceAll(ACRONYM_BOUNDARY_PATTERN, "$1 $2").split(NON_ALPHANUMERIC_RUN_PATTERN).filter((part) => part.length > 0).map((part) => part.toLowerCase());
175
+ var hasOnlyDiagnosticSuffix = (tokens, sensitiveEnd) => {
176
+ const suffix = tokens.slice(sensitiveEnd);
177
+ if (suffix.length === 0 || !strongDiagnosticSuffixes.has(suffix[0] ?? "")) {
178
+ return false;
179
+ }
180
+ for (let index = 0;index < suffix.length; index += 1) {
181
+ const token = suffix[index] ?? "";
182
+ if (strongDiagnosticSuffixes.has(token)) {
183
+ continue;
184
+ }
185
+ if (weakDiagnosticSuffixes.has(token) && suffix[index - 1] === "country") {
186
+ continue;
187
+ }
188
+ return false;
189
+ }
190
+ return true;
191
+ };
192
+ var flattenedSensitiveSequences = sensitiveTokenSequences.map((sequence) => sequence.join(""));
193
+ var tokenMatchesSequencePart = (token, part) => {
194
+ const digitless = token.replace(TRAILING_DIGITS_PATTERN, "");
195
+ return digitless === part || digitless === `${part}s`;
196
+ };
197
+ var tokenIsSensitiveSingle = (token) => {
198
+ const digitless = token.replace(TRAILING_DIGITS_PATTERN, "");
199
+ if (sensitiveSingleTokens.has(digitless)) {
200
+ return true;
201
+ }
202
+ return digitless.endsWith("s") && sensitiveSingleTokens.has(digitless.slice(0, -1));
203
+ };
204
+ var tokenIsFusedSensitive = (token) => {
205
+ if (flattenedSensitiveSequences.some((fragment) => token.includes(fragment))) {
206
+ return true;
207
+ }
208
+ for (const fragment of sensitiveSingleTokens) {
209
+ if (token === fragment) {
210
+ continue;
211
+ }
212
+ if (fragment.length >= 5 ? token.includes(fragment) : token.startsWith(fragment) || token.endsWith(fragment)) {
213
+ return true;
214
+ }
215
+ }
216
+ return false;
217
+ };
218
+ var findSensitiveMatches = (tokens) => {
219
+ const matches = [];
220
+ for (const sequence of sensitiveTokenSequences) {
221
+ for (let start = 0;start <= tokens.length - sequence.length; start += 1) {
222
+ if (sequence.every((part, offset) => tokenMatchesSequencePart(tokens[start + offset] ?? "", part))) {
223
+ matches.push({ start, end: start + sequence.length });
224
+ }
225
+ }
226
+ }
227
+ for (let index = 0;index < tokens.length; index += 1) {
228
+ if (tokenIsSensitiveSingle(tokens[index] ?? "")) {
229
+ matches.push({ start: index, end: index + 1 });
230
+ }
231
+ }
232
+ return matches;
233
+ };
234
+ var encodedKeyIsForbidden = (key) => {
235
+ const tokens = splitEncodedKey(key);
236
+ const matches = findSensitiveMatches(tokens);
237
+ const matchedIndexes = new Set(matches.flatMap((match) => Array.from({ length: match.end - match.start }, (_, offset) => match.start + offset)));
238
+ for (let index = 0;index < tokens.length; index += 1) {
239
+ if (!matchedIndexes.has(index) && tokenIsFusedSensitive(tokens[index] ?? "")) {
240
+ return true;
241
+ }
242
+ }
243
+ if (matches.length === 0) {
244
+ return false;
245
+ }
246
+ if (new Set(matches.map((match) => match.start)).size > 1) {
247
+ return true;
248
+ }
249
+ if (Math.min(...matches.map((match) => match.start)) !== 0) {
250
+ return true;
251
+ }
252
+ return !hasOnlyDiagnosticSuffix(tokens, Math.max(...matches.map((match) => match.end)));
253
+ };
254
+ var encodedKeyIsUrl = (key) => splitEncodedKey(key).some((token) => token === "url" || token === "uri" || token === "href");
255
+ var redactedValueKeys = new Set(["query", "sql", "params", "parameters"]);
256
+ var encodedKeyIsRedacted = (key) => redactedValueKeys.has(splitEncodedKey(key).join(""));
257
+ var scrubUrlLikeString = (value) => value.includes("://") ? scrubUrlCredentials(value) : value;
258
+ var isReflectableObject = (value) => Predicate.isObjectOrArray(value) || typeof value === "function";
259
+ var ownEnumerableDataEntries = (value) => {
260
+ if (!isReflectableObject(value)) {
261
+ return [];
262
+ }
263
+ return Object.keys(value).flatMap((key) => {
264
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
265
+ return descriptor?.enumerable === true && "value" in descriptor ? [[key, descriptor.value]] : [];
266
+ });
267
+ };
268
+ var readDataProperty = (value, key) => {
269
+ if (!isReflectableObject(value)) {
270
+ return;
271
+ }
272
+ let current = value;
273
+ while (current !== null) {
274
+ const descriptor = Object.getOwnPropertyDescriptor(current, key);
275
+ if (descriptor !== undefined) {
276
+ return "value" in descriptor ? descriptor.value : undefined;
277
+ }
278
+ current = Reflect.getPrototypeOf(current);
279
+ }
280
+ return;
281
+ };
282
+ var objectTypeName = (value) => {
283
+ const constructor = readDataProperty(value, "constructor");
284
+ if (typeof constructor !== "function") {
285
+ return "Object";
286
+ }
287
+ const name = readDataProperty(constructor, "name");
288
+ return Predicate.isString(name) && name.length > 0 ? name : "Object";
289
+ };
290
+ var boundCauseEntry = (key, value, depth, traversal) => {
291
+ if (encodedKeyIsRedacted(key)) {
292
+ return REDACTED_CAUSE;
293
+ }
294
+ return encodedKeyIsUrl(key) && Predicate.isString(value) ? scrubUrlCredentials(value) : boundDefectCause(value, depth, traversal);
295
+ };
296
+ var boundDefectCause = (value, depth = 0, traversal) => {
297
+ try {
298
+ return boundDefectCauseUnsafe(value, depth, traversal);
299
+ } catch {
300
+ return UNAVAILABLE_CAUSE;
301
+ }
302
+ };
303
+ var boundErrorCause = (value, depth, traversal) => {
304
+ const ownFields = Object.fromEntries(ownEnumerableDataEntries(value).map(([key, entry]) => [key, boundCauseEntry(key, entry, depth + 1, traversal)]));
305
+ const name = readDataProperty(value, "name");
306
+ const message = readDataProperty(value, "message");
307
+ const cause = readDataProperty(value, "cause");
308
+ return {
309
+ ...ownFields,
310
+ name: Predicate.isString(name) ? scrubUrlLikeString(name) : "Error",
311
+ message: Predicate.isString(message) ? scrubUrlLikeString(message) : UNAVAILABLE_CAUSE,
312
+ ...cause === undefined ? {} : { cause: boundDefectCause(cause, depth + 1, traversal) }
313
+ };
314
+ };
315
+ var boundSchemaErrorCause = (value) => ({
316
+ name: "SchemaError",
317
+ message: Predicate.isString(value.message) ? scrubUrlLikeString(value.message) : UNAVAILABLE_CAUSE
318
+ });
319
+ var boundObjectCause = (value, depth, traversal) => {
320
+ const entries = ownEnumerableDataEntries(value);
321
+ if (entries.length > 0) {
322
+ return Object.fromEntries(entries.map(([key, entry]) => [key, boundCauseEntry(key, entry, depth + 1, traversal)]));
323
+ }
324
+ const plainObject = Predicate.isObject(value) && Reflect.getPrototypeOf(value) === Object.prototype;
325
+ return plainObject ? {} : { type: objectTypeName(value) };
326
+ };
327
+ var boundContainerCause = (value, depth, traversal) => {
328
+ if (Array.isArray(value)) {
329
+ return value.map((entry) => boundDefectCause(entry, depth + 1, traversal));
330
+ }
331
+ if (Predicate.isMap(value)) {
332
+ return {
333
+ entries: Array.from(value.entries(), ([key, entry]) => [
334
+ boundDefectCause(key, depth + 1, traversal),
335
+ boundDefectCause(entry, depth + 1, traversal)
336
+ ])
337
+ };
338
+ }
339
+ if (Predicate.isSet(value)) {
340
+ return { values: Array.from(value, (entry) => boundDefectCause(entry, depth + 1, traversal)) };
341
+ }
342
+ if (Schema.isSchemaError(value)) {
343
+ return boundSchemaErrorCause(value);
344
+ }
345
+ if (Predicate.isError(value)) {
346
+ return boundErrorCause(value, depth, traversal);
347
+ }
348
+ return Predicate.isObject(value) ? boundObjectCause(value, depth, traversal) : UNAVAILABLE_CAUSE;
349
+ };
350
+ var boundScalarCause = (value) => {
351
+ if (Predicate.isString(value)) {
352
+ return scrubUrlLikeString(value);
353
+ }
354
+ if (value === null || Predicate.isBoolean(value) || Predicate.isNumber(value) && Number.isFinite(value)) {
355
+ return value;
356
+ }
357
+ return UNAVAILABLE_CAUSE;
358
+ };
359
+ var boundDefectCauseUnsafe = (value, depth = 0, traversal) => {
360
+ const currentTraversal = traversal ?? { ancestors: new Set, visited: new Set };
361
+ if (!Predicate.isObjectOrArray(value)) {
362
+ return boundScalarCause(value);
363
+ }
364
+ if (depth >= SERIALIZABLE_CAUSE_MAX_DEPTH) {
365
+ return TRUNCATED_CAUSE;
366
+ }
367
+ if (currentTraversal.ancestors.has(value)) {
368
+ return CIRCULAR_CAUSE;
369
+ }
370
+ if (currentTraversal.visited.has(value)) {
371
+ return TRUNCATED_CAUSE;
372
+ }
373
+ currentTraversal.ancestors.add(value);
374
+ currentTraversal.visited.add(value);
375
+ const bounded = boundContainerCause(value, depth, currentTraversal);
376
+ currentTraversal.ancestors.delete(value);
377
+ return bounded;
378
+ };
379
+ var findForbiddenEncodedMapKey = (value) => {
380
+ if (!Array.isArray(value)) {
381
+ return;
382
+ }
383
+ for (const entry of value) {
384
+ const mapKey = Array.isArray(entry) ? entry[0] : undefined;
385
+ if (Predicate.isString(mapKey) && encodedKeyIsForbidden(mapKey)) {
386
+ return mapKey;
387
+ }
388
+ }
389
+ return;
390
+ };
391
+ var prohibitedFieldMessage = (field) => `Serializable cause contains prohibited field ${field}`;
392
+ var findProhibitedField = (key, value) => {
393
+ if (encodedKeyIsForbidden(key)) {
394
+ return key;
395
+ }
396
+ return key === "entries" ? findForbiddenEncodedMapKey(value) : undefined;
397
+ };
398
+ var scanCauseObject = (entries, depth, pending) => {
399
+ for (const [key, entry] of entries) {
400
+ const prohibited = findProhibitedField(key, entry);
401
+ if (prohibited !== undefined) {
402
+ return prohibitedFieldMessage(prohibited);
403
+ }
404
+ pending.push({ value: entry, depth: depth + 1 });
405
+ }
406
+ return;
407
+ };
408
+ var visitCauseNode = (value, depth, pending, seen) => {
409
+ if (!Predicate.isObjectOrArray(value)) {
410
+ return;
411
+ }
412
+ if (depth > SERIALIZABLE_CAUSE_MAX_DEPTH) {
413
+ return `Serializable cause exceeds depth ${SERIALIZABLE_CAUSE_MAX_DEPTH}`;
414
+ }
415
+ if (seen.has(value)) {
416
+ return;
417
+ }
418
+ seen.add(value);
419
+ if (Array.isArray(value)) {
420
+ pending.push(...value.map((entry) => ({ value: entry, depth: depth + 1 })));
421
+ return;
422
+ }
423
+ return scanCauseObject(Object.entries(value), depth, pending);
424
+ };
425
+ var checkEncodedCauseKeys = (root) => {
426
+ const pending = [{ value: root, depth: 0 }];
427
+ const seen = new Set;
428
+ for (const current of pending) {
429
+ const violation = visitCauseNode(current.value, current.depth, pending, seen);
430
+ if (violation !== undefined) {
431
+ return violation;
432
+ }
433
+ }
434
+ return true;
435
+ };
436
+ var encodeJsonText = Schema.encodeResult(Schema.fromJsonString(Schema.Json));
437
+ var unwritableCauseByteLength = Number.POSITIVE_INFINITY;
438
+ var encodedJsonByteLength = (value) => {
439
+ const encoded = encodeJsonText(value);
440
+ return Result.isSuccess(encoded) ? textEncoder.encode(encoded.success).byteLength : unwritableCauseByteLength;
441
+ };
442
+ var truncateOversizedEncodedCause = (value) => encodedJsonByteLength(value) <= SERIALIZABLE_CAUSE_MAX_BYTES ? value : TRUNCATED_CAUSE;
443
+ var scrubEncodedCauseUrlEntry = (key, entry) => {
444
+ if (encodedKeyIsRedacted(key)) {
445
+ return REDACTED_CAUSE;
446
+ }
447
+ if (encodedKeyIsUrl(key) && Predicate.isString(entry)) {
448
+ return scrubUrlCredentials(entry);
449
+ }
450
+ return isJson(entry) ? scrubEncodedCauseUrls(entry) : null;
451
+ };
452
+ var scrubEncodedCauseUrls = (value) => {
453
+ if (Predicate.isString(value)) {
454
+ return scrubUrlLikeString(value);
455
+ }
456
+ if (Array.isArray(value)) {
457
+ return value.map(scrubEncodedCauseUrls);
458
+ }
459
+ if (Predicate.isObject(value)) {
460
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, scrubEncodedCauseUrlEntry(key, entry)]));
461
+ }
462
+ return value;
463
+ };
464
+ var encodedCauseKeyCheck = SchemaGetter.checkEffect((encoded) => Effect.succeed(checkEncodedCauseKeys(encoded)));
465
+ var encodedCauseSizeCheck = SchemaGetter.checkEffect((encoded) => Effect.succeed(encodedJsonByteLength(encoded) <= SERIALIZABLE_CAUSE_MAX_BYTES ? true : `Serializable cause exceeds ${SERIALIZABLE_CAUSE_MAX_BYTES} encoded bytes`));
466
+ var decodeEncodedCause = SchemaGetter.compose(SchemaGetter.compose(SchemaGetter.transform(scrubEncodedCauseUrls), encodedCauseKeyCheck), encodedCauseSizeCheck);
467
+ var encodeEncodedCause = SchemaGetter.compose(encodedCauseKeyCheck, SchemaGetter.transform(truncateOversizedEncodedCause));
468
+ var decodeCause = (value) => {
469
+ if (Array.isArray(value)) {
470
+ return value.map(decodeCause);
471
+ }
472
+ if (!Predicate.isObject(value)) {
473
+ return value;
474
+ }
475
+ const fields = Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, isJson(entry) ? decodeCause(entry) : null]));
476
+ if (typeof fields.message !== "string") {
477
+ return fields;
478
+ }
479
+ const error = new Error(fields.message);
480
+ for (const [key, entry] of Object.entries(fields)) {
481
+ Object.defineProperty(error, key, { value: entry, enumerable: true, configurable: true, writable: true });
482
+ }
483
+ return error;
484
+ };
485
+ var SerializableCause = Schema.Json.pipe(Schema.decodeTo(Schema.Unknown, {
486
+ decode: SchemaGetter.transform(decodeCause),
487
+ encode: SchemaGetter.transform((value) => {
488
+ const bounded = boundDefectCause(value);
489
+ return isJson(bounded) ? bounded : UNAVAILABLE_CAUSE;
490
+ })
491
+ }), Schema.encode({ decode: decodeEncodedCause, encode: encodeEncodedCause }));
492
+
493
+ // ../kernel/error/src/base-error-fields.ts
494
+ var BaseErrorFields = {
495
+ message: Schema2.NonEmptyString,
496
+ cause: Schema2.optional(SerializableCause)
497
+ };
498
+ var messageFromCause = Function.dual(2, (cause, fallback) => {
499
+ if (!(cause instanceof Error)) {
500
+ return fallback;
501
+ }
502
+ const message = cause.message;
503
+ if (typeof message === "string" && message.length > 0) {
504
+ return message;
505
+ }
506
+ return cause.name === "" || cause.name === "Error" ? fallback : `${fallback}: ${cause.name}`;
507
+ });
508
+
509
+ // ../kernel/error/src/invariant-violation-error.ts
510
+ import { Schema as Schema3 } from "effect";
511
+ var InvariantViolationErrorBase = Schema3.TaggedError()("InvariantViolationError", BaseErrorFields);
512
+
513
+ class InvariantViolationError extends InvariantViolationErrorBase {
514
+ code = "core.error.INVARIANT_VIOLATION";
515
+ category = "domain";
516
+ retryable = false;
517
+ why = "A value violated an invariant the owning module requires.";
518
+ fix = "Supply a value that satisfies the documented module contract.";
519
+ }
520
+ var invariantViolation = (message) => InvariantViolationError.make({ message });
521
+
522
+ // ../kernel/json/src/json-text.ts
523
+ import { Result as Result2, Schema as Schema4 } from "effect";
524
+ var jsonText = Schema4.fromJsonString(Schema4.Unknown);
525
+ var makeJsonTextEncoder = (options) => Schema4.encodeUnknownResult(Schema4.fromJsonString(Schema4.Unknown, options));
526
+ var encodeJsonText2 = Schema4.encodeUnknownResult(jsonText);
527
+ var encodeJsonTextEffect = Schema4.encodeUnknownEffect(jsonText);
528
+ var decodeJsonText = Schema4.decodeUnknownResult(jsonText);
529
+ var decodeJsonTextEffect = Schema4.decodeUnknownEffect(jsonText);
530
+ var bigintAsString = (_key, value) => typeof value === "bigint" ? value.toString() : value;
531
+ var encodeBigintJsonText = makeJsonTextEncoder({ replacer: bigintAsString });
532
+ var encodeBigintJsonTextEffect = Schema4.encodeUnknownEffect(Schema4.fromJsonString(Schema4.Unknown, { replacer: bigintAsString }));
533
+ var dieOnEncode = (encoded) => {
534
+ if (Result2.isFailure(encoded)) {
535
+ throw invariantViolation("A value could not be written as JSON text");
536
+ }
537
+ return encoded.success;
538
+ };
539
+ var makeJsonTextEncoderOrDie = (options) => {
540
+ const encode = makeJsonTextEncoder(options);
541
+ return (value) => dieOnEncode(encode(value));
542
+ };
543
+ var encodeJsonTextOrDie = (value) => dieOnEncode(encodeJsonText2(value));
544
+ var encodePrettyJsonTextOrDie = makeJsonTextEncoderOrDie({ space: 2 });
545
+
546
+ // ../kernel/json/src/step-up-payload-text.ts
547
+ var PROOF_FIELD = "walletVerification";
548
+ var isAbsent = (value) => value === undefined || typeof value === "function" || typeof value === "symbol";
549
+ var byKey = ([left], [right]) => {
550
+ if (left < right) {
551
+ return -1;
552
+ }
553
+ if (left > right) {
554
+ return 1;
555
+ }
556
+ return 0;
557
+ };
558
+ var presentEntries = (fields, omitted) => {
559
+ const entries = [];
560
+ for (const [key, field] of fields) {
561
+ if (key !== omitted && !isAbsent(field)) {
562
+ entries.push([key, field]);
563
+ }
564
+ }
565
+ return entries.toSorted(byKey);
566
+ };
567
+ var canonicalText = (value, omitted = null) => {
568
+ if (value === null || isAbsent(value)) {
569
+ return "null";
570
+ }
571
+ if (typeof value !== "object") {
572
+ return encodeJsonTextOrDie(value);
573
+ }
574
+ if (Array.isArray(value)) {
575
+ return `[${value.map((item) => canonicalText(item)).join(",")}]`;
576
+ }
577
+ return `{${presentEntries(Object.entries(value), omitted).map(([key, field]) => `${encodeJsonTextOrDie(key)}:${canonicalText(field)}`).join(",")}}`;
578
+ };
579
+ var stepUpPayloadText = (body) => canonicalText(body, PROOF_FIELD);
580
+
581
+ // src/client/step-up-challenge.ts
582
+ import { sha256, stringToBytes } from "viem/utils";
583
+ var STEP_UP_CHALLENGE_HEADER = "X-Step-Up-Challenge";
584
+ var WALLET_VERIFICATION_HEADER = "X-Wallet-Verification";
585
+ var STEP_UP_CHALLENGE_PATH = "/api/v2/step-up-challenges";
586
+ var PROOF_FIELD2 = "walletVerification";
587
+ var HEX_PREFIX = "0x";
588
+ function carriesWalletProof(body) {
589
+ if (body === null || typeof body !== "object" || Array.isArray(body)) {
590
+ return false;
591
+ }
592
+ const proof = Reflect.get(body, PROOF_FIELD2);
593
+ return proof !== null && proof !== undefined;
594
+ }
595
+ async function stepUpChallengeRequest(operation, target, body) {
596
+ const payloadDigest = sha256(stringToBytes(stepUpPayloadText(body))).slice(HEX_PREFIX.length);
597
+ return { operation, target, payloadDigest };
598
+ }
599
+
600
+ export { DALP_AUTH_SURFACE_HEADER2, SECRET_REDACTION_MARKER2, Secret2, secret2, unwrapSecret, detectDalpRuntime, runtimeCredentials, refuseCrossOriginBrowserSession, isBufferingFetch, keepBufferingMarker, globalFetch, refuseBundledApiKey, encodeJsonTextOrDie, STEP_UP_CHALLENGE_HEADER, WALLET_VERIFICATION_HEADER, STEP_UP_CHALLENGE_PATH, carriesWalletProof, stepUpChallengeRequest };