@giveitsmaller/sdk 0.8.0 → 0.10.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 (46) hide show
  1. package/README.md +8 -0
  2. package/dist/_audit.js +5 -1
  3. package/dist/builder.d.ts +1 -8
  4. package/dist/builder.js +72 -18
  5. package/dist/client.d.ts +38 -2
  6. package/dist/client.js +131 -7
  7. package/dist/credentials.js +4 -2
  8. package/dist/ergonomic/preset_resolver.js +4 -5
  9. package/dist/ergonomic/presets/image_compress.d.ts +1 -9
  10. package/dist/ergonomic/presets/image_compress.js +6 -25
  11. package/dist/ergonomic/presets/index.d.ts +1 -1
  12. package/dist/ergonomic/presets/index.js +1 -1
  13. package/dist/errors.d.ts +75 -1
  14. package/dist/errors.js +73 -0
  15. package/dist/file-first.d.ts +456 -4
  16. package/dist/file-first.js +1042 -83
  17. package/dist/generated/sdk_spec/enums.d.ts +0 -11
  18. package/dist/generated/sdk_spec/enums.js +0 -7
  19. package/dist/generated/sdk_spec/errors.d.ts +1 -1
  20. package/dist/generated/sdk_spec/errors.js +26 -0
  21. package/dist/generated/sdk_spec/presets.js +0 -3
  22. package/dist/generated/sdk_spec/version.d.ts +2 -2
  23. package/dist/generated/sdk_spec/version.js +2 -2
  24. package/dist/gisl.d.ts +22 -1
  25. package/dist/gisl.js +31 -1
  26. package/dist/handle.d.ts +153 -0
  27. package/dist/handle.js +273 -0
  28. package/dist/index.browser.d.ts +1 -0
  29. package/dist/index.browser.js +14 -0
  30. package/dist/index.core.d.ts +35 -0
  31. package/dist/index.core.js +102 -0
  32. package/dist/index.d.ts +1 -30
  33. package/dist/index.js +9 -73
  34. package/dist/lazy-downloader.d.ts +19 -0
  35. package/dist/lazy-downloader.js +19 -0
  36. package/dist/merge.d.ts +13 -1
  37. package/dist/merge.js +186 -55
  38. package/dist/node-fs.browser.d.ts +17 -0
  39. package/dist/node-fs.browser.js +7 -0
  40. package/dist/node-fs.d.ts +14 -0
  41. package/dist/node-fs.js +14 -0
  42. package/dist/sha256.d.ts +20 -0
  43. package/dist/sha256.js +108 -0
  44. package/dist/types.d.ts +54 -2
  45. package/dist/types.js +2 -0
  46. package/package.json +15 -2
