@versionone/agility-sdk 1.0.0-alpha.3 → 1.0.0-alpha.4

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.cts CHANGED
@@ -11,7 +11,8 @@
11
11
  * aborted the caller's signal ended it
12
12
  * commandFailure api/asset answered 200 with failed commands inside (CommandFailureError)
13
13
  * protocol the server answered something the SDK cannot read
14
- * usage a mistake caught before any request (UsageError): fix the call
14
+ * usage a mistake caught before any request (UsageError): nothing was sent, so
15
+ * do not blame the server — fix the call (status is 0 here)
15
16
  * unknown none of the above
16
17
  */
17
18
  type ErrorKind = "auth" | "forbidden" | "notFound" | "invalid" | "transient" | "aborted" | "commandFailure" | "protocol" | "usage" | "unknown";
@@ -4302,7 +4303,7 @@ interface Violation {
4302
4303
  rule: string;
4303
4304
  /** "Story.Scope" when the violation names an attribute; null otherwise. */
4304
4305
  attribute: AttributeTokenRef | null;
4305
- /** The loc-2 tag naming what was violated, when the message carries one. */
4306
+ /** The loc-2 tag naming what was violated (`AttributeDefinition'Scope'Story`), when the message carries one; null for the token spelling. */
4306
4307
  tag: string | null;
4307
4308
  }
4308
4309
  /** The violation a failure message describes, or null when it is not one. */
@@ -4311,6 +4312,8 @@ declare function parseViolation(message: string): Violation | null;
4311
4312
  declare function failuresOf<Row extends Asset = Asset>(response: AssetApiResponse<Row>): CommandFailureDetail[];
4312
4313
  /** What a batch did, in the model's terms: the services read this, never the envelope. */
