@everfur/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/LICENSE +21 -0
  3. package/README.md +161 -0
  4. package/animations/package.json +8 -0
  5. package/chat/package.json +8 -0
  6. package/client/package.json +8 -0
  7. package/core/package.json +8 -0
  8. package/dist/CameraPort-Cv31Pz7g.d.cts +29 -0
  9. package/dist/CameraPort-Cv31Pz7g.d.ts +29 -0
  10. package/dist/ChatController-CKdBvPj2.d.ts +146 -0
  11. package/dist/ChatController-CpUMvvZf.d.cts +146 -0
  12. package/dist/EverfurResult-D92-uL82.d.cts +240 -0
  13. package/dist/EverfurResult-D92-uL82.d.ts +240 -0
  14. package/dist/FilePort-BabWrv7I.d.cts +22 -0
  15. package/dist/FilePort-BabWrv7I.d.ts +22 -0
  16. package/dist/PhotoController-BItt5M7u.d.cts +43 -0
  17. package/dist/PhotoController-D8zMTdcW.d.ts +43 -0
  18. package/dist/TelemetryPort-BDNr00hu.d.cts +12 -0
  19. package/dist/TelemetryPort-BDNr00hu.d.ts +12 -0
  20. package/dist/animations/index.cjs +1997 -0
  21. package/dist/animations/index.d.cts +517 -0
  22. package/dist/animations/index.d.ts +517 -0
  23. package/dist/animations/index.js +1972 -0
  24. package/dist/cacheEpoch-DknKn3S0.d.cts +36 -0
  25. package/dist/cacheEpoch-DknKn3S0.d.ts +36 -0
  26. package/dist/chat/index.cjs +1170 -0
  27. package/dist/chat/index.d.cts +59 -0
  28. package/dist/chat/index.d.ts +59 -0
  29. package/dist/chat/index.js +1167 -0
  30. package/dist/client/index.cjs +2317 -0
  31. package/dist/client/index.d.cts +65 -0
  32. package/dist/client/index.d.ts +65 -0
  33. package/dist/client/index.js +2217 -0
  34. package/dist/config-BSjBdxrZ.d.cts +501 -0
  35. package/dist/config-CiJ0PVBB.d.ts +501 -0
  36. package/dist/core/index.cjs +3175 -0
  37. package/dist/core/index.d.cts +70 -0
  38. package/dist/core/index.d.ts +70 -0
  39. package/dist/core/index.js +3163 -0
  40. package/dist/identity-Brl-lDd6.d.cts +91 -0
  41. package/dist/identity-DK9zORrG.d.ts +91 -0
  42. package/dist/ids-CJ1S6adf.d.cts +46 -0
  43. package/dist/ids-CJ1S6adf.d.ts +46 -0
  44. package/dist/index.cjs +4488 -0
  45. package/dist/index.d.cts +156 -0
  46. package/dist/index.d.ts +156 -0
  47. package/dist/index.js +4464 -0
  48. package/dist/petsRepository-BEGb97M9.d.cts +326 -0
  49. package/dist/petsRepository-Bu18r2kK.d.ts +326 -0
  50. package/dist/photo/index.cjs +2189 -0
  51. package/dist/photo/index.d.cts +43 -0
  52. package/dist/photo/index.d.ts +43 -0
  53. package/dist/photo/index.js +2186 -0
  54. package/dist/projection-CeIUsbSk.d.cts +8 -0
  55. package/dist/projection-CeIUsbSk.d.ts +8 -0
  56. package/dist/records/index.cjs +2840 -0
  57. package/dist/records/index.d.cts +224 -0
  58. package/dist/records/index.d.ts +224 -0
  59. package/dist/records/index.js +2834 -0
  60. package/dist/requestFunnel-DuUH-kAe.d.cts +28 -0
  61. package/dist/requestFunnel-dio5OmR9.d.ts +28 -0
  62. package/dist/resolve-Dq_4_agU.d.cts +86 -0
  63. package/dist/resolve-Dq_4_agU.d.ts +86 -0
  64. package/dist/runtime-BgQnA594.d.cts +349 -0
  65. package/dist/runtime-CBA-LvdM.d.ts +349 -0
  66. package/dist/server/index.cjs +533 -0
  67. package/dist/server/index.d.cts +48 -0
  68. package/dist/server/index.d.ts +48 -0
  69. package/dist/server/index.js +530 -0
  70. package/dist/testing/index.cjs +825 -0
  71. package/dist/testing/index.d.cts +113 -0
  72. package/dist/testing/index.d.ts +113 -0
  73. package/dist/testing/index.js +822 -0
  74. package/dist/testing/rn/index.cjs +449 -0
  75. package/dist/testing/rn/index.d.cts +49 -0
  76. package/dist/testing/rn/index.d.ts +49 -0
  77. package/dist/testing/rn/index.js +444 -0
  78. package/dist/video/index.cjs +1941 -0
  79. package/dist/video/index.d.cts +66 -0
  80. package/dist/video/index.d.ts +66 -0
  81. package/dist/video/index.js +1938 -0
  82. package/package.json +311 -0
  83. package/photo/package.json +8 -0
  84. package/records/package.json +8 -0
  85. package/server/device-blocked.cjs +15 -0
  86. package/server/package.json +9 -0
  87. package/testing/package.json +8 -0
  88. package/testing/rn/package.json +8 -0
  89. package/video/package.json +8 -0