@@ -0,0 +1,14 @@
1
+ // Browser entry point — selected by the `browser` exports condition in
2
+ // package.json (Vite / webpack / Rollup / esbuild / Parcel; Node ignores it).
3
+ //
4
+ // Re-exports ONLY the browser-safe shared surface (`index.core.ts`). It
5
+ // deliberately OMITS the Node-only `verifyWebhook` (node:crypto) and
6
+ // `HttpDownloader` (node:fs) that the Node entry (`index.ts`) adds — keeping
7
+ // `node:` built-ins out of the browser static import graph. A strict subset of
8
+ // the Node entry by construction, so it cannot silently drift.
9
+ //
10
+ // Output sinks (`RunResult.downloadTo()` / `toFile()`) are Node-only and throw
11
+ // `GislSinkError` in a browser by design — read `RunResult.artifacts[].url`
12
+ // (or `RunResult.url` for a single output) and fetch it in the browser. See
13
+ // docs/typescript/browser.md.
14
+ export * from './index.core.js';
@@ -0,0 +1,35 @@
1
+ export { GislClient, DEFAULT_MULTIPART_FIRST_CHUNK_SIZE } from './client.js';
2
+ export { parseSseStream } from './sse.js';
3
+ export type { CreditsUsageOptions, ListWorkflowsOptions, GetSchemaOptions, GetSchemaResult, PreflightClipError, PreflightClipsResult, GislClientConfig, GislSseEvent, UploadOptions, WaitOptions, WorkflowCreatePayload, OperationDef, WorkflowSourcePayload, MultiInputSourcePayload, UploadSourcePayload, JobOutputSourcePayload, ExternalImportSourcePayload, ConnectionSourcePayload, JobInputV2Payload, JobDefinitionPayload, ExternalDestinationPayload, DeliveryPayload, DeliveryModePayload, DeliveryBundleFormatPayload, DeliverySelectionPayload, DeliverySelectionTypePayload, DeliveryOutputRefPayload, WorkflowProcessingPayload, ProcessingClassHintPayload, MultipartCheckpointState, _Sdk3HandCodedUploadedPart, _Sdk3HandCodedMultipartStatusResult, _Sdk3HandCodedPresignedPart, _Sdk3HandCodedPresignPartsResult, _Sdk3HandCodedKeepaliveResult, } from './types.js';
4
+ export { uploadSource, jobOutputSource, externalImportSource, connectionSource, } from './types.js';
5
+ export type { GislConfigErrorMetadata } from './errors.js';
6
+ export { GislError, GislApiError, GislValidationError, GislBalanceExhaustedError, GislTierRestrictedError, GislFeatureTierRestrictedError, GislFeatureNotAvailableError, GislWorkflowExpiredError, GislProbePendingError, GislAuthError, GislUploadCapExceededError, GislMultipartPartError, GislMultipartPartCountError, GislMultipartSessionNotFoundError, GislMultipartSessionOwnershipError, GislMultipartSessionAuthRequiredError, GislTimeoutError, GislAbortError, GislNetworkError, GislConfigError, GislMissingCredentialsError, GislFeatureRequiresAuthError, GislUndeclaredAssetError, GislUnusedAssetError, GislPerInputOptionsNotSupportedError, GislChainCardinalityMismatchError, GislNoSuchKeyError, GislSinkError, GislResultNotReadyError, } from './errors.js';
7
+ export type { GislApiErrorOptions, GislUploadCapKind } from './errors.js';
8
+ export { RunResult } from './file-first.js';
9
+ export type { OutputFile, ItemResult, ItemFailure, Manifest, Downloader, } from './file-first.js';
10
+ export { Recipe, fileInput } from './file-first.js';
11
+ export type { FileInput } from './file-first.js';
12
+ export { FilesRecipe } from './file-first.js';
13
+ export { MergedRecipe } from './file-first.js';
14
+ export { ArchivedRecipe } from './file-first.js';
15
+ export type { ArchiveRecipeOptions } from './file-first.js';
16
+ export { Handle, StatusSnapshot } from './handle.js';
17
+ export { gisl, create } from './gisl.js';
18
+ export type { GislCreateOptions, Environment, ErgonomicClient } from './gisl.js';
19
+ export { presetDefaults, PresetDefaults, type PresetMedia, type PresetOp, type AnyPresetOptions, ImageCompressPresetOptions, type ImageCompressPresetOptionsInput, AudioCompressPresetOptions, type AudioCompressPresetOptionsInput, VideoCompressPresetOptions, type VideoCompressPresetOptionsInput, DocumentPdfCompressPresetOptions, type DocumentPdfCompressPresetOptionsInput, DocumentOfficeCompressPresetOptions, type DocumentOfficeCompressPresetOptionsInput, DocumentOdfCompressPresetOptions, type DocumentOdfCompressPresetOptionsInput, DocumentEpubCompressPresetOptions, type DocumentEpubCompressPresetOptionsInput, OptimizeFor, ImageMode, ImageMetadataPolicy, IccProfilePolicy, ImageFormat, VideoCodec, VideoPreset, VideoFit, AudioBitrate, AudioCodec, AudioSampleRate, PdfProfile, PdfColorspace, } from './ergonomic/presets/index.js';
20
+ export { OperationBuilder, MapEachBuilder } from './builder.js';
21
+ export { MergeBuilder, asset, handle, clip } from './merge.js';
22
+ export type { Asset, ClipEntry, ClipOptions, MergeMediaKind, MergeOptions, SequenceEntry, } from './merge.js';
23
+ export type { Artifact, ArtifactRef, JobBreakdown, OperationBreakdown, ProcessingProgressEvent, ProgressEvent, ResolvedOptions, ResolvedOptionsSources, Result, RunOptions, SubmitOptions, UploadProgressEvent, } from './builder.js';
24
+ export { PRESET_VERSION, resolveCompressOptions } from './ergonomic/preset_resolver.js';
25
+ export type { ResolveCompressOptionsInput, ResolveCompressOptionsOutput, } from './ergonomic/preset_resolver.js';
26
+ export type { AudioWatermarkDecodeRequest, AudioWatermarkDecodeResponse, ContactRequest, CreditsBalanceResponse, CreditsUsageResponse, CreditTransaction, ExternalImportCreatedResponse, ExternalImportRequest, LoginUserRequest, LoginUser200ResponseData, LoginUser200ResponseDataUser, WorkflowCancelResponse, WorkflowResumeResponse, WorkflowPausedDetail, WorkflowPausedDetailLinks, UploadResponse, UploadConstraintsApplied, UploadProbeResponse, UploadProbeMediaMetadata, MultipartInitiateRequestMetadataHint, WorkflowCreateResponse, WorkflowStatusResponse, WorkflowListResponse, WorkflowSummary, WorkflowDownloadResponse, MetadataResponse, MetadataResponseDimensions, MetadataResponseExif, MetadataResponseExifGps, OperationsSchemaResponse, OperationSchemaDefinition, MimeGroupSchema, OptionSchema, PerValueAvailabilityEntry, PerRoleCardinalityEntry, RetryResponse, JobDownload, OperationDownload, WebhookPayload, WebhookOperationContext, JobResponse, OperationResponse, OperationResult, OperationResultMetrics, ExternalDestination, Delivery, DeliveryPlan, DeliveryPlanOutput, WorkflowProcessing, ProcessingPlan, ProcessingPlanJob, WorkflowEdge, WorkflowWarning, JobInputV2, WorkflowSource, UploadSource, JobOutputSource, ConnectionSource, ExternalImportToken, BalanceExhaustedResponse, BalanceExhaustedResponseAllOfLinks, TierRestrictionResponse, FeatureTierRestrictedResponse, FeatureNotAvailableResponse, FeatureViolation, WorkflowExpiredResponse, ProbePendingResponse, AuthErrorResponse, } from '@giveitsmaller/contracts/openapi';
27
+ export { AudioWatermarkDecodeRequestMethodHintEnum, AudioWatermarkDecodeResponseMethodEnum, OperationInputModel, ExternalImportRequestProviderHintEnum, ContactSubject, CreditTransactionSourceBucket, UploadProbeStatus, UploadProbeProcessingClass, WorkflowCancelBillingEffect, WorkflowPauseRequiredAction, WorkflowStatus, WarningType, WorkflowWarningSeverity, OperationType, SseEventType, CallbackEventType, OperationStatus, JobStatus, JobInputV2RoleEnum, AuthErrorType, TierRestrictionKind, BalanceExhaustedResponseRequiredActionEnum, ProcessingClassReason, DeliveryPlanReason, UserTier, ProcessingClass, } from '@giveitsmaller/contracts/openapi';
28
+ export type { SseOperationProgressData, SseOperationCompletedData, SseOperationFailedData, SseJobCompletedData, SseJobFailedData, SseWorkflowTerminalData, } from '@giveitsmaller/contracts/openapi';
29
+ export type { MultiOutputCompletion, PageIndexed, PositionIndexed, Unindexed, } from '@giveitsmaller/contracts/asyncapi';
30
+ import type { MultiOutputCompletion as _MultiOutputCompletion } from '@giveitsmaller/contracts/asyncapi';
31
+ export type OperationResultOutputEntry = _MultiOutputCompletion['outputs'][number];
32
+ export type { CompressImageOptions, CompressVideoOptions, CompressAudioOptions, CompressDocumentPdfOptions, CompressDocumentOfficeOptions, CompressDocumentOdfOptions, CompressDocumentEpubOptions, ThumbnailImageOptions, ThumbnailVideoOptions, ThumbnailDocumentOptions, ConvertImageOptions, ConvertVideoOptions, ConvertAudioOptions, ConvertDocumentPdfOptions, MergeImageOptions, MergeVideoOptions, MergeVideoPerInputOptions, MergeAudioOptions, MergeAudioPerInputOptions, ArchiveOptions, ImageWatermarkImageOptions, ImageWatermarkImageGifOptions, TextWatermarkImageOptions, CustomLumaVideoOptions, AudioOverlayAudioOptions, AudioOverlayVideoOptions, AudioWatermarkAudioOptions, AudioWatermarkVideoOptions, AudioToVideoAudioOptions, VideoWatermarkVideoOptions, VideoTextWatermarkVideoOptions, SplitImageGifOptions, SplitDocumentPdfOptions, SplitAudioOptions, SplitVideoOptions, } from '@giveitsmaller/contracts/operations';
33
+ export { ImageWatermarkImageAnchor, ImageWatermarkImageGifAnchor, TextWatermarkImageAnchor, TextWatermarkImageFontFamily, TextWatermarkImageWatermarkMode, AudioOverlayAudioMode, AudioOverlayVideoMode, AudioOverlayVideoNoAudioTrackBehaviour, AudioWatermarkAudioMethod, AudioWatermarkAudioRobustness, AudioWatermarkAudioDensity, AudioWatermarkVideoMethod, AudioWatermarkVideoRobustness, AudioWatermarkVideoDensity, AudioToVideoAudioOutputResolution, AudioToVideoAudioImageFit, AudioToVideoAudioOutputFormat, VideoWatermarkVideoAnchor, VideoTextWatermarkVideoFontFamily, VideoTextWatermarkVideoWatermarkMode, VideoTextWatermarkVideoAnchor, SplitImageGifOutputFormat, SplitDocumentPdfMode, SplitAudioMode, SplitAudioPrecision, SplitVideoMode, SplitVideoPrecision, } from '@giveitsmaller/contracts/operations';
34
+ export { archiveMetadata, audioOverlayMetadata, audioWatermarkMetadata, compressMetadata, convertMetadata, customLumaMetadata, imageWatermarkMetadata, mergeMetadata, textWatermarkMetadata, thumbnailMetadata, audioToVideoMetadata, videoWatermarkMetadata, videoTextWatermarkMetadata, splitMetadata, } from '@giveitsmaller/contracts/operations';
35
+ export type { OperationMetadata, AvailabilityValue, AvailabilityEntry, FeatureEntry, MimeGroupMetadata, OptionMetadata, ProcessingClassConstraints, } from '@giveitsmaller/contracts/operations';
@@ -0,0 +1,102 @@
1
+ // Browser-safe shared surface. The Node-only entry (`index.ts`) re-exports
2
+ // everything here PLUS the Node-only symbols (`verifyWebhook`, `HttpDownloader`)
3
+ // that statically import node:crypto / node:fs; the browser entry
4
+ // (`index.browser.ts`) re-exports ONLY this core, so it is a strict subset by
5
+ // construction (no hand-maintained subset to drift). Keep this file free of any
6
+ // static `node:` import — see the bundle-gate test.
7
+ // SDK classes and functions
8
+ export { GislClient, DEFAULT_MULTIPART_FIRST_CHUNK_SIZE } from './client.js';
9
+ export { parseSseStream } from './sse.js';
10
+ export { uploadSource, jobOutputSource, externalImportSource, connectionSource, } from './types.js';
11
+ // Errors
12
+ export { GislError, GislApiError, GislValidationError, GislBalanceExhaustedError, GislTierRestrictedError, GislFeatureTierRestrictedError, GislFeatureNotAvailableError, GislWorkflowExpiredError, GislProbePendingError, GislAuthError, GislUploadCapExceededError, GislMultipartPartError, GislMultipartPartCountError,
13
+ // SDK-3 (Wb6ebOMM) — typed errors for the 3 resume-support endpoints.
14
+ GislMultipartSessionNotFoundError, GislMultipartSessionOwnershipError, GislMultipartSessionAuthRequiredError, GislTimeoutError, GislAbortError,
15
+ // FF2b / tywwynmN — transport-level failure (mirrors PHP GislNetworkError);
16
+ // raised by the file-first HttpDownloader when an output URL cannot be read.
17
+ GislNetworkError,
18
+ // T1 / wVU4xHx3 — local config-error tree (pre-I/O; sibling of GislApiError).
19
+ GislConfigError, GislMissingCredentialsError, GislFeatureRequiresAuthError,
20
+ // T3 / cuecCmb5 — merge-compose local validation errors.
21
+ GislUndeclaredAssetError, GislUnusedAssetError, GislPerInputOptionsNotSupportedError,
22
+ // T6 / aDR1jnyZ — chain-cardinality validation (dormant until chain
23
+ // methods on OperationBuilder ship; type + audit registration land
24
+ // here so the future chain-method PR is a pure addition).
25
+ GislChainCardinalityMismatchError,
26
+ // FF1 / 3BIxEnfR — file-first result sink errors.
27
+ GislNoSuchKeyError, GislSinkError,
28
+ // FF5a / Ao8RPVxD — thrown by the file-first Handle.result() when the
29
+ // workflow is not yet terminal (the non-blocking accessor).
30
+ GislResultNotReadyError, } from './errors.js';
31
+ // File-first result surface (FF1 / 3BIxEnfR) — coexists with the
32
+ // operation-first `Result`/`Artifact` until FF6 removes the old layer.
33
+ export { RunResult } from './file-first.js';
34
+ // File-first builder (FF2a / MfV0PDok) — `client.file(path).op()...` lowering.
35
+ export { Recipe, fileInput } from './file-first.js';
36
+ // File-first homogeneous fan-out (FF3a / u0hBt6fl) — `client.files([...]).op()...`
37
+ // applies one recipe to many inputs in one workflow; run() partitions per input.
38
+ // `projectMultiJobToRunResult` is intentionally NOT re-exported — it is the
39
+ // @internal per-job producer consumed only by FilesRecipe.run (codex).
40
+ export { FilesRecipe } from './file-first.js';
41
+ // File-first N→1 combine (FF3b / IE29x9QL) — `client.files([...]).merge(opts?)`
42
+ // returns a single-output MergedRecipe you chain post-combine ops on, then
43
+ // run()/submit(). Mirrors the operation-first `client.merge()` wire shape.
44
+ export { MergedRecipe } from './file-first.js';
45
+ // File-first N→1 bundle (FF3b) — `client.files([...]).archive(opts?)` returns a
46
+ // terminal ArchivedRecipe (zip / tar.gz; no post-bundle chain), then run()/submit().
47
+ export { ArchivedRecipe } from './file-first.js';
48
+ // `HttpDownloader` (Node streaming downloader) is re-exported from the Node-only
49
+ // entry `index.ts`, NOT here — it statically imports node:fs/node:stream.
50
+ // `projectDownloadsToRunResult` is intentionally NOT re-exported here — it is an
51
+ // @internal helper shared between `file-first.ts` (Recipe.run) and `handle.ts`
52
+ // (Handle.wait/result) via direct intra-package import, not public API (codex).
53
+ // File-first Handle + StatusSnapshot (FF5a / Ao8RPVxD) — method-bearing,
54
+ // client-bound value objects. `Handle` is the return of `submit()` (no client)
55
+ // AND `client.workflow(id)` (client-bound, reattach). Exported as VALUES (the
56
+ // prior `export type { Handle }` is replaced) because `Handle` is now a class.
57
+ export { Handle, StatusSnapshot } from './handle.js';
58
+ // Ergonomic-layer entrypoint (T1 / wVU4xHx3) — `gisl.create()` factory +
59
+ // credential-chain types. `gisl.anonymous()` (public export) lands once
60
+ // the anonymous-capable operation allowlist is non-empty (plan §12).
61
+ export { gisl, create } from './gisl.js';
62
+ // Ergonomic preset defaults (T4a / VhIj4S7T) — typed leaf DTOs + immutable
63
+ // `PresetDefaults` builder + `presetDefaults()` factory + ergonomic enum
64
+ // re-exports. Resolver wiring (T4b) consumes `PresetDefaults.cellFor()`.
65
+ export { presetDefaults, PresetDefaults, ImageCompressPresetOptions, AudioCompressPresetOptions, VideoCompressPresetOptions, DocumentPdfCompressPresetOptions, DocumentOfficeCompressPresetOptions, DocumentOdfCompressPresetOptions, DocumentEpubCompressPresetOptions, OptimizeFor, ImageMode, ImageMetadataPolicy, IccProfilePolicy, ImageFormat, VideoCodec, VideoPreset, VideoFit, AudioBitrate, AudioCodec, AudioSampleRate, PdfProfile, PdfColorspace, } from './ergonomic/presets/index.js';
66
+ // Operation-builder surface (T2 / xVDTIm8C) — `client.compress/convert/thumbnail`
67
+ // returns an `OperationBuilder`; `.run()` projects to a flat `Result` /
68
+ // `.submit({webhook})` returns a `Handle`. Progress events are the
69
+ // SDK-synthesised `{phase:'upload'|'processing', ...}` discriminated union.
70
+ export { OperationBuilder, MapEachBuilder } from './builder.js';
71
+ export { MergeBuilder, asset, handle, clip } from './merge.js';
72
+ // T4b — preset resolver public surface (PRESET_VERSION constant + types).
73
+ export { PRESET_VERSION, resolveCompressOptions } from './ergonomic/preset_resolver.js';
74
+ export { AudioWatermarkDecodeRequestMethodHintEnum, AudioWatermarkDecodeResponseMethodEnum,
75
+ // OperationInputModel — value-bearing enum (`single` | `multi`).
76
+ // Surfaced on OperationSchemaDefinition.inputModel so form-renderers
77
+ // can decide whether to render a single-file picker or a multi-file
78
+ // input list.
79
+ OperationInputModel, ExternalImportRequestProviderHintEnum, ContactSubject, CreditTransactionSourceBucket, UploadProbeStatus, UploadProbeProcessingClass, WorkflowCancelBillingEffect, WorkflowPauseRequiredAction, WorkflowStatus, WarningType, WorkflowWarningSeverity, OperationType, SseEventType, CallbackEventType, OperationStatus, JobStatus, JobInputV2RoleEnum,
80
+ // Error-payload discriminator enums — pair with the typed payload
81
+ // types above for narrowing inside `error instanceof Gisl<X>Error`
82
+ // branches.
83
+ AuthErrorType, TierRestrictionKind, BalanceExhaustedResponseRequiredActionEnum, ProcessingClassReason, DeliveryPlanReason,
84
+ // UserTier + ProcessingClass — value-bearing forms (typeof const +
85
+ // type alias). Sourced from openapi so consumers can do
86
+ // `Object.values(UserTier)` for tier dropdowns or
87
+ // `if (tier === UserTier.enterprise)` for narrowing typed error
88
+ // payloads. The operations metadata-types versions are pure type
89
+ // aliases (no runtime value); the openapi versions carry both the
90
+ // string-union type and a const map. Per audit follow-up.
91
+ UserTier, ProcessingClass, } from '@giveitsmaller/contracts/openapi';
92
+ export { ImageWatermarkImageAnchor, ImageWatermarkImageGifAnchor, TextWatermarkImageAnchor, TextWatermarkImageFontFamily, TextWatermarkImageWatermarkMode, AudioOverlayAudioMode, AudioOverlayVideoMode, AudioOverlayVideoNoAudioTrackBehaviour, AudioWatermarkAudioMethod, AudioWatermarkAudioRobustness, AudioWatermarkAudioDensity, AudioWatermarkVideoMethod, AudioWatermarkVideoRobustness, AudioWatermarkVideoDensity,
93
+ // New planned operation enums — contracts v2.15 (AJCLLGaG).
94
+ AudioToVideoAudioOutputResolution, AudioToVideoAudioImageFit, AudioToVideoAudioOutputFormat, VideoWatermarkVideoAnchor, VideoTextWatermarkVideoFontFamily, VideoTextWatermarkVideoWatermarkMode, VideoTextWatermarkVideoAnchor, SplitImageGifOutputFormat, SplitDocumentPdfMode, SplitAudioMode, SplitAudioPrecision, SplitVideoMode, SplitVideoPrecision, } from '@giveitsmaller/contracts/operations';
95
+ // Per-operation metadata sidecars. Inspect `availability`,
96
+ // `required_tier`, per-value gating, mime-group availability and
97
+ // per-feature flags before submitting a workflow — the API will
98
+ // otherwise reject planned ops with `feature_not_available` (422,
99
+ // surfaces as `GislFeatureNotAvailableError`).
100
+ export { archiveMetadata, audioOverlayMetadata, audioWatermarkMetadata, compressMetadata, convertMetadata, customLumaMetadata, imageWatermarkMetadata, mergeMetadata, textWatermarkMetadata, thumbnailMetadata,
101
+ // New planned operation metadata sidecars — contracts v2.15 (AJCLLGaG).
102
+ audioToVideoMetadata, videoWatermarkMetadata, videoTextWatermarkMetadata, splitMetadata, } from '@giveitsmaller/contracts/operations';
package/dist/index.d.ts CHANGED
@@ -1,32 +1,3 @@
1
- export { GislClient, DEFAULT_MULTIPART_FIRST_CHUNK_SIZE } from './client.js';
1
+ export * from './index.core.js';
2
2
  export { verifyWebhook } from './webhook.js';
