@adonis-agora/agent 0.54.0 → 0.56.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/CHANGELOG.md +62 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +139 -10
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/ag-ui/adapter.d.ts +26 -0
- package/dist/src/ag-ui/adapter.d.ts.map +1 -0
- package/dist/src/ag-ui/adapter.js +295 -0
- package/dist/src/ag-ui/adapter.js.map +1 -0
- package/dist/src/ag-ui/encoder.d.ts +107 -0
- package/dist/src/ag-ui/encoder.d.ts.map +1 -0
- package/dist/src/ag-ui/encoder.js +519 -0
- package/dist/src/ag-ui/encoder.js.map +1 -0
- package/dist/src/ag-ui/index.d.ts +12 -0
- package/dist/src/ag-ui/index.d.ts.map +1 -0
- package/dist/src/ag-ui/index.js +12 -0
- package/dist/src/ag-ui/index.js.map +1 -0
- package/dist/src/ag-ui/input.d.ts +72 -0
- package/dist/src/ag-ui/input.d.ts.map +1 -0
- package/dist/src/ag-ui/input.js +216 -0
- package/dist/src/ag-ui/input.js.map +1 -0
- package/dist/src/ag-ui/interrupt-id.d.ts +27 -0
- package/dist/src/ag-ui/interrupt-id.d.ts.map +1 -0
- package/dist/src/ag-ui/interrupt-id.js +42 -0
- package/dist/src/ag-ui/interrupt-id.js.map +1 -0
- package/dist/src/ag-ui/stream.d.ts +28 -0
- package/dist/src/ag-ui/stream.d.ts.map +1 -0
- package/dist/src/ag-ui/stream.js +68 -0
- package/dist/src/ag-ui/stream.js.map +1 -0
- package/dist/src/ag-ui/types.d.ts +202 -0
- package/dist/src/ag-ui/types.d.ts.map +1 -0
- package/dist/src/ag-ui/types.js +33 -0
- package/dist/src/ag-ui/types.js.map +1 -0
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +1 -0
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +28 -0
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +58 -5
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/ai-tool-ref.d.ts +26 -4
- package/dist/src/ai-tool-ref.d.ts.map +1 -1
- package/dist/src/ai-tool-ref.js +6 -1
- package/dist/src/ai-tool-ref.js.map +1 -1
- package/dist/src/confirmed-tool.d.ts +2 -2
- package/dist/src/confirmed-tool.d.ts.map +1 -1
- package/dist/src/confirmed-tool.js.map +1 -1
- package/dist/src/define_config.d.ts +8 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/guardrails/agent.d.ts.map +1 -1
- package/dist/src/guardrails/agent.js +11 -0
- package/dist/src/guardrails/agent.js.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp-client/options.d.ts +12 -0
- package/dist/src/mcp-client/options.d.ts.map +1 -1
- package/dist/src/mcp-client/tool-source.d.ts.map +1 -1
- package/dist/src/mcp-client/tool-source.js +2 -0
- package/dist/src/mcp-client/tool-source.js.map +1 -1
- package/dist/src/media/index.d.ts +1 -1
- package/dist/src/media/index.d.ts.map +1 -1
- package/dist/src/media/index.js +1 -1
- package/dist/src/media/index.js.map +1 -1
- package/dist/src/media/media-attachment-staging.d.ts +107 -6
- package/dist/src/media/media-attachment-staging.d.ts.map +1 -1
- package/dist/src/media/media-attachment-staging.js +173 -21
- package/dist/src/media/media-attachment-staging.js.map +1 -1
- package/dist/src/react/ag-ui.d.ts +41 -0
- package/dist/src/react/ag-ui.d.ts.map +1 -0
- package/dist/src/react/ag-ui.js +63 -0
- package/dist/src/react/ag-ui.js.map +1 -0
- package/dist/src/react/client.d.ts +12 -0
- package/dist/src/react/client.d.ts.map +1 -0
- package/dist/src/react/client.js +21 -0
- package/dist/src/react/client.js.map +1 -0
- package/dist/src/react/index.d.ts +3 -8
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/react/index.js +4 -20
- package/dist/src/react/index.js.map +1 -1
- package/dist/src/react/media.d.ts +18 -0
- package/dist/src/react/media.d.ts.map +1 -0
- package/dist/src/react/media.js +18 -0
- package/dist/src/react/media.js.map +1 -0
- package/dist/src/spi/agent-store.d.ts +29 -0
- package/dist/src/spi/agent-store.d.ts.map +1 -1
- package/dist/src/spi/agent-store.js.map +1 -1
- package/dist/src/spi/attachment-staging.d.ts +5 -0
- package/dist/src/spi/attachment-staging.d.ts.map +1 -1
- package/dist/src/spi/protocol-adapter.d.ts +57 -0
- package/dist/src/spi/protocol-adapter.d.ts.map +1 -0
- package/dist/src/spi/protocol-adapter.js +2 -0
- package/dist/src/spi/protocol-adapter.js.map +1 -0
- package/dist/src/spi/tool.d.ts +24 -0
- package/dist/src/spi/tool.d.ts.map +1 -1
- package/dist/src/stores/factory.d.ts +8 -2
- package/dist/src/stores/factory.d.ts.map +1 -1
- package/dist/src/stores/factory.js +8 -2
- package/dist/src/stores/factory.js.map +1 -1
- package/dist/src/stores/lucid-schema.d.ts.map +1 -1
- package/dist/src/stores/lucid-schema.js +2 -0
- package/dist/src/stores/lucid-schema.js.map +1 -1
- package/dist/src/stores/lucid.d.ts +12 -0
- package/dist/src/stores/lucid.d.ts.map +1 -1
- package/dist/src/stores/lucid.js +48 -1
- package/dist/src/stores/lucid.js.map +1 -1
- package/dist/src/stream-events.d.ts +2 -0
- package/dist/src/stream-events.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.d.ts +7 -0
- package/dist/src/testing/in-memory-store.d.ts.map +1 -1
- package/dist/src/testing/in-memory-store.js +37 -1
- package/dist/src/testing/in-memory-store.js.map +1 -1
- package/dist/src/tool-discovery.d.ts.map +1 -1
- package/dist/src/tool-discovery.js +27 -9
- package/dist/src/tool-discovery.js.map +1 -1
- package/dist/src/tool-filters.d.ts +33 -0
- package/dist/src/tool-filters.d.ts.map +1 -0
- package/dist/src/tool-filters.js +45 -0
- package/dist/src/tool-filters.js.map +1 -0
- package/dist/src/tool-registry.d.ts +33 -5
- package/dist/src/tool-registry.d.ts.map +1 -1
- package/dist/src/tool-registry.js +55 -11
- package/dist/src/tool-registry.js.map +1 -1
- package/dist/src/types.d.ts +16 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +22 -3
- package/skills/agent-setup/SKILL.md +36 -0
- package/skills/agent-tools/SKILL.md +19 -1
package/dist/src/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const VERSION = '0.
|
|
1
|
+
export const VERSION = '0.56.0';
|
|
2
2
|
// Re-export the configure hook from the package root so `node ace configure` finds it.
|
|
3
3
|
// AdonisJS imports the package MAIN and reads `configure` off the module namespace —
|
|
4
4
|
// the `./configure` subpath alone is never consulted.
|
|
@@ -9,7 +9,7 @@ export { utcDay } from './agent-deps.js';
|
|
|
9
9
|
export { AgentDepsFactory, delegateToolName, normalizeDelegateEdge, registerDelegateTools, } from './agent-deps-factory.js';
|
|
10
10
|
export { APPROVAL_EXPIRED_REASON, DEFAULT_MAX_AGENT_APPEARANCES, exposeStreamErrorDetails, MAX_DELEGATION_DEPTH, outcomeFrame, QuotaExceededError, RUN_FAILED_MESSAGE, RunCancelledError, runAgentLoop, settleAll, streamErrorCode, streamErrorFrame, withBuiltInTools, } from './agent-loop.js';
|
|
11
11
|
export { AgentRegistry } from './agent-registry.js';
|
|
12
|
-
export { AgentService, AttachmentRefusedError, ChatQueueError, RegenerateNeedsThreadError, } from './agent-service.js';
|
|
12
|
+
export { AgentService, AttachmentRefusedError, ChatQueueError, RegenerateNeedsThreadError, UnknownAgentError, } from './agent-service.js';
|
|
13
13
|
export { AGENT_TOOL_BRAND, AI_TOOL_META_KEY, AiTool, defineTool, isBrandedFunctionalTool, readAiToolMeta, toolNameFromClass, } from './ai-tool-ref.js';
|
|
14
14
|
export { AnonymousActorResolver, } from './anonymous-actor-resolver.js';
|
|
15
15
|
export { ClosedToolAuthorizer, DefaultToolAuthorizer } from './authorizer.js';
|
|
@@ -58,6 +58,7 @@ export { findCatalogModel, ModelNotAllowedError, staticModelCatalog, toModelCata
|
|
|
58
58
|
export * from './spi/model-provider.js';
|
|
59
59
|
export * from './spi/pricing-store.js';
|
|
60
60
|
export * from './spi/processors.js';
|
|
61
|
+
export * from './spi/protocol-adapter.js';
|
|
61
62
|
export { exhaustedWindow, isQuotaProvider, QuotaBlockedError, quotaPeriodRange, quotaUsedRatio, quotaWarning, } from './spi/quota-provider.js';
|
|
62
63
|
export * from './spi/quota-store.js';
|
|
63
64
|
export * from './spi/reranker.js';
|
|
@@ -75,8 +76,9 @@ export { LucidPricingStore } from './stores/lucid-pricing.js';
|
|
|
75
76
|
export { AGENT_TABLES, createAgentTables, createTableStatements, dropAgentTables, dropTableStatements, ensureAgentTables, ensureStreamFrameTable, schemaRunner, streamFrameTableStatement, } from './stores/lucid-schema.js';
|
|
76
77
|
export { DEFAULT_STRUCTURED_OUTPUT_INSTRUCTION, extractJson, repairInstruction, StructuredOutputError, validateStructured, } from './structured-output.js';
|
|
77
78
|
export { discoverTools, registerFunctionalTool, registerToolExport, registerToolsFromBarrel, } from './tool-discovery.js';
|
|
79
|
+
export * from './tool-filters.js';
|
|
78
80
|
export { ALL_AGENTS } from './tool-presentation.js';
|
|
79
|
-
export { ClosedRolesPolicy, DefaultRolesPolicy, ToolForbiddenError, ToolInputInvalidError, ToolNotFoundError, ToolRegistry, } from './tool-registry.js';
|
|
81
|
+
export { ClosedRolesPolicy, DefaultRolesPolicy, ToolDisabledError, ToolForbiddenError, ToolInputInvalidError, ToolNotFoundError, ToolRegistry, } from './tool-registry.js';
|
|
80
82
|
export { DEFAULT_TOOL_TRANSIENT_RETRY_ATTEMPTS, DEFAULT_TOOL_TRANSIENT_RETRY_BACKOFF_MS, invokeWithTransientRetry, isTransientToolError, } from './tool-retry.js';
|
|
81
83
|
export { createNoopEmitUi, createUiCollector, mergeUi, unwrapToolStepOutput, wrapToolStepOutput, } from './tool-ui.js';
|
|
82
84
|
export { observeTurnFrames, withTurnFrames, } from './turn-frames.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,uFAAuF;AACvF,qFAAqF;AACrF,sDAAsD;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,uBAAuB,EACvB,6BAA6B,EAC7B,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EAEZ,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EACL,YAAY,EAEZ,sBAAsB,EACtB,cAAc,EAId,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
2
2
|
import type { jsonSchemaValidator } from '@modelcontextprotocol/sdk/validation';
|
|
3
3
|
import type { ToolTransientRetrySetting } from '../tool-retry.js';
|
|
4
|
+
import type { Actor } from '../types.js';
|
|
4
5
|
import type { McpToolKindPolicy } from './tool-kind.js';
|
|
5
6
|
/** A server this process starts and talks to over its stdin/stdout. */
|
|
6
7
|
export interface McpStdioTransportConfig {
|
|
@@ -77,6 +78,17 @@ export interface McpServerConfig {
|
|
|
77
78
|
roles?: string[];
|
|
78
79
|
/** Ability every tool from this server is checked against by an ability-aware `RolesPolicy`. */
|
|
79
80
|
ability?: string;
|
|
81
|
+
/**
|
|
82
|
+
* Per-actor gate applied to every tool from this server, like a tool's own `canUse` — runs after
|
|
83
|
+
* the `RolesPolicy`, on both the offered list and the call. Omit → the role gate alone decides.
|
|
84
|
+
*/
|
|
85
|
+
canUse?: (actor: Actor) => boolean | Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Whether this server's tools exist in this deployment at all — a boolean, or a predicate
|
|
88
|
+
* re-read every turn (a feature flag). A disabled server's tools are still imported, so turning
|
|
89
|
+
* it back on needs no refresh; they are just never offered or invocable. Omit → enabled.
|
|
90
|
+
*/
|
|
91
|
+
enabled?: boolean | (() => boolean | Promise<boolean>);
|
|
80
92
|
/** Cap on the MCP initialize handshake. Default 10s. */
|
|
81
93
|
connectTimeoutMs?: number;
|
|
82
94
|
/** Cap on `tools/list` and on every tool call. Default 30s. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/mcp-client/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/mcp-client/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-source.d.ts","sourceRoot":"","sources":["../../../src/mcp-client/tool-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAU/D,gGAAgG;AAChG,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,gGAAgG;IAChG,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yGAAyG;AACzG,qBAAa,gBAAiB,SAAQ,KAAK;aAEvB,UAAU,EAAE,MAAM;aAClB,QAAQ,EAAE,MAAM;IAFlC,YACkB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChC,OAAO,EAAE,MAAM,EAIhB;CACF;AAoBD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAL1B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAA8B;IAEhD,YACmB,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,SAAS,YAAA,EACjC;IAEJ,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,mGAAmG;IAC7F,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAczC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3B;IAED,6FAA6F;YAC/E,YAAY;IA2B1B,OAAO,CAAC,UAAU;IAQlB;;;;OAIG;IACH,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"tool-source.d.ts","sourceRoot":"","sources":["../../../src/mcp-client/tool-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAU/D,gGAAgG;AAChG,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,gGAAgG;IAChG,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yGAAyG;AACzG,qBAAa,gBAAiB,SAAQ,KAAK;aAEvB,UAAU,EAAE,MAAM;aAClB,QAAQ,EAAE,MAAM;IAFlC,YACkB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChC,OAAO,EAAE,MAAM,EAIhB;CACF;AAoBD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAL1B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAA8B;IAEhD,YACmB,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,SAAS,YAAA,EACjC;IAEJ,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,mGAAmG;IAC7F,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAczC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3B;IAED,6FAA6F;YAC/E,YAAY;IA2B1B,OAAO,CAAC,UAAU;IAQlB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,QAAQ;YAcF,QAAQ;IAgBtB,oGAAoG;YACtF,OAAO;IAgBrB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;YAYN,OAAO;IAerB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,UAAU;IAMlB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,gBAAgB;CAGzB"}
|
|
@@ -141,9 +141,11 @@ export class McpToolSource {
|
|
|
141
141
|
inputSchema,
|
|
142
142
|
...(this.config.roles !== undefined ? { roles: this.config.roles } : {}),
|
|
143
143
|
...(this.config.ability !== undefined ? { ability: this.config.ability } : {}),
|
|
144
|
+
...(this.config.enabled !== undefined ? { enabled: this.config.enabled } : {}),
|
|
144
145
|
};
|
|
145
146
|
const handler = {
|
|
146
147
|
execute: (input) => this.callTool(tool.name, input, spec.kind),
|
|
148
|
+
...(this.config.canUse !== undefined ? { canUse: this.config.canUse } : {}),
|
|
147
149
|
};
|
|
148
150
|
return { spec, handler, remoteName: tool.name, serverName: this.config.name };
|
|
149
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-source.js","sourceRoot":"","sources":["../../../src/mcp-client/tool-source.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-source.js","sourceRoot":"","sources":["../../../src/mcp-client/tool-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* peer). `attachmentStores.media()` in `config/agent.ts` builds {@link MediaAttachmentStaging} from
|
|
4
4
|
* the app's `MediaManager`; use the class directly to wire it over a media setup of your own.
|
|
5
5
|
*/
|
|
6
|
-
export { DEFAULT_AGENT_MEDIA_COLLECTION, DEFAULT_AGENT_MEDIA_OWNER_TYPE, MediaAttachmentStaging, type MediaAttachmentsOptions, type MediaDiskLike, type MediaRecordLike, type MediaStorageLike, type MediaStoreLike, } from './media-attachment-staging.js';
|
|
6
|
+
export { type BeginMediaUploadInput, type BeginMediaUploadResult, DEFAULT_AGENT_MEDIA_COLLECTION, DEFAULT_AGENT_MEDIA_OWNER_TYPE, DEFAULT_AGENT_MEDIA_TUS_BASE_PATH, MediaAttachmentStaging, type MediaAttachmentStagingDeps, type MediaAttachmentsOptions, type MediaDiskLike, type MediaRecordLike, type MediaResumableLike, type MediaStorageLike, type MediaStoreLike, MediaUploadRefusedError, type ReferencedMediaLike, } from './media-attachment-staging.js';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,8BAA8B,EAC9B,8BAA8B,EAC9B,iCAAiC,EACjC,sBAAsB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,uBAAuB,EACvB,KAAK,mBAAmB,GACzB,MAAM,+BAA+B,CAAC"}
|
package/dist/src/media/index.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* peer). `attachmentStores.media()` in `config/agent.ts` builds {@link MediaAttachmentStaging} from
|
|
4
4
|
* the app's `MediaManager`; use the class directly to wire it over a media setup of your own.
|
|
5
5
|
*/
|
|
6
|
-
export { DEFAULT_AGENT_MEDIA_COLLECTION, DEFAULT_AGENT_MEDIA_OWNER_TYPE, MediaAttachmentStaging, } from './media-attachment-staging.js';
|
|
6
|
+
export { DEFAULT_AGENT_MEDIA_COLLECTION, DEFAULT_AGENT_MEDIA_OWNER_TYPE, DEFAULT_AGENT_MEDIA_TUS_BASE_PATH, MediaAttachmentStaging, MediaUploadRefusedError, } from './media-attachment-staging.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/media/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAGL,8BAA8B,EAC9B,8BAA8B,EAC9B,iCAAiC,EACjC,sBAAsB,EAQtB,uBAAuB,GAExB,MAAM,+BAA+B,CAAC"}
|
|
@@ -37,6 +37,66 @@ export interface MediaDiskLike {
|
|
|
37
37
|
contentType?: string;
|
|
38
38
|
}): Promise<string>;
|
|
39
39
|
delete(key: string): Promise<void>;
|
|
40
|
+
/** Needed for resumable uploads only — whether the assembled object has landed. */
|
|
41
|
+
exists?(key: string): Promise<boolean>;
|
|
42
|
+
/** Needed for resumable uploads only — the assembled object's size. */
|
|
43
|
+
getMetaData?(key: string): Promise<{
|
|
44
|
+
contentLength: number;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* `@adonis-agora/media`'s `ResumableUploadManager` (`media.resumable`), the part used here: open a
|
|
49
|
+
* tus session the bytes then stream to over the media library's own tus routes, or abort one.
|
|
50
|
+
*/
|
|
51
|
+
export interface MediaResumableLike {
|
|
52
|
+
createUpload(input: {
|
|
53
|
+
disk: string;
|
|
54
|
+
key: string;
|
|
55
|
+
size?: number;
|
|
56
|
+
contentType?: string;
|
|
57
|
+
metadata?: Record<string, string>;
|
|
58
|
+
}): Promise<{
|
|
59
|
+
id: string;
|
|
60
|
+
}>;
|
|
61
|
+
abort(id: string): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
/** What `beginUpload` takes: the file as the client describes it, before any byte moves. */
|
|
64
|
+
export interface BeginMediaUploadInput {
|
|
65
|
+
actor: Actor;
|
|
66
|
+
filename: string;
|
|
67
|
+
contentType: string;
|
|
68
|
+
/** Exact byte length — tus needs it up front, and completion is checked against it. */
|
|
69
|
+
size: number;
|
|
70
|
+
}
|
|
71
|
+
/** A tus session opened for one attachment. Stream the bytes to `location`, then complete. */
|
|
72
|
+
export interface BeginMediaUploadResult {
|
|
73
|
+
/** The attachment's id — what the chat turn sends as `{ mediaId }`. */
|
|
74
|
+
mediaId: string;
|
|
75
|
+
/** The tus upload id. */
|
|
76
|
+
uploadId: string;
|
|
77
|
+
/** The tus resource to `PATCH` the bytes to (relative to the app's origin). */
|
|
78
|
+
location: string;
|
|
79
|
+
}
|
|
80
|
+
/** A refusal of an upload request, carrying the HTTP status the route answers with. */
|
|
81
|
+
export declare class MediaUploadRefusedError extends Error {
|
|
82
|
+
readonly status: 400 | 409 | 413 | 415 | 422 | 501;
|
|
83
|
+
constructor(status: 400 | 409 | 413 | 415 | 422 | 501, message: string);
|
|
84
|
+
}
|
|
85
|
+
/** The agent store, the part used here — which media a live message of this actor carries. */
|
|
86
|
+
export interface ReferencedMediaLike {
|
|
87
|
+
referencedMediaIds?(actorRef: string, mediaIds: readonly string[]): Promise<string[]>;
|
|
88
|
+
}
|
|
89
|
+
/** What {@link MediaAttachmentStaging} is built from. */
|
|
90
|
+
export interface MediaAttachmentStagingDeps {
|
|
91
|
+
storage: MediaStorageLike;
|
|
92
|
+
store: MediaStoreLike;
|
|
93
|
+
/** Lets media referenced from the actor's own threads resolve (see `canAccess`). */
|
|
94
|
+
agentStore?: ReferencedMediaLike;
|
|
95
|
+
/**
|
|
96
|
+
* `media.resumable` — resumable (tus) uploads. Absent or `null` (`config/media.ts` has no
|
|
97
|
+
* `uploads.resumable`) → uploads are multipart only.
|
|
98
|
+
*/
|
|
99
|
+
uploads?: MediaResumableLike | null;
|
|
40
100
|
}
|
|
41
101
|
/** `@adonis-agora/media`'s `StorageManager`, the part used here. */
|
|
42
102
|
export interface MediaStorageLike {
|
|
@@ -67,20 +127,29 @@ export interface MediaAttachmentsOptions {
|
|
|
67
127
|
disk: MediaDiskLike;
|
|
68
128
|
}) => string | Promise<string>;
|
|
69
129
|
/**
|
|
70
|
-
* Who may attach a file
|
|
71
|
-
*
|
|
130
|
+
* Who may attach a file. By default (`allowed`): the actor that uploaded it, or one a message in
|
|
131
|
+
* one of the actor's OWN threads already carries (a fork, a regenerate) — the latter needs an
|
|
132
|
+
* agent store with `referencedMediaIds`, which both shipped stores have. Widen or narrow it here —
|
|
133
|
+
* e.g. let a support agent attach a customer's upload.
|
|
72
134
|
*/
|
|
73
135
|
canAccess?: (input: {
|
|
74
136
|
record: MediaRecordLike;
|
|
75
137
|
actor: Actor;
|
|
76
138
|
allowed: boolean;
|
|
77
139
|
}) => boolean | Promise<boolean>;
|
|
140
|
+
/**
|
|
141
|
+
* Where `@adonis-agora/media` mounts its tus routes (`uploads.resumable.routes.prefix` in
|
|
142
|
+
* `config/media.ts`). Default `/media/uploads/tus`. The `location` a resumable upload answers is
|
|
143
|
+
* `<tusBasePath>/<uploadId>`.
|
|
144
|
+
*/
|
|
145
|
+
tusBasePath?: string;
|
|
78
146
|
/** Clock and id seams, for tests. */
|
|
79
147
|
clock?: () => Date;
|
|
80
148
|
idGenerator?: () => string;
|
|
81
149
|
}
|
|
82
150
|
export declare const DEFAULT_AGENT_MEDIA_COLLECTION = "agent-attachments";
|
|
83
151
|
export declare const DEFAULT_AGENT_MEDIA_OWNER_TYPE = "agent-actor";
|
|
152
|
+
export declare const DEFAULT_AGENT_MEDIA_TUS_BASE_PATH = "/media/uploads/tus";
|
|
84
153
|
/**
|
|
85
154
|
* Chat attachments stored as media rows in their own collection, one owner per actor, on any Drive
|
|
86
155
|
* disk — S3, GCS, R2, the local filesystem. Uploads land at
|
|
@@ -99,16 +168,48 @@ export declare class MediaAttachmentStaging implements AttachmentStagingStore {
|
|
|
99
168
|
private readonly now;
|
|
100
169
|
private readonly newId;
|
|
101
170
|
private warnedInline;
|
|
102
|
-
constructor(deps:
|
|
103
|
-
storage: MediaStorageLike;
|
|
104
|
-
store: MediaStoreLike;
|
|
105
|
-
}, options?: MediaAttachmentsOptions);
|
|
171
|
+
constructor(deps: MediaAttachmentStagingDeps, options?: MediaAttachmentsOptions);
|
|
106
172
|
describe(): AttachmentStagingDescription;
|
|
173
|
+
/**
|
|
174
|
+
* Open a tus session for one file, owned by `actor`. Everything is validated here, before any
|
|
175
|
+
* byte moves. The record exists from now on, `pending` until {@link completeUpload} sees the bytes.
|
|
176
|
+
*/
|
|
177
|
+
beginUpload(input: BeginMediaUploadInput): Promise<BeginMediaUploadResult>;
|
|
178
|
+
/**
|
|
179
|
+
* Confirm the bytes of a {@link beginUpload} landed, and whole. `null` for an unknown id or one
|
|
180
|
+
* that is not `actor`'s; `409` while the bytes are still missing; `422` (and the record dropped)
|
|
181
|
+
* when what arrived is not the size that was declared. Idempotent on a ready record.
|
|
182
|
+
*/
|
|
183
|
+
completeUpload(input: {
|
|
184
|
+
actor: Actor;
|
|
185
|
+
mediaId: string;
|
|
186
|
+
}): Promise<MessageAttachment | null>;
|
|
187
|
+
/** The actor drops one of their own attachments — aborting its upload if still in flight. */
|
|
188
|
+
discard(input: {
|
|
189
|
+
actor: Actor;
|
|
190
|
+
mediaId: string;
|
|
191
|
+
}): Promise<boolean>;
|
|
107
192
|
private get diskName();
|
|
108
193
|
stage(input: StageAttachmentInput): Promise<MessageAttachment>;
|
|
194
|
+
/**
|
|
195
|
+
* The attachment for `mediaId`, or `null` when it is unknown or this actor may not use it. The
|
|
196
|
+
* actor may use media they own, and media a message in one of THEIR threads already carries (a
|
|
197
|
+
* fork, a regenerate) — never anything else, unless `canAccess` says so.
|
|
198
|
+
*/
|
|
109
199
|
resolve(input: ResolveAttachmentInput): Promise<MessageAttachment | null>;
|
|
200
|
+
private canUse;
|
|
201
|
+
private defaultAccess;
|
|
110
202
|
/** Delete an upload and its row. */
|
|
111
203
|
remove(mediaId: string): Promise<void>;
|
|
204
|
+
private validate;
|
|
205
|
+
private pathFor;
|
|
206
|
+
private saveRecord;
|
|
207
|
+
private ownRecord;
|
|
208
|
+
/**
|
|
209
|
+
* A ready record as-is; a pending one promoted to ready once its bytes are on the disk at exactly
|
|
210
|
+
* the declared size. `'missing'` while they are not; `'mismatch'` when they arrived at another size.
|
|
211
|
+
*/
|
|
212
|
+
private ensureReady;
|
|
112
213
|
private isOurs;
|
|
113
214
|
private toAttachment;
|
|
114
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-attachment-staging.d.ts","sourceRoot":"","sources":["../../../src/media/media-attachment-staging.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,4BAA4B,EAC5B,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQ5D,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpF;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,YAAY,CACV,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"media-attachment-staging.d.ts","sourceRoot":"","sources":["../../../src/media/media-attachment-staging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
+
/** A refusal of an upload request, carrying the HTTP status the route answers with. */
|
|
3
|
+
export class MediaUploadRefusedError extends Error {
|
|
4
|
+
status;
|
|
5
|
+
constructor(status, message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.status = status;
|
|
8
|
+
this.name = 'MediaUploadRefusedError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
2
11
|
export const DEFAULT_AGENT_MEDIA_COLLECTION = 'agent-attachments';
|
|
3
12
|
export const DEFAULT_AGENT_MEDIA_OWNER_TYPE = 'agent-actor';
|
|
13
|
+
export const DEFAULT_AGENT_MEDIA_TUS_BASE_PATH = '/media/uploads/tus';
|
|
4
14
|
const DEFAULT_URL_TTL_SECONDS = 7 * 24 * 60 * 60;
|
|
5
15
|
const DEFAULT_MAX_BYTES = 20 * 1024 * 1024;
|
|
6
16
|
const DEFAULT_ALLOWED_CONTENT_TYPES = [
|
|
@@ -41,7 +51,70 @@ export class MediaAttachmentStaging {
|
|
|
41
51
|
this.newId = options.idGenerator ?? (() => randomUUID());
|
|
42
52
|
}
|
|
43
53
|
describe() {
|
|
44
|
-
return {
|
|
54
|
+
return {
|
|
55
|
+
maxBytes: this.maxBytes,
|
|
56
|
+
allowedContentTypes: this.allowed,
|
|
57
|
+
upload: this.deps.uploads ? 'resumable' : 'multipart',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Open a tus session for one file, owned by `actor`. Everything is validated here, before any
|
|
62
|
+
* byte moves. The record exists from now on, `pending` until {@link completeUpload} sees the bytes.
|
|
63
|
+
*/
|
|
64
|
+
async beginUpload(input) {
|
|
65
|
+
const uploads = this.deps.uploads;
|
|
66
|
+
if (!uploads) {
|
|
67
|
+
throw new MediaUploadRefusedError(501, 'Resumable attachment uploads need `uploads.resumable` in config/media.ts.');
|
|
68
|
+
}
|
|
69
|
+
this.validate(input.filename, input.contentType, input.size);
|
|
70
|
+
const id = this.newId();
|
|
71
|
+
const fileName = safeFileName(input.filename);
|
|
72
|
+
const path = this.pathFor(input.actor, id, fileName);
|
|
73
|
+
const session = await uploads.createUpload({
|
|
74
|
+
disk: this.diskName,
|
|
75
|
+
key: path,
|
|
76
|
+
size: input.size,
|
|
77
|
+
contentType: input.contentType,
|
|
78
|
+
metadata: { agentMediaId: id },
|
|
79
|
+
});
|
|
80
|
+
await this.saveRecord({
|
|
81
|
+
id,
|
|
82
|
+
actor: input.actor,
|
|
83
|
+
fileName,
|
|
84
|
+
mimeType: input.contentType,
|
|
85
|
+
size: input.size,
|
|
86
|
+
path,
|
|
87
|
+
state: { status: 'pending', uploadId: session.id },
|
|
88
|
+
});
|
|
89
|
+
const base = (this.options.tusBasePath ?? DEFAULT_AGENT_MEDIA_TUS_BASE_PATH).replace(/\/+$/, '');
|
|
90
|
+
return { mediaId: id, uploadId: session.id, location: `${base}/${session.id}` };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Confirm the bytes of a {@link beginUpload} landed, and whole. `null` for an unknown id or one
|
|
94
|
+
* that is not `actor`'s; `409` while the bytes are still missing; `422` (and the record dropped)
|
|
95
|
+
* when what arrived is not the size that was declared. Idempotent on a ready record.
|
|
96
|
+
*/
|
|
97
|
+
async completeUpload(input) {
|
|
98
|
+
const record = await this.ownRecord(input.mediaId, input.actor);
|
|
99
|
+
if (record === null)
|
|
100
|
+
return null;
|
|
101
|
+
const ready = await this.ensureReady(record);
|
|
102
|
+
if (ready === 'missing') {
|
|
103
|
+
throw new MediaUploadRefusedError(409, `upload ${input.mediaId} has not finished`);
|
|
104
|
+
}
|
|
105
|
+
if (ready === 'mismatch') {
|
|
106
|
+
await this.remove(record.id);
|
|
107
|
+
throw new MediaUploadRefusedError(422, `upload ${input.mediaId} does not match its declared size`);
|
|
108
|
+
}
|
|
109
|
+
return this.toAttachment(ready, { forModel: false });
|
|
110
|
+
}
|
|
111
|
+
/** The actor drops one of their own attachments — aborting its upload if still in flight. */
|
|
112
|
+
async discard(input) {
|
|
113
|
+
const record = await this.ownRecord(input.mediaId, input.actor);
|
|
114
|
+
if (record === null)
|
|
115
|
+
return false;
|
|
116
|
+
await this.remove(record.id);
|
|
117
|
+
return true;
|
|
45
118
|
}
|
|
46
119
|
get diskName() {
|
|
47
120
|
return this.options.disk ?? this.deps.storage.defaultDisk;
|
|
@@ -49,54 +122,129 @@ export class MediaAttachmentStaging {
|
|
|
49
122
|
async stage(input) {
|
|
50
123
|
const id = this.newId();
|
|
51
124
|
const fileName = safeFileName(input.filename);
|
|
52
|
-
const path =
|
|
125
|
+
const path = this.pathFor(input.actor, id, fileName);
|
|
53
126
|
await this.deps.storage
|
|
54
127
|
.disk(this.diskName)
|
|
55
128
|
.put(path, input.data, { contentType: input.contentType });
|
|
56
|
-
const
|
|
57
|
-
const record = await this.deps.store.save({
|
|
129
|
+
const record = await this.saveRecord({
|
|
58
130
|
id,
|
|
59
|
-
|
|
60
|
-
ownerId: input.actor.id,
|
|
61
|
-
collection: this.collection,
|
|
62
|
-
name: stripExtension(fileName),
|
|
131
|
+
actor: input.actor,
|
|
63
132
|
fileName,
|
|
64
133
|
mimeType: input.contentType,
|
|
65
134
|
size: input.sizeBytes,
|
|
66
|
-
disk: this.diskName,
|
|
67
135
|
path,
|
|
68
|
-
|
|
69
|
-
customProperties: {},
|
|
70
|
-
conversions: {},
|
|
71
|
-
createdAt: timestamp,
|
|
72
|
-
updatedAt: timestamp,
|
|
136
|
+
state: { status: 'ready' },
|
|
73
137
|
});
|
|
74
138
|
return this.toAttachment(record, { forModel: false });
|
|
75
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* The attachment for `mediaId`, or `null` when it is unknown or this actor may not use it. The
|
|
142
|
+
* actor may use media they own, and media a message in one of THEIR threads already carries (a
|
|
143
|
+
* fork, a regenerate) — never anything else, unless `canAccess` says so.
|
|
144
|
+
*/
|
|
76
145
|
async resolve(input) {
|
|
77
146
|
const record = await this.deps.store.find(input.mediaId);
|
|
78
147
|
if (record === null || !this.isOurs(record))
|
|
79
148
|
return null;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (!may)
|
|
149
|
+
if (!(await this.canUse(record, input.actor)))
|
|
150
|
+
return null;
|
|
151
|
+
// A resumable upload whose bytes have not (fully) arrived is not attachable yet.
|
|
152
|
+
const ready = await this.ensureReady(record);
|
|
153
|
+
if (typeof ready === 'string')
|
|
86
154
|
return null;
|
|
87
|
-
return this.toAttachment(
|
|
155
|
+
return this.toAttachment(ready, { forModel: true });
|
|
156
|
+
}
|
|
157
|
+
async canUse(record, actor) {
|
|
158
|
+
const allowed = await this.defaultAccess(record, actor);
|
|
159
|
+
const custom = this.options.canAccess;
|
|
160
|
+
return custom === undefined ? allowed : (await custom({ record, actor, allowed })) === true;
|
|
161
|
+
}
|
|
162
|
+
async defaultAccess(record, actor) {
|
|
163
|
+
if (record.ownerId === actor.id)
|
|
164
|
+
return true;
|
|
165
|
+
const referenced = this.deps.agentStore?.referencedMediaIds?.bind(this.deps.agentStore);
|
|
166
|
+
if (referenced === undefined)
|
|
167
|
+
return false;
|
|
168
|
+
return (await referenced(actor.id, [record.id])).includes(record.id);
|
|
88
169
|
}
|
|
89
170
|
/** Delete an upload and its row. */
|
|
90
171
|
async remove(mediaId) {
|
|
91
172
|
const record = await this.deps.store.find(mediaId);
|
|
92
173
|
if (record === null || !this.isOurs(record))
|
|
93
174
|
return;
|
|
175
|
+
const state = stateOf(record);
|
|
176
|
+
if (state.status === 'pending' && state.uploadId !== undefined) {
|
|
177
|
+
await this.deps.uploads?.abort(state.uploadId).catch(() => undefined);
|
|
178
|
+
}
|
|
94
179
|
await this.deps.storage
|
|
95
180
|
.disk(record.disk)
|
|
96
181
|
.delete(record.path)
|
|
97
182
|
.catch(() => undefined);
|
|
98
183
|
await this.deps.store.delete(record.id);
|
|
99
184
|
}
|
|
185
|
+
validate(filename, contentType, size) {
|
|
186
|
+
if (typeof filename !== 'string' || filename.trim().length === 0) {
|
|
187
|
+
throw new MediaUploadRefusedError(400, 'filename is required');
|
|
188
|
+
}
|
|
189
|
+
if (typeof contentType !== 'string' || !this.allowed.includes(contentType)) {
|
|
190
|
+
throw new MediaUploadRefusedError(415, `content type "${String(contentType)}" is not allowed (allowed: ${this.allowed.join(', ')})`);
|
|
191
|
+
}
|
|
192
|
+
if (typeof size !== 'number' || !Number.isInteger(size) || size <= 0) {
|
|
193
|
+
throw new MediaUploadRefusedError(400, 'size must be a positive integer byte count');
|
|
194
|
+
}
|
|
195
|
+
if (size > this.maxBytes) {
|
|
196
|
+
throw new MediaUploadRefusedError(413, `file exceeds the ${this.maxBytes}-byte limit`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
pathFor(actor, id, fileName) {
|
|
200
|
+
return `${this.ownerType}/${encodeURIComponent(actor.id)}/${this.collection}/${id}/${fileName}`;
|
|
201
|
+
}
|
|
202
|
+
async saveRecord(input) {
|
|
203
|
+
const timestamp = this.now();
|
|
204
|
+
return this.deps.store.save({
|
|
205
|
+
id: input.id,
|
|
206
|
+
ownerType: this.ownerType,
|
|
207
|
+
ownerId: input.actor.id,
|
|
208
|
+
collection: this.collection,
|
|
209
|
+
name: stripExtension(input.fileName),
|
|
210
|
+
fileName: input.fileName,
|
|
211
|
+
mimeType: input.mimeType,
|
|
212
|
+
size: input.size,
|
|
213
|
+
disk: this.diskName,
|
|
214
|
+
path: input.path,
|
|
215
|
+
order: await this.deps.store.nextOrder(this.ownerType, input.actor.id, this.collection),
|
|
216
|
+
// A multipart upload is ready the moment it is stored, and carries no state — the same row
|
|
217
|
+
// shape as before resumable uploads existed.
|
|
218
|
+
customProperties: input.state.status === 'ready' ? {} : { agentAttachment: input.state },
|
|
219
|
+
conversions: {},
|
|
220
|
+
createdAt: timestamp,
|
|
221
|
+
updatedAt: timestamp,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
async ownRecord(mediaId, actor) {
|
|
225
|
+
const record = await this.deps.store.find(mediaId);
|
|
226
|
+
if (record === null || !this.isOurs(record) || record.ownerId !== actor.id)
|
|
227
|
+
return null;
|
|
228
|
+
return record;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* A ready record as-is; a pending one promoted to ready once its bytes are on the disk at exactly
|
|
232
|
+
* the declared size. `'missing'` while they are not; `'mismatch'` when they arrived at another size.
|
|
233
|
+
*/
|
|
234
|
+
async ensureReady(record) {
|
|
235
|
+
if (stateOf(record).status === 'ready')
|
|
236
|
+
return record;
|
|
237
|
+
const disk = this.deps.storage.disk(record.disk);
|
|
238
|
+
if (disk.exists === undefined || disk.getMetaData === undefined)
|
|
239
|
+
return 'missing';
|
|
240
|
+
if (!(await disk.exists(record.path)))
|
|
241
|
+
return 'missing';
|
|
242
|
+
const { contentLength } = await disk.getMetaData(record.path);
|
|
243
|
+
if (contentLength !== record.size || contentLength > this.maxBytes)
|
|
244
|
+
return 'mismatch';
|
|
245
|
+
const { agentAttachment: _done, ...customProperties } = record.customProperties;
|
|
246
|
+
return this.deps.store.save({ ...record, customProperties, updatedAt: this.now() });
|
|
247
|
+
}
|
|
100
248
|
isOurs(record) {
|
|
101
249
|
return record.ownerType === this.ownerType && record.collection === this.collection;
|
|
102
250
|
}
|
|
@@ -132,6 +280,10 @@ export class MediaAttachmentStaging {
|
|
|
132
280
|
};
|
|
133
281
|
}
|
|
134
282
|
}
|
|
283
|
+
function stateOf(record) {
|
|
284
|
+
const state = record.customProperties.agentAttachment;
|
|
285
|
+
return state ?? { status: 'ready' };
|
|
286
|
+
}
|
|
135
287
|
function safeFileName(filename) {
|
|
136
288
|
const last = filename.split(/[\\/]/).pop() ?? '';
|
|
137
289
|
// biome-ignore lint/suspicious/noControlCharactersInRegex: stripping control chars is the point.
|