@@ -0,0 +1,65 @@
1
+ import { a as EverfurErrorCode } from '../EverfurResult-D92-uL82.cjs';
2
+ export { A as AUTO_RETRYABLE_CODES, B as BACKOFF_BASE_MS, b as BACKOFF_CAP_MS, c as EVERFUR_ERROR_CATEGORIES, d as EVERFUR_ERROR_CODES, e as EverfurConfigError, f as EverfurError, g as EverfurErrorCategory, E as EverfurResult, h as EverfurThrownError, M as MAX_RETRY_ATTEMPTS, i as MakeEverfurErrorOptions, R as RETRYABLE_CONTRACT_CODES, j as backoffDelayMs, k as canRecreateOnNotFound, l as categoryFor, m as err, n as fromHttpStatus, o as fromWire, p as isAutoRetryable, q as isErr, r as isOk, s as isRetryableCode, t as makeEverfurError, u as ok, v as shouldRetry, w as unwrap, x as userFacingError } from '../EverfurResult-D92-uL82.cjs';
3
+ export { A as AcceptedFrame, b as AnalysisCompleteFrame, c as AnalysisStartedFrame, B as ByteSource, C as ClientConfigFailure, d as ClientConfigFailureReason, e as ClientConfigOutcome, D as DEFAULT_CONTRACT_VERSION, f as DeltaFrame, g as DoneFrame, h as EMPTY_FRAME_ARRAYS, i as ENV_API_BASE_URL, j as ErrorFrame, k as EventSourceFactory, l as EventSourceInit, m as EventSourceLike, n as EventSourceMessage, o as EverfurConfig, E as EverfurRequest, p as EverfurRequestBase, q as FetchInit, a as FetchLike, r as FetchResponseLike, F as Frame, s as FrameBase, t as FrameKind, H as HeartbeatFrame, u as HttpMethod, M as MultipartBody, R as RawResponse, v as ReadableStreamLike, w as ResolvedClientConfig, S as SDK_PLATFORM, x as SDK_VERSION, y as ServerRequestIdSource, z as TransportDeps, T as TransportPort, U as UnknownFrame, G as UrgencyLevel, I as acceptedFrame, J as analysisCompleteFrame, K as analysisStartedFrame, L as assertNever, N as bufferedTextByteSource, O as buildBaseHeaders, P as checkPublishableKey, Q as createHttpTransport, V as deltaFrame, W as doneFrame, X as errorFrame, Y as errorFromResponse, Z as eventSourceByteSource, _ as eventSourceRequestId, $ as fetchByteSource, a0 as getGlobalFetch, a1 as heartbeatFrame, a2 as networkError, a3 as parseSse, a4 as requestIdOf, a5 as requestJson, a6 as requestRaw, a7 as resolveApiBaseUrl, a8 as resolveClientConfig, a9 as tryResolveApiBaseUrl, aa as tryResolveClientConfig, ab as unknownFrame } from '../config-BSjBdxrZ.cjs';
4
+ export { B as Brand, C as ClientId, a as ConversationId, D as DocumentId, J as JobId, P as PetRef, R as RecordsRequestId, b as ResponseId, U as UserRef, _ as __brand, c as conversationId, p as petRef, u as unsafeClientId, d as unsafeConversationId, e as unsafeDocumentId, f as unsafeJobId, g as unsafePetRef, h as unsafeRecordsRequestId, i as unsafeResponseId, j as unsafeUserRef, k as userRef } from '../ids-CJ1S6adf.cjs';
5
+ export { A as AuthContext, D as DeviceAuth, I as IdentityProvider, T as TokenProvider, a as authHeaders, b as authedSend, c as createIdentityProvider, n as newSessionId, w as withAuthHeaders } from '../identity-Brl-lDd6.cjs';
6
+ export { C as CapabilityDecision, a as CapabilityDisabled, b as CapabilityName, D as DecideOptions, c as DisabledLevel, E as EntitlementDecision, L as LevelGrant, R as ResolvedEntitlements, d as decideCapability, e as deniedDecisionsFor, r as requires, f as resolveEntitlements } from '../resolve-Dq_4_agU.cjs';
7
+ export { C as ClientBranding, E as ENTITLEMENTS_PATH, a as EVERFUR_DARK, b as EVERFUR_LIGHT, c as EntitlementResolution, d as EverfurColorTokens, e as EverfurFontWeight, f as EverfurLetterSpacingTokens, g as EverfurLineHeightTokens, h as EverfurMotionDurationTokens, i as EverfurMotionTokens, j as EverfurRadiusTokens, k as EverfurSpaceTokens, l as EverfurSpringToken, m as EverfurTextColorTokens, n as EverfurTheme, o as EverfurThemeMeta, p as EverfurTypeSizeTokens, q as EverfurTypeTokens, r as EverfurWeightTokens, F as FetchEntitlementsArgs, P as PET_AGE_YEARS_MAX, s as PET_BREED_MAX, t as PET_NAME_MAX, u as PET_SPECIES_MAX, v as PET_WEIGHT_KG_MAX, w as PetProfileInput, x as PetsRepository, R as RegisteredPet, y as ResolveThemeInput, z as createPetsRepository, A as deepFreeze, B as fetchEntitlements, D as hardenHttpsUrl, G as isEmptyBranding, H as parseClientBranding, I as parseColor, J as readableOn, K as resolveTheme, L as withServerBranding } from '../petsRepository-BEGb97M9.cjs';
8
+ import '../requestFunnel-DuUH-kAe.cjs';
9
+
10
+ /** Which wire shape a code arrives in. The two envelopes are different objects, not casings. */
11
+ type ContractErrorEnvelope = "http_envelope" | "sse_frame";
12
+ /** Every wire error code the contract declares, spelled EXACTLY as the server sends it. */
13
+ type ContractWireErrorCode = "AccessDeniedException" | "AuthorizationException" | "ConflictException" | "DAILY_QUOTA_EXCEEDED" | "IDEMPOTENCY_KEY_IN_FLIGHT" | "IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST" | "InternalFailureException" | "NotImplementedException" | "PaymentRequiredException" | "ResourceNotFoundException" | "ServiceUnavailableException" | "TIER_UPGRADE_REQUIRED" | "ThrottlingException" | "ValidationException" | "accessDenied" | "authExpired" | "internal_error" | "invalidRequest" | "not_found" | "session_required" | "timeout" | "unavailable";
14
+
15
+ /** One registry row, reduced to the facts the SDK needs at runtime. */
16
+ interface ContractErrorRow {
17
+ /**
18
+ * The wire `code` string EXACTLY as the server sends it. Typed as `string`, not as the generated
19
+ * `ContractWireErrorCode` union: a row is looked up from a value that arrived off the network, and
20
+ * narrowing this field would push that unavoidable widening onto every caller.
21
+ */
22
+ readonly wireCode: string;
23
+ readonly envelope: ContractErrorEnvelope;
24
+ /** The registry's own retryable claim. Documentation of server semantics, not the SDK retry policy. */
25
+ readonly retryable: boolean;
26
+ /** The normalized taxonomy member this code folds to. */
27
+ readonly normalized: EverfurErrorCode;
28
+ }
29
+ /**
30
+ * Every code in the contract, joined to the member it folds to. Frozen.
31
+ *
32
+ * The wire code, its envelope and the server's own `retryable` claim are GENERATED (see the note above
33
+ * `NORMALIZED_FOLD`); only the fold is hand-written, and `Record<ContractWireErrorCode, ...>` makes it
34
+ * exhaustive, so a code added to the contract fails `tsc` here rather than silently becoming `unknown`.
35
+ */
36
+ declare const CONTRACT_ERROR_ROWS: readonly ContractErrorRow[];
37
+ /** The registry row for a raw wire code, or undefined when the code is not in the contract. */
38
+ declare function contractErrorFor(wireCode: string | null | undefined): ContractErrorRow | undefined;
39
+ /**
40
+ * The registry's `doc_url` for a row. SITE-RELATIVE by construction: the contract records that there is
41
+ * no confirmed public documentation host to prefix it with, so the SDK publishes the path and never
42
+ * fabricates an origin. The SSE frames are namespaced (`#sse-timeout`) because a frame code and an HTTP
43
+ * code can share a name; `tests/contract/errorRegistry.test.ts` asserts this derivation reproduces the
44
+ * registry's own `doc_url` for all 22 rows, so the pattern cannot drift unnoticed.
45
+ */
46
+ declare function contractDocUrl(entry: ContractErrorRow): string;
47
+ /**
48
+ * Is the `/errors` reference page actually published?
49
+ *
50
+ * Measured 2026-08-23: it is NOT. `everfur-frontend` has no `errors` route, so every `docUrl` the SDK
51
+ * emitted was a dangling pointer — a partner received the string `/errors#RATE_LIMITED`, with no origin to
52
+ * resolve it against and no page behind it if they guessed one. Handing out a link that cannot be opened is
53
+ * worse than handing out none: it reads as documentation that exists.
54
+ *
55
+ * `EverfurError.docUrl` is OPTIONAL and its own contract already says an unregistered code "simply yields
56
+ * no docUrl", so omitting it is contract-compatible rather than a breaking change.
57
+ *
58
+ * TO PUBLISH: add the route, set this to the origin (e.g. `'https://everfur.com'`), and `contractDocUrl`
59
+ * becomes an absolute URL. That is the whole change.
60
+ */
61
+ declare const DOC_SITE_ORIGIN: string | null;
62
+ /** The emitted `docUrl`, or null while no page exists to point at. */
63
+ declare function publishedDocUrl(entry: ContractErrorRow): string | null;
64
+
65
+ export { CONTRACT_ERROR_ROWS, type ContractErrorEnvelope, type ContractErrorRow, type ContractWireErrorCode, DOC_SITE_ORIGIN, EverfurErrorCode, contractDocUrl, contractErrorFor, publishedDocUrl };
@@ -0,0 +1,65 @@
1
+ import { a as EverfurErrorCode } from '../EverfurResult-D92-uL82.js';
2
+ export { A as AUTO_RETRYABLE_CODES, B as BACKOFF_BASE_MS, b as BACKOFF_CAP_MS, c as EVERFUR_ERROR_CATEGORIES, d as EVERFUR_ERROR_CODES, e as EverfurConfigError, f as EverfurError, g as EverfurErrorCategory, E as EverfurResult, h as EverfurThrownError, M as MAX_RETRY_ATTEMPTS, i as MakeEverfurErrorOptions, R as RETRYABLE_CONTRACT_CODES, j as backoffDelayMs, k as canRecreateOnNotFound, l as categoryFor, m as err, n as fromHttpStatus, o as fromWire, p as isAutoRetryable, q as isErr, r as isOk, s as isRetryableCode, t as makeEverfurError, u as ok, v as shouldRetry, w as unwrap, x as userFacingError } from '../EverfurResult-D92-uL82.js';
3
+ export { A as AcceptedFrame, b as AnalysisCompleteFrame, c as AnalysisStartedFrame, B as ByteSource, C as ClientConfigFailure, d as ClientConfigFailureReason, e as ClientConfigOutcome, D as DEFAULT_CONTRACT_VERSION, f as DeltaFrame, g as DoneFrame, h as EMPTY_FRAME_ARRAYS, i as ENV_API_BASE_URL, j as ErrorFrame, k as EventSourceFactory, l as EventSourceInit, m as EventSourceLike, n as EventSourceMessage, o as EverfurConfig, E as EverfurRequest, p as EverfurRequestBase, q as FetchInit, a as FetchLike, r as FetchResponseLike, F as Frame, s as FrameBase, t as FrameKind, H as HeartbeatFrame, u as HttpMethod, M as MultipartBody, R as RawResponse, v as ReadableStreamLike, w as ResolvedClientConfig, S as SDK_PLATFORM, x as SDK_VERSION, y as ServerRequestIdSource, z as TransportDeps, T as TransportPort, U as UnknownFrame, G as UrgencyLevel, I as acceptedFrame, J as analysisCompleteFrame, K as analysisStartedFrame, L as assertNever, N as bufferedTextByteSource, O as buildBaseHeaders, P as checkPublishableKey, Q as createHttpTransport, V as deltaFrame, W as doneFrame, X as errorFrame, Y as errorFromResponse, Z as eventSourceByteSource, _ as eventSourceRequestId, $ as fetchByteSource, a0 as getGlobalFetch, a1 as heartbeatFrame, a2 as networkError, a3 as parseSse, a4 as requestIdOf, a5 as requestJson, a6 as requestRaw, a7 as resolveApiBaseUrl, a8 as resolveClientConfig, a9 as tryResolveApiBaseUrl, aa as tryResolveClientConfig, ab as unknownFrame } from '../config-CiJ0PVBB.js';
4
+ export { B as Brand, C as ClientId, a as ConversationId, D as DocumentId, J as JobId, P as PetRef, R as RecordsRequestId, b as ResponseId, U as UserRef, _ as __brand, c as conversationId, p as petRef, u as unsafeClientId, d as unsafeConversationId, e as unsafeDocumentId, f as unsafeJobId, g as unsafePetRef, h as unsafeRecordsRequestId, i as unsafeResponseId, j as unsafeUserRef, k as userRef } from '../ids-CJ1S6adf.js';
5
+ export { A as AuthContext, D as DeviceAuth, I as IdentityProvider, T as TokenProvider, a as authHeaders, b as authedSend, c as createIdentityProvider, n as newSessionId, w as withAuthHeaders } from '../identity-DK9zORrG.js';
6
+ export { C as CapabilityDecision, a as CapabilityDisabled, b as CapabilityName, D as DecideOptions, c as DisabledLevel, E as EntitlementDecision, L as LevelGrant, R as ResolvedEntitlements, d as decideCapability, e as deniedDecisionsFor, r as requires, f as resolveEntitlements } from '../resolve-Dq_4_agU.js';
7
+ export { C as ClientBranding, E as ENTITLEMENTS_PATH, a as EVERFUR_DARK, b as EVERFUR_LIGHT, c as EntitlementResolution, d as EverfurColorTokens, e as EverfurFontWeight, f as EverfurLetterSpacingTokens, g as EverfurLineHeightTokens, h as EverfurMotionDurationTokens, i as EverfurMotionTokens, j as EverfurRadiusTokens, k as EverfurSpaceTokens, l as EverfurSpringToken, m as EverfurTextColorTokens, n as EverfurTheme, o as EverfurThemeMeta, p as EverfurTypeSizeTokens, q as EverfurTypeTokens, r as EverfurWeightTokens, F as FetchEntitlementsArgs, P as PET_AGE_YEARS_MAX, s as PET_BREED_MAX, t as PET_NAME_MAX, u as PET_SPECIES_MAX, v as PET_WEIGHT_KG_MAX, w as PetProfileInput, x as PetsRepository, R as RegisteredPet, y as ResolveThemeInput, z as createPetsRepository, A as deepFreeze, B as fetchEntitlements, D as hardenHttpsUrl, G as isEmptyBranding, H as parseClientBranding, I as parseColor, J as readableOn, K as resolveTheme, L as withServerBranding } from '../petsRepository-Bu18r2kK.js';
8
+ import '../requestFunnel-dio5OmR9.js';
9
+
10
+ /** Which wire shape a code arrives in. The two envelopes are different objects, not casings. */
11
+ type ContractErrorEnvelope = "http_envelope" | "sse_frame";
12
+ /** Every wire error code the contract declares, spelled EXACTLY as the server sends it. */
13
+ type ContractWireErrorCode = "AccessDeniedException" | "AuthorizationException" | "ConflictException" | "DAILY_QUOTA_EXCEEDED" | "IDEMPOTENCY_KEY_IN_FLIGHT" | "IDEMPOTENCY_KEY_REUSED_DIFFERENT_REQUEST" | "InternalFailureException" | "NotImplementedException" | "PaymentRequiredException" | "ResourceNotFoundException" | "ServiceUnavailableException" | "TIER_UPGRADE_REQUIRED" | "ThrottlingException" | "ValidationException" | "accessDenied" | "authExpired" | "internal_error" | "invalidRequest" | "not_found" | "session_required" | "timeout" | "unavailable";
14
+
15
+ /** One registry row, reduced to the facts the SDK needs at runtime. */
16
+ interface ContractErrorRow {
17
+ /**
18
+ * The wire `code` string EXACTLY as the server sends it. Typed as `string`, not as the generated
19
+ * `ContractWireErrorCode` union: a row is looked up from a value that arrived off the network, and
20
+ * narrowing this field would push that unavoidable widening onto every caller.
21
+ */
22
+ readonly wireCode: string;
23
+ readonly envelope: ContractErrorEnvelope;
24
+ /** The registry's own retryable claim. Documentation of server semantics, not the SDK retry policy. */
25
+ readonly retryable: boolean;
26
+ /** The normalized taxonomy member this code folds to. */
27
+ readonly normalized: EverfurErrorCode;
28
+ }
29
+ /**
30
+ * Every code in the contract, joined to the member it folds to. Frozen.
31
+ *
32
+ * The wire code, its envelope and the server's own `retryable` claim are GENERATED (see the note above
33
+ * `NORMALIZED_FOLD`); only the fold is hand-written, and `Record<ContractWireErrorCode, ...>` makes it
34
+ * exhaustive, so a code added to the contract fails `tsc` here rather than silently becoming `unknown`.
35
+ */
36
+ declare const CONTRACT_ERROR_ROWS: readonly ContractErrorRow[];
37
+ /** The registry row for a raw wire code, or undefined when the code is not in the contract. */
38
+ declare function contractErrorFor(wireCode: string | null | undefined): ContractErrorRow | undefined;
39
+ /**
40
+ * The registry's `doc_url` for a row. SITE-RELATIVE by construction: the contract records that there is
41
+ * no confirmed public documentation host to prefix it with, so the SDK publishes the path and never
42
+ * fabricates an origin. The SSE frames are namespaced (`#sse-timeout`) because a frame code and an HTTP
43
+ * code can share a name; `tests/contract/errorRegistry.test.ts` asserts this derivation reproduces the
44
+ * registry's own `doc_url` for all 22 rows, so the pattern cannot drift unnoticed.
45
+ */
46
+ declare function contractDocUrl(entry: ContractErrorRow): string;
47
+ /**
48
+ * Is the `/errors` reference page actually published?
49
+ *
50
+ * Measured 2026-08-23: it is NOT. `everfur-frontend` has no `errors` route, so every `docUrl` the SDK
51
+ * emitted was a dangling pointer — a partner received the string `/errors#RATE_LIMITED`, with no origin to
52
+ * resolve it against and no page behind it if they guessed one. Handing out a link that cannot be opened is
53
+ * worse than handing out none: it reads as documentation that exists.
54
+ *
55
+ * `EverfurError.docUrl` is OPTIONAL and its own contract already says an unregistered code "simply yields
56
+ * no docUrl", so omitting it is contract-compatible rather than a breaking change.
57
+ *
58
+ * TO PUBLISH: add the route, set this to the origin (e.g. `'https://everfur.com'`), and `contractDocUrl`
59
+ * becomes an absolute URL. That is the whole change.
60
+ */
61
+ declare const DOC_SITE_ORIGIN: string | null;
62
+ /** The emitted `docUrl`, or null while no page exists to point at. */
63
+ declare function publishedDocUrl(entry: ContractErrorRow): string | null;
64
+
65
+ export { CONTRACT_ERROR_ROWS, type ContractErrorEnvelope, type ContractErrorRow, type ContractWireErrorCode, DOC_SITE_ORIGIN, EverfurErrorCode, contractDocUrl, contractErrorFor, publishedDocUrl };