3
- export { parseSseStream } from './sse.js';
4
- export type { CreditsUsageOptions, GetSchemaOptions, GetSchemaResult, PreflightClipError, PreflightClipsResult, GislClientConfig, GislSseEvent, UploadOptions, WaitOptions, WorkflowCreatePayload, OperationDef, WorkflowSourcePayload, UploadSourcePayload, JobOutputSourcePayload, ExternalImportSourcePayload, ConnectionSourcePayload, JobInputV2Payload, JobDefinitionPayload, ExternalDestinationPayload, DeliveryPayload, DeliveryModePayload, DeliveryBundleFormatPayload, DeliverySelectionPayload, DeliverySelectionTypePayload, DeliveryOutputRefPayload, WorkflowProcessingPayload, ProcessingClassHintPayload, MultipartCheckpointState, _Sdk3HandCodedUploadedPart, _Sdk3HandCodedMultipartStatusResult, _Sdk3HandCodedPresignedPart, _Sdk3HandCodedPresignPartsResult, _Sdk3HandCodedKeepaliveResult, } from './types.js';
5
- export { uploadSource, jobOutputSource, externalImportSource, connectionSource, } from './types.js';
6
- export type { GislConfigErrorMetadata } from './errors.js';
7
- export { GislError, GislApiError, GislValidationError, GislBalanceExhaustedError, GislTierRestrictedError, GislFeatureTierRestrictedError, GislFeatureNotAvailableError, GislWorkflowExpiredError, GislProbePendingError, GislAuthError, GislUploadCapExceededError, GislMultipartPartError, GislMultipartPartCountError, GislMultipartSessionNotFoundError, GislMultipartSessionOwnershipError, GislMultipartSessionAuthRequiredError, GislTimeoutError, GislAbortError, GislNetworkError, GislConfigError, GislMissingCredentialsError, GislFeatureRequiresAuthError, GislUndeclaredAssetError, GislUnusedAssetError, GislPerInputOptionsNotSupportedError, GislChainCardinalityMismatchError, GislNoSuchKeyError, GislSinkError, } from './errors.js';
8
- export type { GislApiErrorOptions, GislUploadCapKind } from './errors.js';
9
- export { RunResult } from './file-first.js';
10
- export type { OutputFile, ItemResult, ItemFailure, Manifest, Downloader, } from './file-first.js';
11
- export { Recipe, fileInput } from './file-first.js';
12
- export type { FileInput } from './file-first.js';
13
3
  export { HttpDownloader } from './http-downloader.js';
