@sprigr/apps-app-sdk 0.25.0 → 0.27.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.
- package/dist/index.d.ts +120 -1
- package/dist/index.js +48 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1700,6 +1700,51 @@ interface AppApprovalEnvelope {
|
|
|
1700
1700
|
* wrappers.
|
|
1701
1701
|
*/
|
|
1702
1702
|
unattended?: 'proceed';
|
|
1703
|
+
/**
|
|
1704
|
+
* Lay the card out as the thing being sent: an email with its header and
|
|
1705
|
+
* rendered body, an SMS, a document's rows (sprigr-team decision 0216).
|
|
1706
|
+
* You bind slots to YOUR TOOL'S ARGUMENT NAMES (or dotted paths such as
|
|
1707
|
+
* `input.body` for a dispatcher), and the platform fills them from the
|
|
1708
|
+
* exact arguments it replays on the tap, so the card cannot show one email
|
|
1709
|
+
* while another is sent. Build it with `emailPreview` / `smsPreview` /
|
|
1710
|
+
* `fieldsPreview`. Keep writing `question` and `summary`: a platform
|
|
1711
|
+
* without decision 0216, or a preview that resolves to nothing, falls
|
|
1712
|
+
* back to them.
|
|
1713
|
+
*/
|
|
1714
|
+
preview?: ApprovalPreviewSpec;
|
|
1715
|
+
}
|
|
1716
|
+
/** A slot bound to an argument name or dotted path, or a value you state. */
|
|
1717
|
+
type ApprovalPreviewSlot = string | {
|
|
1718
|
+
value: string;
|
|
1719
|
+
};
|
|
1720
|
+
/** Small facts shown as tags on the card. */
|
|
1721
|
+
type ApprovalPreviewFact = 'irreversible' | 'costs_credits' | 'no_signature';
|
|
1722
|
+
/** The `_approval.preview` an app declares (sprigr-team decision 0216). */
|
|
1723
|
+
interface ApprovalPreviewSpec {
|
|
1724
|
+
kind: 'email' | 'sms' | 'document' | 'calendar' | 'fields';
|
|
1725
|
+
from?: ApprovalPreviewSlot;
|
|
1726
|
+
to?: ApprovalPreviewSlot;
|
|
1727
|
+
cc?: ApprovalPreviewSlot;
|
|
1728
|
+
bcc?: ApprovalPreviewSlot;
|
|
1729
|
+
subject?: ApprovalPreviewSlot;
|
|
1730
|
+
/** Always an argument, never a stated value: the body must be what is sent. */
|
|
1731
|
+
/**
|
|
1732
|
+
* `format: 'auto'` declares that the tool sends the body through
|
|
1733
|
+
* `emailBodyHtml`: the card shows a body with HTML markup as HTML and plain
|
|
1734
|
+
* text as text. A platform that predates 'auto' reads it as 'html'.
|
|
1735
|
+
*/
|
|
1736
|
+
body?: {
|
|
1737
|
+
arg: string;
|
|
1738
|
+
format: 'html' | 'text' | 'auto';
|
|
1739
|
+
};
|
|
1740
|
+
/** Argument holding an array of attachment names or `{ name, size }`. */
|
|
1741
|
+
attachments?: string;
|
|
1742
|
+
sendAt?: ApprovalPreviewSlot;
|
|
1743
|
+
fields?: Array<{
|
|
1744
|
+
label: string;
|
|
1745
|
+
from: ApprovalPreviewSlot;
|
|
1746
|
+
}>;
|
|
1747
|
+
facts?: ApprovalPreviewFact[];
|
|
1703
1748
|
}
|
|
1704
1749
|
/**
|
|
1705
1750
|
* Platform-stamped marker telling an app that a human approved this call. The
|
|
@@ -1789,6 +1834,56 @@ declare const APPROVAL_PREVIEW_MAX = 600;
|
|
|
1789
1834
|
*/
|
|
1790
1835
|
declare function approvalPreview(value: unknown, max?: number): string;
|
|
1791
1836
|
|
|
1837
|
+
/**
|
|
1838
|
+
* Builders for `_approval.preview` (sprigr-team decision 0216). They return
|
|
1839
|
+
* plain objects; the point is the types and the defaults, so a send tool
|
|
1840
|
+
* declares its card in one line:
|
|
1841
|
+
*
|
|
1842
|
+
* describe: (_t, a, mailbox) => ({
|
|
1843
|
+
* question: `Send an email to ${a.to}?`, header: 'Outlook',
|
|
1844
|
+
* preview: emailPreview({ from: { value: mailbox }, to: 'to', subject: 'subject', body: 'body' }),
|
|
1845
|
+
* })
|
|
1846
|
+
*
|
|
1847
|
+
* Every string slot is the NAME of one of your tool's arguments (or a dotted
|
|
1848
|
+
* path such as `input.body`). The platform reads the value from the exact
|
|
1849
|
+
* arguments it replays when the person taps, never from anything you send
|
|
1850
|
+
* here, so bind the argument you actually send.
|
|
1851
|
+
*/
|
|
1852
|
+
|
|
1853
|
+
interface EmailPreviewInput {
|
|
1854
|
+
from?: ApprovalPreviewSlot;
|
|
1855
|
+
to: ApprovalPreviewSlot;
|
|
1856
|
+
cc?: ApprovalPreviewSlot;
|
|
1857
|
+
bcc?: ApprovalPreviewSlot;
|
|
1858
|
+
subject?: ApprovalPreviewSlot;
|
|
1859
|
+
/** Argument name of the body. */
|
|
1860
|
+
body: string;
|
|
1861
|
+
/**
|
|
1862
|
+
* Defaults to 'html'. Use 'auto' when the tool sends the body through
|
|
1863
|
+
* `emailBodyHtml`, so a plain-text body shows on the card with its lines.
|
|
1864
|
+
*/
|
|
1865
|
+
bodyFormat?: 'html' | 'text' | 'auto';
|
|
1866
|
+
attachments?: string;
|
|
1867
|
+
sendAt?: ApprovalPreviewSlot;
|
|
1868
|
+
/** Defaults to ['irreversible']: a sent email cannot be recalled. */
|
|
1869
|
+
facts?: ApprovalPreviewFact[];
|
|
1870
|
+
}
|
|
1871
|
+
declare function emailPreview(input: EmailPreviewInput): ApprovalPreviewSpec;
|
|
1872
|
+
interface SmsPreviewInput {
|
|
1873
|
+
from?: ApprovalPreviewSlot;
|
|
1874
|
+
to: ApprovalPreviewSlot;
|
|
1875
|
+
/** Argument name of the message text. */
|
|
1876
|
+
body: string;
|
|
1877
|
+
/** Defaults to ['irreversible']. Add 'costs_credits' when it does. */
|
|
1878
|
+
facts?: ApprovalPreviewFact[];
|
|
1879
|
+
}
|
|
1880
|
+
declare function smsPreview(input: SmsPreviewInput): ApprovalPreviewSpec;
|
|
1881
|
+
/** Label and value rows: an invoice's number and total, an event's time. */
|
|
1882
|
+
declare function fieldsPreview(kind: 'document' | 'calendar' | 'fields', rows: Array<{
|
|
1883
|
+
label: string;
|
|
1884
|
+
from: ApprovalPreviewSlot;
|
|
1885
|
+
}>, extra?: Pick<ApprovalPreviewSpec, 'to' | 'from' | 'subject' | 'facts'>): ApprovalPreviewSpec;
|
|
1886
|
+
|
|
1792
1887
|
/**
|
|
1793
1888
|
* Thrown by `undoEnvelope` for a field the platform would reject.
|
|
1794
1889
|
*
|
|
@@ -2996,6 +3091,30 @@ interface CompanyTimezoneEnv {
|
|
|
2996
3091
|
*/
|
|
2997
3092
|
declare function getCompanyTimezone(env: CompanyTimezoneEnv | null | undefined): string | undefined;
|
|
2998
3093
|
|
|
3094
|
+
/**
|
|
3095
|
+
* Email bodies that a mail API always sends as HTML.
|
|
3096
|
+
*
|
|
3097
|
+
* Outlook (Graph `contentType: 'HTML'`) and Gmail (`text/html`) render the body
|
|
3098
|
+
* as HTML, and the agent often writes plain text with line breaks. Rendered as
|
|
3099
|
+
* HTML those breaks collapse, so a three-paragraph email arrives as one run-on
|
|
3100
|
+
* line. `emailBodyHtml` keeps a body that already carries HTML markup exactly
|
|
3101
|
+
* as written, and turns a plain-text body into HTML that shows the same lines:
|
|
3102
|
+
* a blank line starts a new paragraph, a single line break becomes `<br>`, and
|
|
3103
|
+
* `&`, `<`, `>` and `"` are escaped so the text reads as written.
|
|
3104
|
+
*
|
|
3105
|
+
* A tool that sends through this declares `emailPreview({ bodyFormat: 'auto' })`.
|
|
3106
|
+
* The platform's approval card then applies the same test (`hasHtmlMarkup`) and
|
|
3107
|
+
* shows a plain-text body as text, the way it will arrive. Keep the element
|
|
3108
|
+
* list in step with `packages/agent-core/src/approval-preview.ts` in sprigr-team.
|
|
3109
|
+
*/
|
|
3110
|
+
/** True when the body contains an HTML element tag or a doctype. */
|
|
3111
|
+
declare function hasHtmlMarkup(body: string): boolean;
|
|
3112
|
+
/**
|
|
3113
|
+
* The body to hand an HTML-only mail API. HTML input is returned unchanged;
|
|
3114
|
+
* plain text becomes paragraphs and line breaks. An empty body stays empty.
|
|
3115
|
+
*/
|
|
3116
|
+
declare function emailBodyHtml(body: string): string;
|
|
3117
|
+
|
|
2999
3118
|
/**
|
|
3000
3119
|
* @sprigr/apps-app-sdk
|
|
3001
3120
|
*
|
|
@@ -3570,4 +3689,4 @@ interface ExecutionContextLike {
|
|
|
3570
3689
|
}
|
|
3571
3690
|
type HandlerFn<TArgs, TResult> = (args: TArgs, env: Record<string, unknown>, ctx?: ExecutionContextLike) => Promise<TResult>;
|
|
3572
3691
|
|
|
3573
|
-
export { ACTOR_RETIRED_HOOK_TOOL, ACTOR_RETIRE_REASONS, APPROVAL_GRANTED_KEY, APPROVAL_PREVIEW_MAX, APP_FILES_ROOT, APP_OWNER_SEGMENT, type Actor, type ActorRetireReason, type ActorRetired, type ActorRetiredHookBody, type ActorRetiredResult, type AppApprovalEnvelope, type AppFileListItem, type AppFileUrlArgs, type AppFileUrlResult, type AppFilesEnv, type AppToolEffectsDeclaration, type AppUndoEnvelope, type ApplyPoliciesOptions, type ApprovalCoverage, type ApprovalGateOptions, type ApprovalSpec, type ArchiveOfferOptions, type ArchiveOfferRefusal, type CallerKeyResolution, type CaptureJournal, type CompanyTimezoneEnv, type ConfirmCondition, type ConfirmRule, type ConfirmationPolicy, type ConnectCompleteRequest, type ConnectCompleteResult, type D1Like, type D1PreparedStatementLike, DATA_DELETE_MAX_IDS, DATA_PARTIAL_UPDATE_PATH, DEFAULT_EMIT_TIMEOUT_MS, DEFAULT_FILE_READ_TIMEOUT_MS, DEFAULT_LOG_TIMEOUT_MS, DEFAULT_MAX_FILE_BYTES, DEFAULT_MONEY_FIELDS, DEFAULT_WRITE_PREFIXES, type DataClient, type DataIdsOpts, type DataListIdsResult, type DataTransport, type DerivePolicyOptions, type DerivedPolicy, type DispatcherApprovalGate, type DispatcherApprovalOptions, type EmitMarketplaceEventOptions, type EmitResult, type EmitTransport, type EncodeStateWithinEnvelopeOptions, type EncodedStateWithinEnvelope, type EventArgs, type ExecutionContextLike, FILE_REF_SOURCES_HELP, type FetchFileResult, type FetchWithRetryOptions, type FileRef, type FileRefContent, type FileRefEnv, FileRefError, type FileRefErrorCode, type FileRefStream, type FileRefVia, type GetAppFileResult, type HandlerFn, INBOX_SEND_CONTRACT_V1, type IdPrefixSpec, type IdSnapshot, type InboxAddress, type InboxAppendRequest, type InboxAppendResult, type InboxChannelDeclaration, type InboxFoldersRequest, type InboxFoldersResult, type InboxOwner, type InboxSendConnection, type InboxSendHandlerImpl, InboxSendRefusal, type InboxSendSupports, type InboxSendV1Args, type InboxSendV1Result, type InstallBridge, InvalidUndoEnvelopeError, type JournalRowLike, type LogToPlatformOptions, type ManifestDispatchBlock, type ManifestLike, type ManifestToolLike, type MarketplaceEventEmitOpts, type MarketplaceEventSourceIntegration, NotConnectedError, OAUTH_STATE_ENVELOPE_MAX_CHARS, type OAuthBouncerSignals, type OAuthState, type OfferUndoArgs, type PartialUpdateDataOptions, type PlatformHostEnv, type PolicyCheckInput, type PolicySource, type PurgeResult, type PutAppFileArgs, type PutAppFileResult, type PutAppFileStreamArgs, type ReadFileRefOptions, type RequireApprovalOptions, type ResolveFileRefOptions, type ResolveViewerOptions, type ResolvedFileRef, type RestoreResult, type RestoreSpec, SPRIGR_DATA_MAX_OBJECTS_PER_CALL, SPRIGR_FILE_HOSTS, SPRIGR_LOG_LEVELS, SPRIGR_LOG_LIMITS, type ScheduleArgs, type SprigrDataAggregationCell, type SprigrDataAggregationResult, type SprigrDataAggregationSpec, type SprigrDataApi, type SprigrDataImportOpts, type SprigrDataIndexOpts, type SprigrDataPartialUpdateBody, type SprigrDataPartialUpdateOpts, type SprigrDataPartialUpdateResult, type SprigrDataPatch, type SprigrDataSearchOpts, type SprigrDataSearchResult, SprigrDataValidationError, type SprigrFilesApi, type SprigrFilesApiWithEdit, type SprigrFilesCreateInput, type SprigrFilesCreateResult, type SprigrFilesEditInput, type SprigrFilesEditResult, type SprigrFilesJobResult, type SprigrFilesListItem, type SprigrFilesListResult, type SprigrInboxApi, type SprigrLogEntry, type SprigrLogFn, type SprigrLogLevel, type SprigrLogResult, SprigrLogValidationError, type SyncedAttachment, type SyncedMessage, type ToolArgs, type ToolHandler, type ToolResult, type ToolWrapperOptions, UNIT_SEP, type UndoApplyOptions, type UndoApplyResult, type UndoCaptureSpec, type UndoFidelity, VIEWER_ANONYMOUS, VIEWER_CONTEXT_HEADER, VIEWER_PLATFORM_USER_ID_HEADER, VIEWER_ROLE_HEADER, VIEWER_USER_ID_HEADER, type VerbRule, type ViewerContext, type ViewerContextFailure, type ViewerContextVerification, type ViewerEnv, WORKSPACE_FILE_HOW_TO, type WebhookArgs, type WfpBridgeEnv, type WfpEmitReply, actorKey, actorRetiredHook, actorTool, agentFileKeyFromUrl, appFileUrl, appKeyFromCallerKey, applyConfirmationPolicies, approvalHash, approvalPreview, approvalRecipients, archiveOfferRefusal, attendedFindings, base64ToBytes, buildConfirmationPolicy, buildMarketplaceWebhookUrl, buildPartialUpdateBody, bytesToBase64, callerKeyRefusal, canEmit, canLog, canPartialUpdate, checkConfirmationPolicy, commonDestructiveVerbs, connectComplete, connectDisconnect, constantTimeEqual, createMarketplaceEmitter, createToolWrappers, decodeState, defineInboxSendHandler, deleteAppFile, deleteSnapshotIds, deriveConfirmationPolicy, describeMissingBridge, dispatcherApproval, emitMarketplaceEvent, encodeState, encodeStateWithinEnvelope, fetchFileAsBase64, fetchFileBytes, fetchWithRetry, fullWarning, getAppFile, getCompanyTimezone, hmacSha256Hex, installTokenPost, isNotConnectedError, isStagingHost, listAppFiles, logToPlatform, makeDataClient, manifestIsFresh, oauthStateEnvelopeOverhead, offerUndo, openFileRef, overlaySprigr, ownerFromActorKey, parseActor, parseActorRetiredArgs, partialUpdateData, purgeIndexByPrefix, putAppFile, putAppFileStream, randomHex, readFileRef, readableStoredKey, recreatedWarning, refuseWithoutForce, requireApproval, resolveFileRef, resolveInstallBridge, resolveOAuthBouncerBase, resolveOAuthBouncerCallbackUrl, resolvePlatformWebhookBase, resolveViewerContext, resolveViewerUserId, runUndoApply, safeCapture, seq, serializeManifest, set, snapshotIndexIds, tool, undoEnvelope, validateLogEntries, validateLogEntry, verifyViewerToken, withSprigrEmitFallback, withSprigrInboxFallback, withSprigrLogFallback };
|
|
3692
|
+
export { ACTOR_RETIRED_HOOK_TOOL, ACTOR_RETIRE_REASONS, APPROVAL_GRANTED_KEY, APPROVAL_PREVIEW_MAX, APP_FILES_ROOT, APP_OWNER_SEGMENT, type Actor, type ActorRetireReason, type ActorRetired, type ActorRetiredHookBody, type ActorRetiredResult, type AppApprovalEnvelope, type AppFileListItem, type AppFileUrlArgs, type AppFileUrlResult, type AppFilesEnv, type AppToolEffectsDeclaration, type AppUndoEnvelope, type ApplyPoliciesOptions, type ApprovalCoverage, type ApprovalGateOptions, type ApprovalPreviewFact, type ApprovalPreviewSlot, type ApprovalPreviewSpec, type ApprovalSpec, type ArchiveOfferOptions, type ArchiveOfferRefusal, type CallerKeyResolution, type CaptureJournal, type CompanyTimezoneEnv, type ConfirmCondition, type ConfirmRule, type ConfirmationPolicy, type ConnectCompleteRequest, type ConnectCompleteResult, type D1Like, type D1PreparedStatementLike, DATA_DELETE_MAX_IDS, DATA_PARTIAL_UPDATE_PATH, DEFAULT_EMIT_TIMEOUT_MS, DEFAULT_FILE_READ_TIMEOUT_MS, DEFAULT_LOG_TIMEOUT_MS, DEFAULT_MAX_FILE_BYTES, DEFAULT_MONEY_FIELDS, DEFAULT_WRITE_PREFIXES, type DataClient, type DataIdsOpts, type DataListIdsResult, type DataTransport, type DerivePolicyOptions, type DerivedPolicy, type DispatcherApprovalGate, type DispatcherApprovalOptions, type EmailPreviewInput, type EmitMarketplaceEventOptions, type EmitResult, type EmitTransport, type EncodeStateWithinEnvelopeOptions, type EncodedStateWithinEnvelope, type EventArgs, type ExecutionContextLike, FILE_REF_SOURCES_HELP, type FetchFileResult, type FetchWithRetryOptions, type FileRef, type FileRefContent, type FileRefEnv, FileRefError, type FileRefErrorCode, type FileRefStream, type FileRefVia, type GetAppFileResult, type HandlerFn, INBOX_SEND_CONTRACT_V1, type IdPrefixSpec, type IdSnapshot, type InboxAddress, type InboxAppendRequest, type InboxAppendResult, type InboxChannelDeclaration, type InboxFoldersRequest, type InboxFoldersResult, type InboxOwner, type InboxSendConnection, type InboxSendHandlerImpl, InboxSendRefusal, type InboxSendSupports, type InboxSendV1Args, type InboxSendV1Result, type InstallBridge, InvalidUndoEnvelopeError, type JournalRowLike, type LogToPlatformOptions, type ManifestDispatchBlock, type ManifestLike, type ManifestToolLike, type MarketplaceEventEmitOpts, type MarketplaceEventSourceIntegration, NotConnectedError, OAUTH_STATE_ENVELOPE_MAX_CHARS, type OAuthBouncerSignals, type OAuthState, type OfferUndoArgs, type PartialUpdateDataOptions, type PlatformHostEnv, type PolicyCheckInput, type PolicySource, type PurgeResult, type PutAppFileArgs, type PutAppFileResult, type PutAppFileStreamArgs, type ReadFileRefOptions, type RequireApprovalOptions, type ResolveFileRefOptions, type ResolveViewerOptions, type ResolvedFileRef, type RestoreResult, type RestoreSpec, SPRIGR_DATA_MAX_OBJECTS_PER_CALL, SPRIGR_FILE_HOSTS, SPRIGR_LOG_LEVELS, SPRIGR_LOG_LIMITS, type ScheduleArgs, type SmsPreviewInput, type SprigrDataAggregationCell, type SprigrDataAggregationResult, type SprigrDataAggregationSpec, type SprigrDataApi, type SprigrDataImportOpts, type SprigrDataIndexOpts, type SprigrDataPartialUpdateBody, type SprigrDataPartialUpdateOpts, type SprigrDataPartialUpdateResult, type SprigrDataPatch, type SprigrDataSearchOpts, type SprigrDataSearchResult, SprigrDataValidationError, type SprigrFilesApi, type SprigrFilesApiWithEdit, type SprigrFilesCreateInput, type SprigrFilesCreateResult, type SprigrFilesEditInput, type SprigrFilesEditResult, type SprigrFilesJobResult, type SprigrFilesListItem, type SprigrFilesListResult, type SprigrInboxApi, type SprigrLogEntry, type SprigrLogFn, type SprigrLogLevel, type SprigrLogResult, SprigrLogValidationError, type SyncedAttachment, type SyncedMessage, type ToolArgs, type ToolHandler, type ToolResult, type ToolWrapperOptions, UNIT_SEP, type UndoApplyOptions, type UndoApplyResult, type UndoCaptureSpec, type UndoFidelity, VIEWER_ANONYMOUS, VIEWER_CONTEXT_HEADER, VIEWER_PLATFORM_USER_ID_HEADER, VIEWER_ROLE_HEADER, VIEWER_USER_ID_HEADER, type VerbRule, type ViewerContext, type ViewerContextFailure, type ViewerContextVerification, type ViewerEnv, WORKSPACE_FILE_HOW_TO, type WebhookArgs, type WfpBridgeEnv, type WfpEmitReply, actorKey, actorRetiredHook, actorTool, agentFileKeyFromUrl, appFileUrl, appKeyFromCallerKey, applyConfirmationPolicies, approvalHash, approvalPreview, approvalRecipients, archiveOfferRefusal, attendedFindings, base64ToBytes, buildConfirmationPolicy, buildMarketplaceWebhookUrl, buildPartialUpdateBody, bytesToBase64, callerKeyRefusal, canEmit, canLog, canPartialUpdate, checkConfirmationPolicy, commonDestructiveVerbs, connectComplete, connectDisconnect, constantTimeEqual, createMarketplaceEmitter, createToolWrappers, decodeState, defineInboxSendHandler, deleteAppFile, deleteSnapshotIds, deriveConfirmationPolicy, describeMissingBridge, dispatcherApproval, emailBodyHtml, emailPreview, emitMarketplaceEvent, encodeState, encodeStateWithinEnvelope, fetchFileAsBase64, fetchFileBytes, fetchWithRetry, fieldsPreview, fullWarning, getAppFile, getCompanyTimezone, hasHtmlMarkup, hmacSha256Hex, installTokenPost, isNotConnectedError, isStagingHost, listAppFiles, logToPlatform, makeDataClient, manifestIsFresh, oauthStateEnvelopeOverhead, offerUndo, openFileRef, overlaySprigr, ownerFromActorKey, parseActor, parseActorRetiredArgs, partialUpdateData, purgeIndexByPrefix, putAppFile, putAppFileStream, randomHex, readFileRef, readableStoredKey, recreatedWarning, refuseWithoutForce, requireApproval, resolveFileRef, resolveInstallBridge, resolveOAuthBouncerBase, resolveOAuthBouncerCallbackUrl, resolvePlatformWebhookBase, resolveViewerContext, resolveViewerUserId, runUndoApply, safeCapture, seq, serializeManifest, set, smsPreview, snapshotIndexIds, tool, undoEnvelope, validateLogEntries, validateLogEntry, verifyViewerToken, withSprigrEmitFallback, withSprigrInboxFallback, withSprigrLogFallback };
|
package/dist/index.js
CHANGED
|
@@ -1396,6 +1396,34 @@ function approvalPreview(value, max = APPROVAL_PREVIEW_MAX) {
|
|
|
1396
1396
|
return text.length > max ? `${text.slice(0, max)}\u2026` : text;
|
|
1397
1397
|
}
|
|
1398
1398
|
|
|
1399
|
+
// src/write-protection/approval-preview.ts
|
|
1400
|
+
function emailPreview(input) {
|
|
1401
|
+
return {
|
|
1402
|
+
kind: "email",
|
|
1403
|
+
...input.from !== void 0 ? { from: input.from } : {},
|
|
1404
|
+
to: input.to,
|
|
1405
|
+
...input.cc !== void 0 ? { cc: input.cc } : {},
|
|
1406
|
+
...input.bcc !== void 0 ? { bcc: input.bcc } : {},
|
|
1407
|
+
...input.subject !== void 0 ? { subject: input.subject } : {},
|
|
1408
|
+
body: { arg: input.body, format: input.bodyFormat ?? "html" },
|
|
1409
|
+
...input.attachments !== void 0 ? { attachments: input.attachments } : {},
|
|
1410
|
+
...input.sendAt !== void 0 ? { sendAt: input.sendAt } : {},
|
|
1411
|
+
facts: input.facts ?? ["irreversible"]
|
|
1412
|
+
};
|
|
1413
|
+
}
|
|
1414
|
+
function smsPreview(input) {
|
|
1415
|
+
return {
|
|
1416
|
+
kind: "sms",
|
|
1417
|
+
...input.from !== void 0 ? { from: input.from } : {},
|
|
1418
|
+
to: input.to,
|
|
1419
|
+
body: { arg: input.body, format: "text" },
|
|
1420
|
+
facts: input.facts ?? ["irreversible"]
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1423
|
+
function fieldsPreview(kind, rows, extra = {}) {
|
|
1424
|
+
return { kind, ...extra, fields: rows };
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1399
1427
|
// src/write-protection/undo-envelope.ts
|
|
1400
1428
|
var InvalidUndoEnvelopeError = class extends Error {
|
|
1401
1429
|
constructor(message2) {
|
|
@@ -2238,6 +2266,21 @@ function getCompanyTimezone(env) {
|
|
|
2238
2266
|
return void 0;
|
|
2239
2267
|
}
|
|
2240
2268
|
}
|
|
2269
|
+
|
|
2270
|
+
// src/email-body.ts
|
|
2271
|
+
var HTML_ELEMENT = /<\/?(?:a|abbr|b|blockquote|body|br|center|code|del|div|em|font|h[1-6]|head|hr|html|i|img|ins|li|mark|ol|p|pre|s|section|small|span|strong|style|sub|sup|table|tbody|td|tfoot|th|thead|tr|u|ul)(?:\s[^<>]*)?\/?>/i;
|
|
2272
|
+
function hasHtmlMarkup(body) {
|
|
2273
|
+
return HTML_ELEMENT.test(body) || /<!doctype\s+html/i.test(body);
|
|
2274
|
+
}
|
|
2275
|
+
function escapeHtml(text) {
|
|
2276
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
2277
|
+
}
|
|
2278
|
+
function emailBodyHtml(body) {
|
|
2279
|
+
if (body.length === 0 || hasHtmlMarkup(body)) return body;
|
|
2280
|
+
const normalized = body.replace(/\r\n?/g, "\n").trim();
|
|
2281
|
+
if (normalized.length === 0) return body;
|
|
2282
|
+
return normalized.split(/\n[ \t]*\n+/).map((para) => `<p>${escapeHtml(para.replace(/^\n+|\n+$/g, "")).replace(/\n/g, "<br>")}</p>`).join("");
|
|
2283
|
+
}
|
|
2241
2284
|
export {
|
|
2242
2285
|
ACTOR_RETIRED_HOOK_TOOL,
|
|
2243
2286
|
ACTOR_RETIRE_REASONS,
|
|
@@ -2308,15 +2351,19 @@ export {
|
|
|
2308
2351
|
deriveConfirmationPolicy,
|
|
2309
2352
|
describeMissingBridge,
|
|
2310
2353
|
dispatcherApproval,
|
|
2354
|
+
emailBodyHtml,
|
|
2355
|
+
emailPreview,
|
|
2311
2356
|
emitMarketplaceEvent,
|
|
2312
2357
|
encodeState,
|
|
2313
2358
|
encodeStateWithinEnvelope,
|
|
2314
2359
|
fetchFileAsBase64,
|
|
2315
2360
|
fetchFileBytes,
|
|
2316
2361
|
fetchWithRetry,
|
|
2362
|
+
fieldsPreview,
|
|
2317
2363
|
fullWarning,
|
|
2318
2364
|
getAppFile,
|
|
2319
2365
|
getCompanyTimezone,
|
|
2366
|
+
hasHtmlMarkup,
|
|
2320
2367
|
hmacSha256Hex,
|
|
2321
2368
|
installTokenPost,
|
|
2322
2369
|
isNotConnectedError,
|
|
@@ -2354,6 +2401,7 @@ export {
|
|
|
2354
2401
|
seq,
|
|
2355
2402
|
serializeManifest,
|
|
2356
2403
|
set,
|
|
2404
|
+
smsPreview,
|
|
2357
2405
|
snapshotIndexIds,
|
|
2358
2406
|
tool,
|
|
2359
2407
|
undoEnvelope,
|