4313
4314
  interface Outcome<Row extends Asset = Asset> {
4315
+ /** The server's id for the request: what to quote when asking about a batch. Null for an outcome merged from several sends. */
4316
+ requestId: string | null;
4314
4317
  created: Oid[];
4315
4318
  modified: Oid[];
4316
4319
  operated: Oid[];
@@ -4319,7 +4322,12 @@ interface Outcome<Row extends Asset = Asset> {
4319
4322
  queryResults: (Row[] | null)[];
4320
4323
  durationSeconds: number | null;
4321
4324
  }
4322
- /** The outcome of a (translated) response: OIDs momentless, failures normalised. */
4325
+ /**
4326
+ * The outcome of a (translated) response: OIDs momentless, failures
4327
+ * normalised. Every field has a default, so a partial envelope (a test fake
4328
+ * that sends only queryResult) still yields a complete Outcome; consumers'
4329
+ * fakes rely on that, and the unit tests keep it so.
4330
+ */
4323
4331
  declare function outcomeOf<Row extends Asset = Asset>(response: AssetApiResponse<Row>): Outcome<Row>;
4324
4332
  /** An outcome with nothing in it, to merge several sends into. */
4325
4333
  declare const emptyOutcome: <Row extends Asset = Asset>() => Outcome<Row>;
@@ -4773,6 +4781,40 @@ declare function reversible(transport: Transport, receipt: Pick<Receipt, "revers
4773
4781
  reactivated: Oid[];
4774
4782
  }>;
4775
4783
 
4784
+ /**
4785
+ * The fields service: what a form for an asset type in a scope needs to
4786
+ * know, from three sources the API keeps apart —
4787
+ * - meta.v1 (through the schema): which attributes are REQUIRED to
4788
+ * create one (IsRequired and writable: Name and Scope on a Story);
4789
+ * - api/visibleFields: which attributes the product SHOWS for the type
4790
+ * in that scope, custom fields included once configured;
4791
+ * - the scope's Scheme: its IMPORTANT fields (Scheme.ImportantFields, a
4792
+ * list of attribute tokens) and whether they are enforced at close
4793
+ * (Scheme.IsRequiredAtClose).
4794
+ * One call, one answer, every list spelled as bare attribute names.
4795
+ */
4796
+
4797
+ interface FieldsOf {
4798
+ type: AssetTypeToken;
4799
+ scope: Oid;
4800
+ /** The scope's Scheme; null when the scope has none. */
4801
+ scheme: Oid | null;
4802
+ /** Attributes the server requires on a create (meta: IsRequired, writable). */
4803
+ required: string[];
4804
+ /** Attributes the product shows for the type in this scope (api/visibleFields). */
4805
+ visible: string[];
4806
+ /** The scheme's important fields that belong to this type (or an ancestor); [] when the scheme names none. */
4807
+ important: string[];
4808
+ /** Whether the scheme enforces its important fields when an asset is closed. */
4809
+ requiredAtClose: boolean;
4810
+ }
4811
+ /**
4812
+ * An important-field token as the scheme spells it ("Story.Owners", or a
4813
+ * bare "Owners") reduced to the attribute name when it belongs to one of
4814
+ * the types given; null otherwise.
4815
+ */
4816
+ declare function importantName(token: string, types: readonly AssetTypeToken[]): string | null;
4817
+
4776
4818
  /**
4777
4819
  * The guard: an api/asset batch sent as a compare-and-set, so a change only
4778
4820
  * lands on an asset nobody else has changed since it was read. Ported from
@@ -5012,6 +5054,33 @@ interface ReadResult<Row extends Asset = Asset> {
5012
5054
  declare const list: <Row extends Asset = Asset>(transport: Transport, type: string, params: ReadParams) => Promise<ReadResult<Row>>;
5013
5055
  /** One asset by OID. */
5014
5056
  declare function get<Row extends Asset = Asset>(transport: Transport, oid: Oid, select?: string[]): Promise<Row>;
5057
+ /**
5058
+ * What an operation answered with: the asset the server returned, as an
5059
+ * OID token — for Copy the copy, for anything else the operated asset —
5060
+ * and the moment the server stamped on it.
5061
+ */
5062
+ interface OperationResult {
5063
+ oid: Oid;
5064
+ moment: string | null;
5065
+ }
5066
+ /**
5067
+ * Run an operation (Copy, Inactivate, …) through rest-1, for its result.
5068
+ * api/asset's `execute` performs the same operations but reports only the
5069
+ * operated asset, so a Copy's new OID is unobservable there; rest-1 answers
5070
+ * it. Not idempotent: never retried.
5071
+ */
5072
+ declare function operate(transport: Transport, oid: Oid, op: string): Promise<OperationResult>;
5073
+ /** A new asset's template as the model carries it: the attributes the initializer set, no `_oid`. */
5074
+ type Template<Row extends Asset = Asset> = Partial<Omit<Row, "_oid">>;
5075
+ /**
5076
+ * The template for a new asset of `type` in a context (a Scope, a parent
5077
+ * asset): what the server's initializer would fill in — defaults nothing
5078
+ * else exposes. Idempotent, like any GET. Without a context the template
5079
+ * is empty, and an unknown context is echoed back, not refused.
5080
+ */
5081
+ declare function template<Row extends Asset = Asset>(transport: Transport, type: string, options?: {
5082
+ ctx?: Oid;
5083
+ }): Promise<Template<Row>>;
5015
5084
  /** A bounded history read: one row per moment, _oid carrying the moment. */
5016
5085
  declare const history: <Row extends Asset = Asset>(transport: Transport, target: string, params: ReadParams) => Promise<ReadResult<Row>>;
5017
5086
 
@@ -5019,18 +5088,22 @@ type rest1_AssetDocument = AssetDocument;
5019
5088
  type rest1_AssetRefDocument = AssetRefDocument;
5020
5089
  type rest1_AssetsDocument = AssetsDocument;
5021
5090
  type rest1_AttributeDocument = AttributeDocument;
5091
+ type rest1_OperationResult = OperationResult;
5022
5092
  type rest1_ReadParams = ReadParams;
5023
5093
  type rest1_ReadResult<Row extends Asset = Asset> = ReadResult<Row>;
5024
5094
  type rest1_RelationDocument = RelationDocument;
5095
+ type rest1_Template<Row extends Asset = Asset> = Template<Row>;
5025
5096
  declare const rest1_fromAssetDocument: typeof fromAssetDocument;
5026
5097
  declare const rest1_get: typeof get;
5027
5098
  declare const rest1_history: typeof history;
5028
5099
  declare const rest1_list: typeof list;
5029
5100
  declare const rest1_momentless: typeof momentless;
5101
+ declare const rest1_operate: typeof operate;
5102
+ declare const rest1_template: typeof template;
5030
5103
  declare const rest1_toQuery: typeof toQuery;
5031
5104
  declare namespace rest1 {
5032
- export { rest1_fromAssetDocument as fromAssetDocument, rest1_get as get, rest1_history as history, rest1_list as list, rest1_momentless as momentless, rest1_toQuery as toQuery };
5033
- export type { rest1_AssetDocument as AssetDocument, rest1_AssetRefDocument as AssetRefDocument, rest1_AssetsDocument as AssetsDocument, rest1_AttributeDocument as AttributeDocument, rest1_ReadParams as ReadParams, rest1_ReadResult as ReadResult, rest1_RelationDocument as RelationDocument };
5105
+ export { rest1_fromAssetDocument as fromAssetDocument, rest1_get as get, rest1_history as history, rest1_list as list, rest1_momentless as momentless, rest1_operate as operate, rest1_template as template, rest1_toQuery as toQuery };
5106
+ export type { rest1_AssetDocument as AssetDocument, rest1_AssetRefDocument as AssetRefDocument, rest1_AssetsDocument as AssetsDocument, rest1_AttributeDocument as AttributeDocument, rest1_OperationResult as OperationResult, rest1_ReadParams as ReadParams, rest1_ReadResult as ReadResult, rest1_RelationDocument as RelationDocument, rest1_Template as Template };
5034
5107
  }
5035
5108
 
5036
5109
  interface ClientOptions {
@@ -5076,12 +5149,15 @@ type Me = Pick<Member, "_oid" | "Name" | "Username" | "Nickname" | "Email">;
5076
5149
  * every write answers in the model's terms (an Outcome, never an envelope).
5077
5150
  *
5078
5151
  * Reads: `query`, `queries`, `get`, `queryPage`, `pages`, `all`, `me`. A
5079
- * query body is the same everywhere; the client picks the endpoint
5080
- * (query.v1 for plain reads — read-only by construction, so a request can
5081
- * be retried like a GET; api/asset where a total is wanted; rest-1 behind
5082
- * `data` for deleted assets and history). Writes: `assets.send`,
5083
- * `assets.sendGuarded`, `batch.run`. Services: `resolve`, `attachments`,
5084
- * `embeddedImages`, `schema`, `localize`, `urls`.
5152
+ * query body is the same everywhere; the client picks the endpoint.
5153
+ * query.v1 answers rows alone — the lightest response, and read-only by
5154
+ * construction, so a request can be resent like a GET — but its shape has
5155
+ * nowhere to put a total; api/asset reports one (`needTotal`) beside the
5156
+ * rows, which is why `queryPage` goes there and `query` does not. rest-1
5157
+ * sits behind `data` for what neither does: deleted assets, history, a
5158
+ * new asset's template, an operation's result. Writes: `assets.send`,
5159
+ * `assets.sendGuarded`, `batch.run`, `copy`. Services: `resolve`,
5160
+ * `fields`, `attachments`, `embeddedImages`, `schema`, `localize`, `urls`.
5085
5161
  */
5086
5162
  declare class AgilityApiClient {
5087
5163
  readonly transport: Transport;
@@ -5097,9 +5173,12 @@ declare class AgilityApiClient {
5097
5173
  withSignal(signal: AbortSignal): AgilityApiClient;
5098
5174
  /**
5099
5175
  * One query, its rows, translated. Sent to query.v1: it cannot write, so
5100
- * the request is retried like a GET after a network failure or a 5xx. A
5101
- * page is required; a query the server refuses throws (kind "invalid"),
5102
- * never an empty result.
5176
+ * the request is marked idempotent and the transport may resend it after
5177
+ * a network failure or a 5xx — when `retries` is set above its default
5178
+ * of 0. A page is required; a query the server refuses throws an
5179
+ * ApiError (kind "invalid", code QUERY_REJECTED; `message` holds the
5180
+ * server's sentences, `details` its whole error document), never an
5181
+ * empty result.
5103
5182
  */
5104
5183
  query<const F extends From, const Q extends QueryBody<F>>(q: Q & QueryBody<F>): Promise<RowOf<Q>[]>;
5105
5184
  query<Row extends Asset = Asset>(q: QueryBody): Promise<Row[]>;
@@ -5147,16 +5226,39 @@ declare class AgilityApiClient {
5147
5226
  */
5148
5227
  localize(tags: readonly string[], options?: LocalizeOptions): Promise<Localizations>;
5149
5228
  /**
5150
- * rest-1.v1, for what query.v1 cannot do: deleted assets (`deleted:
5151
- * true`), one asset by OID without a page, and history (one row per
5152
- * moment). Parameters are spelled as a query's (`select`, `filter`).
5229
+ * rest-1.v1, for what the other endpoints cannot do: deleted assets
5230
+ * (`deleted: true`), one asset by OID without a page, history (one row
5231
+ * per moment), a new asset's template (`template`: what the type's
5232
+ * initializer fills in for a context — a Timebox's next name and dates,
5233
+ * a Story's carry-over from a Request), and an operation's result
5234
+ * (`operate`: api/asset performs a Copy but never says what it made;
5235
+ * rest-1 answers the new OID). Parameters are spelled as a query's
5236
+ * (`select`, `filter`).
5153
5237
  */
5154
5238
  readonly data: {
5155
5239
  list: <Row extends Asset = Asset>(type: string, params: ReadParams) => Promise<ReadResult<Row>>;
5156
5240
  get: <Row extends Asset = Asset>(oid: string, select?: string[]) => Promise<Row>;
5157
5241
  history: <Row extends Asset = Asset>(target: string, params: ReadParams) => Promise<ReadResult<Row>>;
5242
+ template: <F extends From>(type: F, options?: {
5243
+ ctx?: Oid;
5244
+ }) => Promise<Partial<Omit<TypeOf<F>, "_oid">>>;
5245
+ operate: (oid: Oid, op: string) => Promise<OperationResult>;
5246
+ };
5247
+ /** Copy an asset (the server's Copy operation) and answer the copy's OID: the one thing api/asset's `execute: "Copy"` does not say. */
5248
+ copy(oid: Oid): Promise<Oid>;
5249
+ /**
5250
+ * What a form needs for an asset type in a scope: the attributes the
5251
+ * server requires to create one (meta), the ones the product shows there
5252
+ * (api/visibleFields, custom fields included once configured), and the
5253
+ * scope's scheme's important fields and whether they are enforced at
5254
+ * close. `visible` alone answers for several types and scopes at once.
5255
+ */
5256
+ readonly fields: {
5257
+ describe: (type: From, scope: Oid) => Promise<FieldsOf>;
5258
+ visible: (types: readonly From[], scopes: readonly Oid[]) => Promise<Record<string, string[]>>;
5259
+ visibleByAsset: (oid: Oid) => Promise<string[]>;
5158
5260
  };
5159
- /** @deprecated since 1.0.0-alpha.3: `client.query` / `client.queries` read through query.v1. Removed in 1.0.0. */
5261
+ /** @deprecated since 1.0.0-alpha.3: use `client.query` / `client.queries` (the same endpoint, query.v1; only the name moved). Removed in 1.0.0. */
5160
5262
  readonly queryV1: {
5161
5263
  query: <Row extends Asset = Asset>(q: QueryBody) => Promise<Row[]>;
5162
5264
  queries: <Row extends Asset = Asset>(qs: QueryBody[]) => Promise<Row[][]>;
@@ -5181,7 +5283,7 @@ declare class AgilityApiClient {
5181
5283
  * cover.
5182
5284
  */
5183
5285
  sendGuarded: <Row extends Asset = Asset>(commands: Command[], options?: Pick<SendOptions, "throwOnFailure">) => Promise<GuardedResult<Row>>;
5184
- /** @deprecated since 1.0.0-alpha.3: use `client.query` (or `client.queryPage` for a total). Removed in 1.0.0. */
5286
+ /** @deprecated since 1.0.0-alpha.3: use `client.query` (rows, through query.v1) or `client.queryPage` (rows and a total, through api/asset as this does). Removed in 1.0.0. */
5185
5287
  query: <Row extends Asset = Asset>(q: QueryBody) => Promise<Row[]>;
5186
5288
  /** @deprecated since 1.0.0-alpha.3: use `client.queries`. Removed in 1.0.0. */
5187
5289
  queries: <Row extends Asset = Asset>(qs: QueryBody[]) => Promise<Row[][]>;
@@ -5265,8 +5367,13 @@ declare class AgilityApiClient {
5265
5367
  };
5266
5368
  /** Where a browser opens things on this instance: an asset's page, an attachment's bytes, an embedded image. */
5267
5369
  readonly urls: {
5268
- /** The asset's page: assetdetail.v1 redirects to the type's own detail page (live 2026-11-12). */
5269
- asset: (oid: Oid) => string;
5370
+ /**
5371
+ * The asset's page, from an OID token or an asset Number (S-01001,
5372
+ * what a person typed and what a message shows): assetdetail.v1
5373
+ * resolves either and redirects to the type's own detail page; a signed-
5374
+ * out reader lands there after logging in. Anything else is a UsageError.
5375
+ */
5376
+ asset: (ref: Oid | string) => string;
5270
5377
  attachment: (id: string | number) => string;
5271
5378
  embeddedImage: (id: string | number) => string;
5272
5379
  };
@@ -5369,5 +5476,19 @@ declare namespace queryV1 {
5369
5476
  };
5370
5477
  }
5371
5478
 
5372
- export { ASSET_STATE_CODES, AgilityApiClient, ApiError, AttachmentUploadError, BatchRecordError, BatchSendError, CommandFailureError, INLINE_LIMIT, INVERSE, NUMBER_ROOTS, CHUNK as RESOLVE_CHUNK, Schema, TypeCache, UNGUARDABLE_TYPES, UnguardableError, UsageError, WrappedError, assetApi, assetStateOf, attachment, createFetchTransport, describe as describeBatch, guard, isAssetNumber, isOidToken, kindOf, loc2, meta, momentless, namesOf, parseOid, parseViolation, queryV1, resolveNumbers, resolveRef, rest1, reverseOf, reversible, runBatch, select, sendGuarded, snapshot, stampsOf, toOid, touchedBy, typeOfOid, unguardable };
5373
- export type { Access, Actual, Allocation, Application, Asset, AssetApiResponse, AssetChangedEventDefinition, AssetCreatedEventDefinition, AssetDocument, AssetNumberAttributeDefinition, AssetStateValue, AssetType, AssetTypeMap, AssetTypeName, AssetTypeToken, AssetsDocument, Attachment, AddOptions as AttachmentAddOptions, AttachmentCategory, AttachmentInfo, AttributeAddedEventDefinition, AttributeChangedEventDefinition, AttributeDefinition, AttributeLookup, AttributeRemovedEventDefinition, AttributeTokenRef, AttributeType, AttributeValue, BaseAsset, BatchOptions, Budget, BuildProject, BuildRun, BuildSource, BuildStatus, Bundle, BusinessRule, Bytes, CalendarEvent, CalendarEventCategory, Capacity, ChangeSet, ClassOfService, ClientConfig, ClientOptions, Command, CommandBody, CommandFailureDetail, CommandValue, Community, Concept, ConcreteAssetTypeName, Conversation, CreateBody, CreateType, CredentialsAttributeDefinition, CustomAttributes, CustomList, DateString, DefaultRule, Defect, DefectResolution, DefectType, Delivery, DeliveryCategory, Described, EmbeddedImage$1 as EmbeddedImage, Environment, Epic, EpicCategory, EpicPriority, EpicStatus, ErrorKind, ExecuteBody, ExecuteSecurityCheckAttributeDefinition, Expression, ExpressionImage, ExpressionSpace, ExternalAction, ExternalActionInvocation, FetchTransportConfig, From, Goal, GoalCategory, GoalPriority, Grant, GuardedResult, HierarchyRelationDefinition, Idea, IdeaCategory, IdeaChangeSet, IdeaComment, IdeaForum, IdeaStatus, IdeaUser, IdeasUserCache, Image, Issue, IssueCategory, IssuePriority, IssueResolution, IssueStatus, KeyResult, KeyResultCommitment, KeyResultUnit, Label, Link, LinkCategory, List, Localizations, LocalizeOptions, ManyToManyRelationDefinition, Me, Member, MemberLabel, Message, MessageReceipt, Metamodel, Milestone, MilestoneCategory, MultivalueAttributeDefinition, NameLookupFailure, Named, NoteCategory, Oid, OidParts, Okr, OkrObjective, OkrSession, OneToManyRelationDefinition, OperationExecutedEventDefinition, Outcome, Page, PagesOptions, PasswordAttributeDefinition, Phase, PlanningLevel, PlanningRoom, PrimaryWorkitem, PrincipalAttributeDefinition, Publication, QueryBody, ReadOptions, ReadParams, ReadResult, Receipt, Ref, RegressionPlan, RegressionSuite, RegressionTest, RegressionTestStatus, Release, Request, RequestBody, RequestCategory, RequestOptions, RequestPriority, RequestResolution, RequestStatus, Resolution, ResolvedAsset, ResponseType, Retrospective, RetrospectivePrompt, RetrospectiveTopic, Reverse, Roadmap, Role, Room, RowContext, RowOf, RowsOf, SavedView, Schedule, Scheme, Scope, ScopeLabel, ScopeStatus, SelectKey, SelectPath, SelectValue, Selected, SendOptions, SimpleAttributeDefinition, State, Status, Story, StoryCategory, StorySource, StoryStatus, StrategicTheme, StrategicThemeLevel, Subscription, SubscriptionTerm, SyntheticAttributeDefinition, Task, TaskCategory, TaskSource, TaskStatus, Team, TeamRoom, TeamWorkflow, Test, TestCategory, TestRun, TestSet, TestStatus, TestSuite, Theme, ThemeCategory, ThemeLabel, ThemeSource, ThemeStatus, Timebox, Timesheet, Topic, Transport, TriggerType, TypeOf, UnauthorizedContext, UnauthorizedDecision, Unguardable, UpdateBody, UpdateSecurityCheckAttributeDefinition, ValueStream, VersionLabel, Violation, Workflow, WorkflowTransition, Workitem, WorkitemPriority, WorkitemRisk };
5479
+ /** The attributes shown for each type in the scopes given: a map from type token to sorted attribute names. */
5480
+ declare function visibleFields(transport: Transport, types: readonly AssetTypeToken[], scopes: readonly Oid[]): Promise<Record<AssetTypeToken, string[]>>;
5481
+ /** The attributes shown for one asset, in its own Scope. */
5482
+ declare function visibleFieldsByAsset(transport: Transport, oid: Oid): Promise<string[]>;
5483
+
5484
+ declare const fields_visibleFields: typeof visibleFields;
5485
+ declare const fields_visibleFieldsByAsset: typeof visibleFieldsByAsset;
5486
+ declare namespace fields {
5487
+ export {
5488
+ fields_visibleFields as visibleFields,
5489
+ fields_visibleFieldsByAsset as visibleFieldsByAsset,
5490
+ };
5491
+ }
5492
+
5493
+ export { ASSET_STATE_CODES, AgilityApiClient, ApiError, AttachmentUploadError, BatchRecordError, BatchSendError, CommandFailureError, INLINE_LIMIT, INVERSE, NUMBER_ROOTS, CHUNK as RESOLVE_CHUNK, Schema, TypeCache, UNGUARDABLE_TYPES, UnguardableError, UsageError, WrappedError, assetApi, assetStateOf, attachment, createFetchTransport, describe as describeBatch, fields, guard, importantName, isAssetNumber, isOidToken, kindOf, loc2, meta, momentless, namesOf, parseOid, parseViolation, queryV1, resolveNumbers, resolveRef, rest1, reverseOf, reversible, runBatch, select, sendGuarded, snapshot, stampsOf, toOid, touchedBy, typeOfOid, unguardable };
5494
+ export type { Access, Actual, Allocation, Application, Asset, AssetApiResponse, AssetChangedEventDefinition, AssetCreatedEventDefinition, AssetDocument, AssetNumberAttributeDefinition, AssetStateValue, AssetType, AssetTypeMap, AssetTypeName, AssetTypeToken, AssetsDocument, Attachment, AddOptions as AttachmentAddOptions, AttachmentCategory, AttachmentInfo, AttributeAddedEventDefinition, AttributeChangedEventDefinition, AttributeDefinition, AttributeLookup, AttributeRemovedEventDefinition, AttributeTokenRef, AttributeType, AttributeValue, BaseAsset, BatchOptions, Budget, BuildProject, BuildRun, BuildSource, BuildStatus, Bundle, BusinessRule, Bytes, CalendarEvent, CalendarEventCategory, Capacity, ChangeSet, ClassOfService, ClientConfig, ClientOptions, Command, CommandBody, CommandFailureDetail, CommandValue, Community, Concept, ConcreteAssetTypeName, Conversation, CreateBody, CreateType, CredentialsAttributeDefinition, CustomAttributes, CustomList, DateString, DefaultRule, Defect, DefectResolution, DefectType, Delivery, DeliveryCategory, Described, EmbeddedImage$1 as EmbeddedImage, Environment, Epic, EpicCategory, EpicPriority, EpicStatus, ErrorKind, ExecuteBody, ExecuteSecurityCheckAttributeDefinition, Expression, ExpressionImage, ExpressionSpace, ExternalAction, ExternalActionInvocation, FetchTransportConfig, FieldsOf, From, Goal, GoalCategory, GoalPriority, Grant, GuardedResult, HierarchyRelationDefinition, Idea, IdeaCategory, IdeaChangeSet, IdeaComment, IdeaForum, IdeaStatus, IdeaUser, IdeasUserCache, Image, Issue, IssueCategory, IssuePriority, IssueResolution, IssueStatus, KeyResult, KeyResultCommitment, KeyResultUnit, Label, Link, LinkCategory, List, Localizations, LocalizeOptions, ManyToManyRelationDefinition, Me, Member, MemberLabel, Message, MessageReceipt, Metamodel, Milestone, MilestoneCategory, MultivalueAttributeDefinition, NameLookupFailure, Named, NoteCategory, Oid, OidParts, Okr, OkrObjective, OkrSession, OneToManyRelationDefinition, OperationExecutedEventDefinition, OperationResult, Outcome, Page, PagesOptions, PasswordAttributeDefinition, Phase, PlanningLevel, PlanningRoom, PrimaryWorkitem, PrincipalAttributeDefinition, Publication, QueryBody, ReadOptions, ReadParams, ReadResult, Receipt, Ref, RegressionPlan, RegressionSuite, RegressionTest, RegressionTestStatus, Release, Request, RequestBody, RequestCategory, RequestOptions, RequestPriority, RequestResolution, RequestStatus, Resolution, ResolvedAsset, ResponseType, Retrospective, RetrospectivePrompt, RetrospectiveTopic, Reverse, Roadmap, Role, Room, RowContext, RowOf, RowsOf, SavedView, Schedule, Scheme, Scope, ScopeLabel, ScopeStatus, SelectKey, SelectPath, SelectValue, Selected, SendOptions, SimpleAttributeDefinition, State, Status, Story, StoryCategory, StorySource, StoryStatus, StrategicTheme, StrategicThemeLevel, Subscription, SubscriptionTerm, SyntheticAttributeDefinition, Task, TaskCategory, TaskSource, TaskStatus, Team, TeamRoom, TeamWorkflow, Template, Test, TestCategory, TestRun, TestSet, TestStatus, TestSuite, Theme, ThemeCategory, ThemeLabel, ThemeSource, ThemeStatus, Timebox, Timesheet, Topic, Transport, TriggerType, TypeOf, UnauthorizedContext, UnauthorizedDecision, Unguardable, UpdateBody, UpdateSecurityCheckAttributeDefinition, ValueStream, VersionLabel, Violation, Workflow, WorkflowTransition, Workitem, WorkitemPriority, WorkitemRisk };
package/dist/index.d.ts CHANGED
@@ -11,7 +11,8 @@
11
11
  * aborted the caller's signal ended it
12
12
  * commandFailure api/asset answered 200 with failed commands inside (CommandFailureError)
13
13
  * protocol the server answered something the SDK cannot read
14
- * usage a mistake caught before any request (UsageError): fix the call
14
+ * usage a mistake caught before any request (UsageError): nothing was sent, so
15
+ * do not blame the server — fix the call (status is 0 here)
15
16
  * unknown none of the above
16
17
  */
17
18
  type ErrorKind = "auth" | "forbidden" | "notFound" | "invalid" | "transient" | "aborted" | "commandFailure" | "protocol" | "usage" | "unknown";
@@ -4302,7 +4303,7 @@ interface Violation {
4302
4303
  rule: string;
4303
4304
  /** "Story.Scope" when the violation names an attribute; null otherwise. */
4304
4305
  attribute: AttributeTokenRef | null;
4305
- /** The loc-2 tag naming what was violated, when the message carries one. */
4306
+ /** The loc-2 tag naming what was violated (`AttributeDefinition'Scope'Story`), when the message carries one; null for the token spelling. */
4306
4307
  tag: string | null;
4307
4308
  }
4308
4309
  /** The violation a failure message describes, or null when it is not one. */
@@ -4311,6 +4312,8 @@ declare function parseViolation(message: string): Violation | null;
4311
4312
  declare function failuresOf<Row extends Asset = Asset>(response: AssetApiResponse<Row>): CommandFailureDetail[];
4312
4313
  /** What a batch did, in the model's terms: the services read this, never the envelope. */
4313
4314
  interface Outcome<Row extends Asset = Asset> {
4315
+ /** The server's id for the request: what to quote when asking about a batch. Null for an outcome merged from several sends. */
4316
+ requestId: string | null;
4314
4317
  created: Oid[];
4315
4318
  modified: Oid[];
4316
4319
  operated: Oid[];
@@ -4319,7 +4322,12 @@ interface Outcome<Row extends Asset = Asset> {
4319
4322
  queryResults: (Row[] | null)[];
4320
4323
  durationSeconds: number | null;
4321
4324
  }
4322
- /** The outcome of a (translated) response: OIDs momentless, failures normalised. */
4325
+ /**
4326
+ * The outcome of a (translated) response: OIDs momentless, failures
4327
+ * normalised. Every field has a default, so a partial envelope (a test fake
4328
+ * that sends only queryResult) still yields a complete Outcome; consumers'
4329
+ * fakes rely on that, and the unit tests keep it so.
4330
+ */
4323
4331
  declare function outcomeOf<Row extends Asset = Asset>(response: AssetApiResponse<Row>): Outcome<Row>;
4324
4332
  /** An outcome with nothing in it, to merge several sends into. */
4325
4333
  declare const emptyOutcome: <Row extends Asset = Asset>() => Outcome<Row>;
@@ -4773,6 +4781,40 @@ declare function reversible(transport: Transport, receipt: Pick<Receipt, "revers
4773
4781
  reactivated: Oid[];
4774
4782
  }>;
4775
4783
 
4784
+ /**
4785
+ * The fields service: what a form for an asset type in a scope needs to
4786
+ * know, from three sources the API keeps apart —
4787
+ * - meta.v1 (through the schema): which attributes are REQUIRED to
4788
+ * create one (IsRequired and writable: Name and Scope on a Story);
4789
+ * - api/visibleFields: which attributes the product SHOWS for the type
4790
+ * in that scope, custom fields included once configured;
4791
+ * - the scope's Scheme: its IMPORTANT fields (Scheme.ImportantFields, a
4792
+ * list of attribute tokens) and whether they are enforced at close
4793
+ * (Scheme.IsRequiredAtClose).
4794
+ * One call, one answer, every list spelled as bare attribute names.
4795
+ */
4796
+
4797
+ interface FieldsOf {
4798
+ type: AssetTypeToken;
4799
+ scope: Oid;
4800
+ /** The scope's Scheme; null when the scope has none. */
4801
+ scheme: Oid | null;
4802
+ /** Attributes the server requires on a create (meta: IsRequired, writable). */
4803
+ required: string[];
4804
+ /** Attributes the product shows for the type in this scope (api/visibleFields). */
4805
+ visible: string[];
4806
+ /** The scheme's important fields that belong to this type (or an ancestor); [] when the scheme names none. */
4807
+ important: string[];
4808
+ /** Whether the scheme enforces its important fields when an asset is closed. */
4809
+ requiredAtClose: boolean;
4810
+ }
4811
+ /**
4812
+ * An important-field token as the scheme spells it ("Story.Owners", or a
4813
+ * bare "Owners") reduced to the attribute name when it belongs to one of
4814
+ * the types given; null otherwise.
4815
+ */
4816
+ declare function importantName(token: string, types: readonly AssetTypeToken[]): string | null;
4817
+
4776
4818
  /**
4777
4819
  * The guard: an api/asset batch sent as a compare-and-set, so a change only
4778
4820
  * lands on an asset nobody else has changed since it was read. Ported from
@@ -5012,6 +5054,33 @@ interface ReadResult<Row extends Asset = Asset> {
5012
5054
  declare const list: <Row extends Asset = Asset>(transport: Transport, type: string, params: ReadParams) => Promise<ReadResult<Row>>;
5013
5055
  /** One asset by OID. */
5014
5056
  declare function get<Row extends Asset = Asset>(transport: Transport, oid: Oid, select?: string[]): Promise<Row>;
5057
+ /**
5058
+ * What an operation answered with: the asset the server returned, as an
5059
+ * OID token — for Copy the copy, for anything else the operated asset —
5060
+ * and the moment the server stamped on it.
5061
+ */
5062
+ interface OperationResult {
5063
+ oid: Oid;
5064
+ moment: string | null;
5065
+ }
5066
+ /**
5067
+ * Run an operation (Copy, Inactivate, …) through rest-1, for its result.
5068
+ * api/asset's `execute` performs the same operations but reports only the
5069
+ * operated asset, so a Copy's new OID is unobservable there; rest-1 answers
5070
+ * it. Not idempotent: never retried.
5071
+ */
5072
+ declare function operate(transport: Transport, oid: Oid, op: string): Promise<OperationResult>;
5073
+ /** A new asset's template as the model carries it: the attributes the initializer set, no `_oid`. */
5074
+ type Template<Row extends Asset = Asset> = Partial<Omit<Row, "_oid">>;
5075
+ /**
5076
+ * The template for a new asset of `type` in a context (a Scope, a parent
5077
+ * asset): what the server's initializer would fill in — defaults nothing
5078
+ * else exposes. Idempotent, like any GET. Without a context the template
5079
+ * is empty, and an unknown context is echoed back, not refused.
5080
+ */
5081
+ declare function template<Row extends Asset = Asset>(transport: Transport, type: string, options?: {
5082
+ ctx?: Oid;
5083
+ }): Promise<Template<Row>>;
5015
5084
  /** A bounded history read: one row per moment, _oid carrying the moment. */
5016
5085
  declare const history: <Row extends Asset = Asset>(transport: Transport, target: string, params: ReadParams) => Promise<ReadResult<Row>>;
5017
5086
 
@@ -5019,18 +5088,22 @@ type rest1_AssetDocument = AssetDocument;
5019
5088
  type rest1_AssetRefDocument = AssetRefDocument;
5020
5089
  type rest1_AssetsDocument = AssetsDocument;
5021
5090
  type rest1_AttributeDocument = AttributeDocument;
5091
+ type rest1_OperationResult = OperationResult;
5022
5092
  type rest1_ReadParams = ReadParams;
5023
5093
  type rest1_ReadResult<Row extends Asset = Asset> = ReadResult<Row>;
5024
5094
  type rest1_RelationDocument = RelationDocument;
5095
+ type rest1_Template<Row extends Asset = Asset> = Template<Row>;
5025
5096
  declare const rest1_fromAssetDocument: typeof fromAssetDocument;
5026
5097
  declare const rest1_get: typeof get;
5027
5098
  declare const rest1_history: typeof history;
5028
5099
  declare const rest1_list: typeof list;
5029
5100
  declare const rest1_momentless: typeof momentless;
5101
+ declare const rest1_operate: typeof operate;
5102
+ declare const rest1_template: typeof template;
5030
5103
  declare const rest1_toQuery: typeof toQuery;
5031
5104
  declare namespace rest1 {
5032
- export { rest1_fromAssetDocument as fromAssetDocument, rest1_get as get, rest1_history as history, rest1_list as list, rest1_momentless as momentless, rest1_toQuery as toQuery };
5033
- export type { rest1_AssetDocument as AssetDocument, rest1_AssetRefDocument as AssetRefDocument, rest1_AssetsDocument as AssetsDocument, rest1_AttributeDocument as AttributeDocument, rest1_ReadParams as ReadParams, rest1_ReadResult as ReadResult, rest1_RelationDocument as RelationDocument };
5105
+ export { rest1_fromAssetDocument as fromAssetDocument, rest1_get as get, rest1_history as history, rest1_list as list, rest1_momentless as momentless, rest1_operate as operate, rest1_template as template, rest1_toQuery as toQuery };
5106
+ export type { rest1_AssetDocument as AssetDocument, rest1_AssetRefDocument as AssetRefDocument, rest1_AssetsDocument as AssetsDocument, rest1_AttributeDocument as AttributeDocument, rest1_OperationResult as OperationResult, rest1_ReadParams as ReadParams, rest1_ReadResult as ReadResult, rest1_RelationDocument as RelationDocument, rest1_Template as Template };
5034
5107
  }
5035
5108
 
5036
5109
  interface ClientOptions {
@@ -5076,12 +5149,15 @@ type Me = Pick<Member, "_oid" | "Name" | "Username" | "Nickname" | "Email">;
5076
5149
  * every write answers in the model's terms (an Outcome, never an envelope).
5077
5150
  *
5078
5151
  * Reads: `query`, `queries`, `get`, `queryPage`, `pages`, `all`, `me`. A
5079
- * query body is the same everywhere; the client picks the endpoint
5080
- * (query.v1 for plain reads — read-only by construction, so a request can
5081
- * be retried like a GET; api/asset where a total is wanted; rest-1 behind
5082
- * `data` for deleted assets and history). Writes: `assets.send`,
5083
- * `assets.sendGuarded`, `batch.run`. Services: `resolve`, `attachments`,
5084
- * `embeddedImages`, `schema`, `localize`, `urls`.
5152
+ * query body is the same everywhere; the client picks the endpoint.
5153
+ * query.v1 answers rows alone — the lightest response, and read-only by
5154
+ * construction, so a request can be resent like a GET — but its shape has
5155
+ * nowhere to put a total; api/asset reports one (`needTotal`) beside the
5156
+ * rows, which is why `queryPage` goes there and `query` does not. rest-1
5157
+ * sits behind `data` for what neither does: deleted assets, history, a
5158
+ * new asset's template, an operation's result. Writes: `assets.send`,
5159
+ * `assets.sendGuarded`, `batch.run`, `copy`. Services: `resolve`,
5160
+ * `fields`, `attachments`, `embeddedImages`, `schema`, `localize`, `urls`.
5085
5161
  */
5086
5162
  declare class AgilityApiClient {
5087
5163
  readonly transport: Transport;
@@ -5097,9 +5173,12 @@ declare class AgilityApiClient {
5097
5173
  withSignal(signal: AbortSignal): AgilityApiClient;
5098
5174
  /**
5099
5175
  * One query, its rows, translated. Sent to query.v1: it cannot write, so
5100
- * the request is retried like a GET after a network failure or a 5xx. A
5101
- * page is required; a query the server refuses throws (kind "invalid"),
5102
- * never an empty result.
5176
+ * the request is marked idempotent and the transport may resend it after
5177
+ * a network failure or a 5xx — when `retries` is set above its default
5178
+ * of 0. A page is required; a query the server refuses throws an
5179
+ * ApiError (kind "invalid", code QUERY_REJECTED; `message` holds the
5180
+ * server's sentences, `details` its whole error document), never an
5181
+ * empty result.
5103
5182
  */
5104
5183
  query<const F extends From, const Q extends QueryBody<F>>(q: Q & QueryBody<F>): Promise<RowOf<Q>[]>;
5105
5184
  query<Row extends Asset = Asset>(q: QueryBody): Promise<Row[]>;
@@ -5147,16 +5226,39 @@ declare class AgilityApiClient {
5147
5226
  */
5148
5227
  localize(tags: readonly string[], options?: LocalizeOptions): Promise<Localizations>;
5149
5228
  /**
5150
- * rest-1.v1, for what query.v1 cannot do: deleted assets (`deleted:
5151
- * true`), one asset by OID without a page, and history (one row per
5152
- * moment). Parameters are spelled as a query's (`select`, `filter`).
5229
+ * rest-1.v1, for what the other endpoints cannot do: deleted assets
5230
+ * (`deleted: true`), one asset by OID without a page, history (one row
5231
+ * per moment), a new asset's template (`template`: what the type's
5232
+ * initializer fills in for a context — a Timebox's next name and dates,
5233
+ * a Story's carry-over from a Request), and an operation's result
5234
+ * (`operate`: api/asset performs a Copy but never says what it made;
5235
+ * rest-1 answers the new OID). Parameters are spelled as a query's
5236
+ * (`select`, `filter`).
5153
5237
  */
5154
5238
  readonly data: {
5155
5239
  list: <Row extends Asset = Asset>(type: string, params: ReadParams) => Promise<ReadResult<Row>>;
5156
5240
  get: <Row extends Asset = Asset>(oid: string, select?: string[]) => Promise<Row>;
5157
5241
  history: <Row extends Asset = Asset>(target: string, params: ReadParams) => Promise<ReadResult<Row>>;
5242
+ template: <F extends From>(type: F, options?: {
5243
+ ctx?: Oid;
5244
+ }) => Promise<Partial<Omit<TypeOf<F>, "_oid">>>;
5245
+ operate: (oid: Oid, op: string) => Promise<OperationResult>;
5246
+ };
5247
+ /** Copy an asset (the server's Copy operation) and answer the copy's OID: the one thing api/asset's `execute: "Copy"` does not say. */
5248
+ copy(oid: Oid): Promise<Oid>;
5249
+ /**
5250
+ * What a form needs for an asset type in a scope: the attributes the
5251
+ * server requires to create one (meta), the ones the product shows there
5252
+ * (api/visibleFields, custom fields included once configured), and the
5253
+ * scope's scheme's important fields and whether they are enforced at
5254
+ * close. `visible` alone answers for several types and scopes at once.
5255
+ */
5256
+ readonly fields: {
5257
+ describe: (type: From, scope: Oid) => Promise<FieldsOf>;
5258
+ visible: (types: readonly From[], scopes: readonly Oid[]) => Promise<Record<string, string[]>>;
5259
+ visibleByAsset: (oid: Oid) => Promise<string[]>;
5158
5260
  };
5159
- /** @deprecated since 1.0.0-alpha.3: `client.query` / `client.queries` read through query.v1. Removed in 1.0.0. */
5261
+ /** @deprecated since 1.0.0-alpha.3: use `client.query` / `client.queries` (the same endpoint, query.v1; only the name moved). Removed in 1.0.0. */
5160
5262
  readonly queryV1: {
5161
5263
  query: <Row extends Asset = Asset>(q: QueryBody) => Promise<Row[]>;
5162
5264
  queries: <Row extends Asset = Asset>(qs: QueryBody[]) => Promise<Row[][]>;
@@ -5181,7 +5283,7 @@ declare class AgilityApiClient {
5181
5283
  * cover.
5182
5284
  */
5183
5285
  sendGuarded: <Row extends Asset = Asset>(commands: Command[], options?: Pick<SendOptions, "throwOnFailure">) => Promise<GuardedResult<Row>>;
5184
- /** @deprecated since 1.0.0-alpha.3: use `client.query` (or `client.queryPage` for a total). Removed in 1.0.0. */
5286
+ /** @deprecated since 1.0.0-alpha.3: use `client.query` (rows, through query.v1) or `client.queryPage` (rows and a total, through api/asset as this does). Removed in 1.0.0. */
5185
5287
  query: <Row extends Asset = Asset>(q: QueryBody) => Promise<Row[]>;
5186
5288
  /** @deprecated since 1.0.0-alpha.3: use `client.queries`. Removed in 1.0.0. */
5187
5289
  queries: <Row extends Asset = Asset>(qs: QueryBody[]) => Promise<Row[][]>;
@@ -5265,8 +5367,13 @@ declare class AgilityApiClient {
5265
5367
  };
5266
5368
  /** Where a browser opens things on this instance: an asset's page, an attachment's bytes, an embedded image. */
5267
5369
  readonly urls: {
5268
- /** The asset's page: assetdetail.v1 redirects to the type's own detail page (live 2026-11-12). */
5269
- asset: (oid: Oid) => string;
5370
+ /**
5371
+ * The asset's page, from an OID token or an asset Number (S-01001,
5372
+ * what a person typed and what a message shows): assetdetail.v1
5373
+ * resolves either and redirects to the type's own detail page; a signed-
5374
+ * out reader lands there after logging in. Anything else is a UsageError.
5375
+ */
5376
+ asset: (ref: Oid | string) => string;
5270
5377
  attachment: (id: string | number) => string;
5271
5378
  embeddedImage: (id: string | number) => string;
5272
5379
  };
@@ -5369,5 +5476,19 @@ declare namespace queryV1 {
5369
5476
  };
5370
5477
  }
5371
5478
 
5372
- export { ASSET_STATE_CODES, AgilityApiClient, ApiError, AttachmentUploadError, BatchRecordError, BatchSendError, CommandFailureError, INLINE_LIMIT, INVERSE, NUMBER_ROOTS, CHUNK as RESOLVE_CHUNK, Schema, TypeCache, UNGUARDABLE_TYPES, UnguardableError, UsageError, WrappedError, assetApi, assetStateOf, attachment, createFetchTransport, describe as describeBatch, guard, isAssetNumber, isOidToken, kindOf, loc2, meta, momentless, namesOf, parseOid, parseViolation, queryV1, resolveNumbers, resolveRef, rest1, reverseOf, reversible, runBatch, select, sendGuarded, snapshot, stampsOf, toOid, touchedBy, typeOfOid, unguardable };
5373
- export type { Access, Actual, Allocation, Application, Asset, AssetApiResponse, AssetChangedEventDefinition, AssetCreatedEventDefinition, AssetDocument, AssetNumberAttributeDefinition, AssetStateValue, AssetType, AssetTypeMap, AssetTypeName, AssetTypeToken, AssetsDocument, Attachment, AddOptions as AttachmentAddOptions, AttachmentCategory, AttachmentInfo, AttributeAddedEventDefinition, AttributeChangedEventDefinition, AttributeDefinition, AttributeLookup, AttributeRemovedEventDefinition, AttributeTokenRef, AttributeType, AttributeValue, BaseAsset, BatchOptions, Budget, BuildProject, BuildRun, BuildSource, BuildStatus, Bundle, BusinessRule, Bytes, CalendarEvent, CalendarEventCategory, Capacity, ChangeSet, ClassOfService, ClientConfig, ClientOptions, Command, CommandBody, CommandFailureDetail, CommandValue, Community, Concept, ConcreteAssetTypeName, Conversation, CreateBody, CreateType, CredentialsAttributeDefinition, CustomAttributes, CustomList, DateString, DefaultRule, Defect, DefectResolution, DefectType, Delivery, DeliveryCategory, Described, EmbeddedImage$1 as EmbeddedImage, Environment, Epic, EpicCategory, EpicPriority, EpicStatus, ErrorKind, ExecuteBody, ExecuteSecurityCheckAttributeDefinition, Expression, ExpressionImage, ExpressionSpace, ExternalAction, ExternalActionInvocation, FetchTransportConfig, From, Goal, GoalCategory, GoalPriority, Grant, GuardedResult, HierarchyRelationDefinition, Idea, IdeaCategory, IdeaChangeSet, IdeaComment, IdeaForum, IdeaStatus, IdeaUser, IdeasUserCache, Image, Issue, IssueCategory, IssuePriority, IssueResolution, IssueStatus, KeyResult, KeyResultCommitment, KeyResultUnit, Label, Link, LinkCategory, List, Localizations, LocalizeOptions, ManyToManyRelationDefinition, Me, Member, MemberLabel, Message, MessageReceipt, Metamodel, Milestone, MilestoneCategory, MultivalueAttributeDefinition, NameLookupFailure, Named, NoteCategory, Oid, OidParts, Okr, OkrObjective, OkrSession, OneToManyRelationDefinition, OperationExecutedEventDefinition, Outcome, Page, PagesOptions, PasswordAttributeDefinition, Phase, PlanningLevel, PlanningRoom, PrimaryWorkitem, PrincipalAttributeDefinition, Publication, QueryBody, ReadOptions, ReadParams, ReadResult, Receipt, Ref, RegressionPlan, RegressionSuite, RegressionTest, RegressionTestStatus, Release, Request, RequestBody, RequestCategory, RequestOptions, RequestPriority, RequestResolution, RequestStatus, Resolution, ResolvedAsset, ResponseType, Retrospective, RetrospectivePrompt, RetrospectiveTopic, Reverse, Roadmap, Role, Room, RowContext, RowOf, RowsOf, SavedView, Schedule, Scheme, Scope, ScopeLabel, ScopeStatus, SelectKey, SelectPath, SelectValue, Selected, SendOptions, SimpleAttributeDefinition, State, Status, Story, StoryCategory, StorySource, StoryStatus, StrategicTheme, StrategicThemeLevel, Subscription, SubscriptionTerm, SyntheticAttributeDefinition, Task, TaskCategory, TaskSource, TaskStatus, Team, TeamRoom, TeamWorkflow, Test, TestCategory, TestRun, TestSet, TestStatus, TestSuite, Theme, ThemeCategory, ThemeLabel, ThemeSource, ThemeStatus, Timebox, Timesheet, Topic, Transport, TriggerType, TypeOf, UnauthorizedContext, UnauthorizedDecision, Unguardable, UpdateBody, UpdateSecurityCheckAttributeDefinition, ValueStream, VersionLabel, Violation, Workflow, WorkflowTransition, Workitem, WorkitemPriority, WorkitemRisk };
5479
+ /** The attributes shown for each type in the scopes given: a map from type token to sorted attribute names. */
5480
+ declare function visibleFields(transport: Transport, types: readonly AssetTypeToken[], scopes: readonly Oid[]): Promise<Record<AssetTypeToken, string[]>>;
5481
+ /** The attributes shown for one asset, in its own Scope. */
5482
+ declare function visibleFieldsByAsset(transport: Transport, oid: Oid): Promise<string[]>;
5483
+
5484
+ declare const fields_visibleFields: typeof visibleFields;
5485
+ declare const fields_visibleFieldsByAsset: typeof visibleFieldsByAsset;
5486
+ declare namespace fields {
5487
+ export {
5488
+ fields_visibleFields as visibleFields,
5489
+ fields_visibleFieldsByAsset as visibleFieldsByAsset,
5490
+ };
5491
+ }
5492
+
5493
+ export { ASSET_STATE_CODES, AgilityApiClient, ApiError, AttachmentUploadError, BatchRecordError, BatchSendError, CommandFailureError, INLINE_LIMIT, INVERSE, NUMBER_ROOTS, CHUNK as RESOLVE_CHUNK, Schema, TypeCache, UNGUARDABLE_TYPES, UnguardableError, UsageError, WrappedError, assetApi, assetStateOf, attachment, createFetchTransport, describe as describeBatch, fields, guard, importantName, isAssetNumber, isOidToken, kindOf, loc2, meta, momentless, namesOf, parseOid, parseViolation, queryV1, resolveNumbers, resolveRef, rest1, reverseOf, reversible, runBatch, select, sendGuarded, snapshot, stampsOf, toOid, touchedBy, typeOfOid, unguardable };
5494
+ export type { Access, Actual, Allocation, Application, Asset, AssetApiResponse, AssetChangedEventDefinition, AssetCreatedEventDefinition, AssetDocument, AssetNumberAttributeDefinition, AssetStateValue, AssetType, AssetTypeMap, AssetTypeName, AssetTypeToken, AssetsDocument, Attachment, AddOptions as AttachmentAddOptions, AttachmentCategory, AttachmentInfo, AttributeAddedEventDefinition, AttributeChangedEventDefinition, AttributeDefinition, AttributeLookup, AttributeRemovedEventDefinition, AttributeTokenRef, AttributeType, AttributeValue, BaseAsset, BatchOptions, Budget, BuildProject, BuildRun, BuildSource, BuildStatus, Bundle, BusinessRule, Bytes, CalendarEvent, CalendarEventCategory, Capacity, ChangeSet, ClassOfService, ClientConfig, ClientOptions, Command, CommandBody, CommandFailureDetail, CommandValue, Community, Concept, ConcreteAssetTypeName, Conversation, CreateBody, CreateType, CredentialsAttributeDefinition, CustomAttributes, CustomList, DateString, DefaultRule, Defect, DefectResolution, DefectType, Delivery, DeliveryCategory, Described, EmbeddedImage$1 as EmbeddedImage, Environment, Epic, EpicCategory, EpicPriority, EpicStatus, ErrorKind, ExecuteBody, ExecuteSecurityCheckAttributeDefinition, Expression, ExpressionImage, ExpressionSpace, ExternalAction, ExternalActionInvocation, FetchTransportConfig, FieldsOf, From, Goal, GoalCategory, GoalPriority, Grant, GuardedResult, HierarchyRelationDefinition, Idea, IdeaCategory, IdeaChangeSet, IdeaComment, IdeaForum, IdeaStatus, IdeaUser, IdeasUserCache, Image, Issue, IssueCategory, IssuePriority, IssueResolution, IssueStatus, KeyResult, KeyResultCommitment, KeyResultUnit, Label, Link, LinkCategory, List, Localizations, LocalizeOptions, ManyToManyRelationDefinition, Me, Member, MemberLabel, Message, MessageReceipt, Metamodel, Milestone, MilestoneCategory, MultivalueAttributeDefinition, NameLookupFailure, Named, NoteCategory, Oid, OidParts, Okr, OkrObjective, OkrSession, OneToManyRelationDefinition, OperationExecutedEventDefinition, OperationResult, Outcome, Page, PagesOptions, PasswordAttributeDefinition, Phase, PlanningLevel, PlanningRoom, PrimaryWorkitem, PrincipalAttributeDefinition, Publication, QueryBody, ReadOptions, ReadParams, ReadResult, Receipt, Ref, RegressionPlan, RegressionSuite, RegressionTest, RegressionTestStatus, Release, Request, RequestBody, RequestCategory, RequestOptions, RequestPriority, RequestResolution, RequestStatus, Resolution, ResolvedAsset, ResponseType, Retrospective, RetrospectivePrompt, RetrospectiveTopic, Reverse, Roadmap, Role, Room, RowContext, RowOf, RowsOf, SavedView, Schedule, Scheme, Scope, ScopeLabel, ScopeStatus, SelectKey, SelectPath, SelectValue, Selected, SendOptions, SimpleAttributeDefinition, State, Status, Story, StoryCategory, StorySource, StoryStatus, StrategicTheme, StrategicThemeLevel, Subscription, SubscriptionTerm, SyntheticAttributeDefinition, Task, TaskCategory, TaskSource, TaskStatus, Team, TeamRoom, TeamWorkflow, Template, Test, TestCategory, TestRun, TestSet, TestStatus, TestSuite, Theme, ThemeCategory, ThemeLabel, ThemeSource, ThemeStatus, Timebox, Timesheet, Topic, Transport, TriggerType, TypeOf, UnauthorizedContext, UnauthorizedDecision, Unguardable, UpdateBody, UpdateSecurityCheckAttributeDefinition, ValueStream, VersionLabel, Violation, Workflow, WorkflowTransition, Workitem, WorkitemPriority, WorkitemRisk };