14
- export { gisl, create } from './gisl.js';
15
- export type { GislCreateOptions, Environment, ErgonomicClient } from './gisl.js';
16
- export { presetDefaults, PresetDefaults, type PresetMedia, type PresetOp, type AnyPresetOptions, ImageCompressPresetOptions, type ImageCompressPresetOptionsInput, AudioCompressPresetOptions, type AudioCompressPresetOptionsInput, VideoCompressPresetOptions, type VideoCompressPresetOptionsInput, DocumentPdfCompressPresetOptions, type DocumentPdfCompressPresetOptionsInput, DocumentOfficeCompressPresetOptions, type DocumentOfficeCompressPresetOptionsInput, DocumentOdfCompressPresetOptions, type DocumentOdfCompressPresetOptionsInput, DocumentEpubCompressPresetOptions, type DocumentEpubCompressPresetOptionsInput, OptimizeFor, ImageMode, ImageFit, ImageMetadataPolicy, IccProfilePolicy, ImageFormat, VideoCodec, VideoPreset, VideoFit, AudioBitrate, AudioCodec, AudioSampleRate, PdfProfile, PdfColorspace, } from './ergonomic/presets/index.js';
17
- export { OperationBuilder, MapEachBuilder } from './builder.js';
18
- export { MergeBuilder, asset, handle, clip } from './merge.js';
19
- export type { Asset, ClipEntry, ClipOptions, MergeMediaKind, MergeOptions, SequenceEntry, } from './merge.js';
20
- export type { Artifact, ArtifactRef, Handle, JobBreakdown, OperationBreakdown, ProcessingProgressEvent, ProgressEvent, ResolvedOptions, ResolvedOptionsSources, Result, RunOptions, SubmitOptions, UploadProgressEvent, } from './builder.js';
21
- export { PRESET_VERSION, resolveCompressOptions } from './ergonomic/preset_resolver.js';
22
- export type { ResolveCompressOptionsInput, ResolveCompressOptionsOutput, } from './ergonomic/preset_resolver.js';
23
- export type { AudioWatermarkDecodeRequest, AudioWatermarkDecodeResponse, ContactRequest, CreditsBalanceResponse, CreditsUsageResponse, CreditTransaction, ExternalImportCreatedResponse, ExternalImportRequest, LoginUserRequest, LoginUser200ResponseData, LoginUser200ResponseDataUser, WorkflowCancelResponse, WorkflowResumeResponse, WorkflowPausedDetail, WorkflowPausedDetailLinks, UploadResponse, UploadConstraintsApplied, UploadProbeResponse, UploadProbeMediaMetadata, MultipartInitiateRequestMetadataHint, WorkflowCreateResponse, WorkflowStatusResponse, WorkflowDownloadResponse, MetadataResponse, MetadataResponseDimensions, MetadataResponseExif, MetadataResponseExifGps, OperationsSchemaResponse, OperationSchemaDefinition, MimeGroupSchema, OptionSchema, PerValueAvailabilityEntry, PerRoleCardinalityEntry, RetryResponse, JobDownload, OperationDownload, WebhookPayload, WebhookOperationContext, JobResponse, OperationResponse, OperationResult, OperationResultMetrics, ExternalDestination, Delivery, DeliveryPlan, DeliveryPlanOutput, WorkflowProcessing, ProcessingPlan, ProcessingPlanJob, WorkflowEdge, WorkflowWarning, JobInputV2, WorkflowSource, UploadSource, JobOutputSource, ConnectionSource, ExternalImportToken, BalanceExhaustedResponse, BalanceExhaustedResponseAllOfLinks, TierRestrictionResponse, FeatureTierRestrictedResponse, FeatureNotAvailableResponse, FeatureViolation, WorkflowExpiredResponse, ProbePendingResponse, AuthErrorResponse, } from '@giveitsmaller/contracts/openapi';
24
- export { AudioWatermarkDecodeRequestMethodHintEnum, AudioWatermarkDecodeResponseMethodEnum, OperationInputModel, ExternalImportRequestProviderHintEnum, ContactSubject, CreditTransactionSourceBucket, UploadProbeStatus, UploadProbeProcessingClass, WorkflowCancelBillingEffect, WorkflowPauseRequiredAction, WorkflowStatus, WarningType, WorkflowWarningSeverity, OperationType, SseEventType, CallbackEventType, OperationStatus, JobStatus, JobInputV2RoleEnum, AuthErrorType, TierRestrictionKind, BalanceExhaustedResponseRequiredActionEnum, ProcessingClassReason, DeliveryPlanReason, UserTier, ProcessingClass, } from '@giveitsmaller/contracts/openapi';
25
- export type { SseOperationProgressData, SseOperationCompletedData, SseOperationFailedData, SseJobCompletedData, SseJobFailedData, SseWorkflowTerminalData, } from '@giveitsmaller/contracts/openapi';
26
- export type { MultiOutputCompletion, PageIndexed, PositionIndexed, Unindexed, } from '@giveitsmaller/contracts/asyncapi';
27
- import type { MultiOutputCompletion as _MultiOutputCompletion } from '@giveitsmaller/contracts/asyncapi';
28
- export type OperationResultOutputEntry = _MultiOutputCompletion['outputs'][number];
29
- export type { CompressImageOptions, CompressVideoOptions, CompressAudioOptions, CompressDocumentPdfOptions, CompressDocumentOfficeOptions, CompressDocumentOdfOptions, CompressDocumentEpubOptions, ThumbnailImageOptions, ThumbnailVideoOptions, ThumbnailDocumentOptions, ConvertImageOptions, ConvertVideoOptions, ConvertAudioOptions, ConvertDocumentPdfOptions, MergeImageOptions, MergeVideoOptions, MergeVideoPerInputOptions, MergeAudioOptions, MergeAudioPerInputOptions, ArchiveOptions, ImageWatermarkImageOptions, ImageWatermarkImageGifOptions, TextWatermarkImageOptions, CustomLumaVideoOptions, AudioOverlayAudioOptions, AudioOverlayVideoOptions, AudioWatermarkAudioOptions, AudioWatermarkVideoOptions, AudioToVideoAudioOptions, VideoWatermarkVideoOptions, VideoTextWatermarkVideoOptions, SplitImageGifOptions, SplitDocumentPdfOptions, SplitAudioOptions, SplitVideoOptions, } from '@giveitsmaller/contracts/operations';
30
- export { ImageWatermarkImageAnchor, ImageWatermarkImageGifAnchor, TextWatermarkImageAnchor, TextWatermarkImageFontFamily, TextWatermarkImageWatermarkMode, AudioOverlayAudioMode, AudioOverlayVideoMode, AudioOverlayVideoNoAudioTrackBehaviour, AudioWatermarkAudioMethod, AudioWatermarkAudioRobustness, AudioWatermarkAudioDensity, AudioWatermarkVideoMethod, AudioWatermarkVideoRobustness, AudioWatermarkVideoDensity, AudioToVideoAudioOutputResolution, AudioToVideoAudioImageFit, AudioToVideoAudioOutputFormat, VideoWatermarkVideoAnchor, VideoTextWatermarkVideoFontFamily, VideoTextWatermarkVideoWatermarkMode, VideoTextWatermarkVideoAnchor, SplitImageGifOutputFormat, SplitDocumentPdfMode, SplitAudioMode, SplitAudioPrecision, SplitVideoMode, SplitVideoPrecision, } from '@giveitsmaller/contracts/operations';
31
- export { archiveMetadata, audioOverlayMetadata, audioWatermarkMetadata, compressMetadata, convertMetadata, customLumaMetadata, imageWatermarkMetadata, mergeMetadata, textWatermarkMetadata, thumbnailMetadata, audioToVideoMetadata, videoWatermarkMetadata, videoTextWatermarkMetadata, splitMetadata, } from '@giveitsmaller/contracts/operations';
32
- export type { OperationMetadata, AvailabilityValue, AvailabilityEntry, FeatureEntry, MimeGroupMetadata, OptionMetadata, ProcessingClassConstraints, } from '@giveitsmaller/contracts/operations';
package/dist/index.js CHANGED
@@ -1,75 +1,11 @@
1
- // SDK classes and functions
2
- export { GislClient, DEFAULT_MULTIPART_FIRST_CHUNK_SIZE } from './client.js';
1
+ // Node entry point — the package's `default` exports condition (and the
2
+ // historical single entry). Re-exports the browser-safe shared surface
3
+ // (`index.core.ts`) PLUS the Node-only symbols that statically import Node
4
+ // built-ins: `verifyWebhook` (node:crypto) and `HttpDownloader` (node:fs).
5
+ //
6
+ // The browser entry (`index.browser.ts`, selected by the `browser` exports
7
+ // condition) re-exports ONLY the core, omitting these two — so the browser
8
+ // surface is a strict subset of this one by construction and cannot drift.
9
+ export * from './index.core.js';
3
10
  export { verifyWebhook } from './webhook.js';
4
- export { parseSseStream } from './sse.js';
5
- export { uploadSource, jobOutputSource, externalImportSource, connectionSource, } from './types.js';
6
- // Errors
7
- export { GislError, GislApiError, GislValidationError, GislBalanceExhaustedError, GislTierRestrictedError, GislFeatureTierRestrictedError, GislFeatureNotAvailableError, GislWorkflowExpiredError, GislProbePendingError, GislAuthError, GislUploadCapExceededError, GislMultipartPartError, GislMultipartPartCountError,
8
- // SDK-3 (Wb6ebOMM) — typed errors for the 3 resume-support endpoints.
9
- GislMultipartSessionNotFoundError, GislMultipartSessionOwnershipError, GislMultipartSessionAuthRequiredError, GislTimeoutError, GislAbortError,
10
- // FF2b / tywwynmN — transport-level failure (mirrors PHP GislNetworkError);
11
- // raised by the file-first HttpDownloader when an output URL cannot be read.
12
- GislNetworkError,
13
- // T1 / wVU4xHx3 — local config-error tree (pre-I/O; sibling of GislApiError).
14
- GislConfigError, GislMissingCredentialsError, GislFeatureRequiresAuthError,
15
- // T3 / cuecCmb5 — merge-compose local validation errors.
16
- GislUndeclaredAssetError, GislUnusedAssetError, GislPerInputOptionsNotSupportedError,
17
- // T6 / aDR1jnyZ — chain-cardinality validation (dormant until chain
18
- // methods on OperationBuilder ship; type + audit registration land
19
- // here so the future chain-method PR is a pure addition).
20
- GislChainCardinalityMismatchError,
21
- // FF1 / 3BIxEnfR — file-first result sink errors.
22
- GislNoSuchKeyError, GislSinkError, } from './errors.js';
23
- // File-first result surface (FF1 / 3BIxEnfR) — coexists with the
24
- // operation-first `Result`/`Artifact` until FF6 removes the old layer.
25
- export { RunResult } from './file-first.js';
26
- // File-first builder (FF2a / MfV0PDok) — `client.file(path).op()...` lowering.
27
- export { Recipe, fileInput } from './file-first.js';
28
- // File-first execution (FF2b / MfV0PDok) — Node streaming downloader bound by
29
- // `Recipe.run()` to write pre-signed output URLs to disk.
30
11
  export { HttpDownloader } from './http-downloader.js';
31
- // Ergonomic-layer entrypoint (T1 / wVU4xHx3) — `gisl.create()` factory +
32
- // credential-chain types. `gisl.anonymous()` (public export) lands once
33
- // the anonymous-capable operation allowlist is non-empty (plan §12).
34
- export { gisl, create } from './gisl.js';
35
- // Ergonomic preset defaults (T4a / VhIj4S7T) — typed leaf DTOs + immutable
36
- // `PresetDefaults` builder + `presetDefaults()` factory + ergonomic enum
37
- // re-exports. Resolver wiring (T4b) consumes `PresetDefaults.cellFor()`.
38
- export { presetDefaults, PresetDefaults, ImageCompressPresetOptions, AudioCompressPresetOptions, VideoCompressPresetOptions, DocumentPdfCompressPresetOptions, DocumentOfficeCompressPresetOptions, DocumentOdfCompressPresetOptions, DocumentEpubCompressPresetOptions, OptimizeFor, ImageMode, ImageFit, ImageMetadataPolicy, IccProfilePolicy, ImageFormat, VideoCodec, VideoPreset, VideoFit, AudioBitrate, AudioCodec, AudioSampleRate, PdfProfile, PdfColorspace, } from './ergonomic/presets/index.js';
39
- // Operation-builder surface (T2 / xVDTIm8C) — `client.compress/convert/thumbnail`
40
- // returns an `OperationBuilder`; `.run()` projects to a flat `Result` /
41
- // `.submit({webhook})` returns a `Handle`. Progress events are the
42
- // SDK-synthesised `{phase:'upload'|'processing', ...}` discriminated union.
43
- export { OperationBuilder, MapEachBuilder } from './builder.js';
44
- export { MergeBuilder, asset, handle, clip } from './merge.js';
45
- // T4b — preset resolver public surface (PRESET_VERSION constant + types).
46
- export { PRESET_VERSION, resolveCompressOptions } from './ergonomic/preset_resolver.js';
47
- export { AudioWatermarkDecodeRequestMethodHintEnum, AudioWatermarkDecodeResponseMethodEnum,
48
- // OperationInputModel — value-bearing enum (`single` | `multi`).
49
- // Surfaced on OperationSchemaDefinition.inputModel so form-renderers
50
- // can decide whether to render a single-file picker or a multi-file
51
- // input list.
52
- OperationInputModel, ExternalImportRequestProviderHintEnum, ContactSubject, CreditTransactionSourceBucket, UploadProbeStatus, UploadProbeProcessingClass, WorkflowCancelBillingEffect, WorkflowPauseRequiredAction, WorkflowStatus, WarningType, WorkflowWarningSeverity, OperationType, SseEventType, CallbackEventType, OperationStatus, JobStatus, JobInputV2RoleEnum,
53
- // Error-payload discriminator enums — pair with the typed payload
54
- // types above for narrowing inside `error instanceof Gisl<X>Error`
55
- // branches.
56
- AuthErrorType, TierRestrictionKind, BalanceExhaustedResponseRequiredActionEnum, ProcessingClassReason, DeliveryPlanReason,
57
- // UserTier + ProcessingClass — value-bearing forms (typeof const +
58
- // type alias). Sourced from openapi so consumers can do
59
- // `Object.values(UserTier)` for tier dropdowns or
60
- // `if (tier === UserTier.enterprise)` for narrowing typed error
61
- // payloads. The operations metadata-types versions are pure type
62
- // aliases (no runtime value); the openapi versions carry both the
63
- // string-union type and a const map. Per audit follow-up.
64
- UserTier, ProcessingClass, } from '@giveitsmaller/contracts/openapi';
65
- export { ImageWatermarkImageAnchor, ImageWatermarkImageGifAnchor, TextWatermarkImageAnchor, TextWatermarkImageFontFamily, TextWatermarkImageWatermarkMode, AudioOverlayAudioMode, AudioOverlayVideoMode, AudioOverlayVideoNoAudioTrackBehaviour, AudioWatermarkAudioMethod, AudioWatermarkAudioRobustness, AudioWatermarkAudioDensity, AudioWatermarkVideoMethod, AudioWatermarkVideoRobustness, AudioWatermarkVideoDensity,
66
- // New planned operation enums — contracts v2.15 (AJCLLGaG).
67
- AudioToVideoAudioOutputResolution, AudioToVideoAudioImageFit, AudioToVideoAudioOutputFormat, VideoWatermarkVideoAnchor, VideoTextWatermarkVideoFontFamily, VideoTextWatermarkVideoWatermarkMode, VideoTextWatermarkVideoAnchor, SplitImageGifOutputFormat, SplitDocumentPdfMode, SplitAudioMode, SplitAudioPrecision, SplitVideoMode, SplitVideoPrecision, } from '@giveitsmaller/contracts/operations';
68
- // Per-operation metadata sidecars. Inspect `availability`,
69
- // `required_tier`, per-value gating, mime-group availability and
70
- // per-feature flags before submitting a workflow — the API will
71
- // otherwise reject planned ops with `feature_not_available` (422,
72
- // surfaces as `GislFeatureNotAvailableError`).
73
- export { archiveMetadata, audioOverlayMetadata, audioWatermarkMetadata, compressMetadata, convertMetadata, customLumaMetadata, imageWatermarkMetadata, mergeMetadata, textWatermarkMetadata, thumbnailMetadata,
74
- // New planned operation metadata sidecars — contracts v2.15 (AJCLLGaG).
75
- audioToVideoMetadata, videoWatermarkMetadata, videoTextWatermarkMetadata, splitMetadata, } from '@giveitsmaller/contracts/operations';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Browser-safe {@link Downloader} that defers loading the Node-only
3
+ * {@link HttpDownloader} until a sink (`downloadTo` / `toFile`) actually runs.
4
+ *
5
+ * `HttpDownloader` statically imports `node:fs` / `node:stream`
6
+ * (`http-downloader.ts`). Binding it eagerly in `run()` would drag those
7
+ * built-ins into the ergonomic static import graph, breaking browser bundles
8
+ * even though the browser run path never writes to disk. This wrapper is what
9
+ * `run()` / `Handle` bind instead: it is constructed synchronously (no
10
+ * async ripple through the parity-pinned `RunResult` / `Handle`), and the
11
+ * `await import('./http-downloader.js')` only fires when a caller invokes a
12
+ * sink. A browser caller that reads `RunResult.artifacts[].url` never triggers
13
+ * the dynamic import, so `node:fs` stays out of the main browser chunk
14
+ * (bundlers code-split dynamic imports).
15
+ */
16
+ import type { Downloader } from './file-first.js';
17
+ export declare class LazyHttpDownloader implements Downloader {
18
+ downloadTo(url: string, destPath: string): Promise<void>;
19
+ }
@@ -0,0 +1,19 @@
1
+ import { GislSinkError } from './errors.js';
2
+ export class LazyHttpDownloader {
3
+ async downloadTo(url, destPath) {
4
+ // In a browser there is no filesystem — fail with the same clean
5
+ // `downloader_unavailable` GislSinkError a downloader-less RunResult throws,
6
+ // rather than a confusing module-load error from importing node:fs. Output
7
+ // is reachable via RunResult.artifacts[].url; fetch it in the browser.
8
+ if (typeof process === 'undefined' || process.versions?.node === undefined) {
9
+ throw new GislSinkError('Output sinks (downloadTo/toFile) require Node.js. In a browser, read ' +
10
+ 'RunResult.url / RunResult.artifacts[].url and fetch it instead.', { reason: 'downloader_unavailable' });
11
+ }
12
+ // Magic comments keep bundlers (webpack/Vite) from pulling the Node-only
13
+ // http-downloader (node:fs/node:stream) into a browser build — they leave
14
+ // this as a literal runtime import that only Node ever reaches.
15
+ const { HttpDownloader } = await import(
16
+ /* webpackIgnore: true */ /* @vite-ignore */ './http-downloader.js');
17
+ return new HttpDownloader().downloadTo(url, destPath);
18
+ }
19
+ }
package/dist/merge.d.ts CHANGED
@@ -26,7 +26,8 @@
26
26
  * assets both fail fast so the caller saves bandwidth on typo'd composes.
27
27
  */
28
28
  import type { GislClient } from './client.js';
29
- import { type Handle, type Result, type RunOptions, type SubmitOptions } from './builder.js';
29
+ import { type Result, type RunOptions, type SubmitOptions } from './builder.js';
30
+ import { Handle } from './handle.js';
30
31
  /**
31
32
  * A declared merge asset. `path` carries a string or Blob (deduped by
32
33
  * normalised source key); `handle` wraps an already-uploaded file (deduped
@@ -140,3 +141,14 @@ export declare class MergeBuilder {
140
141
  private opOptionsForResolved;
141
142
  private awaitTerminal;
142
143
  }
144
+ /**
145
+ * Project the merge-level {@link MergeOptions} into the per-media wire
146
+ * allowlist. Exported so the file-first `MergedRecipe`
147
+ * (`files([...]).merge(...)`) lowers identically to this operation-first
148
+ * `client.merge(...)` builder — one allowlist, no drift. Mirrors the PHP
149
+ * `MergeBuilder::wireMergeOptions()` public-static seam.
150
+ *
151
+ * @internal Not re-exported from `index.ts`; shared between the two merge
152
+ * surfaces only.
153
+ */
154
+ export declare function wireMergeOptions(opts: MergeOptions, mediaKind: MergeMediaKind): Record<string, unknown>;