@orchestraworks/cli 0.5.8 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/api/approval.js +3 -3
  3. package/dist/cli/commands/outpost/local.js +3 -3
  4. package/dist/cli/commands/outpost/machine-names.d.ts +17 -0
  5. package/dist/cli/commands/outpost/machine-names.js +22 -0
  6. package/dist/cli/commands/outpost/up.js +7 -5
  7. package/dist/cli/commands/worker/enroll.d.ts +4 -3
  8. package/dist/cli/commands/worker/enroll.js +4 -3
  9. package/dist/cli/core/auth.d.ts +11 -1
  10. package/dist/cli/core/auth.js +21 -4
  11. package/dist/cli/core/session-body.d.ts +1 -1
  12. package/dist/cli/core/session-body.js +1 -1
  13. package/dist/cli/firstRun.js +2 -2
  14. package/dist/cli/main.js +4 -3
  15. package/dist/constructs/environment.d.ts +24 -11
  16. package/dist/constructs/environment.js +76 -12
  17. package/dist/constructs/secret.d.ts +17 -7
  18. package/dist/constructs/secret.js +24 -16
  19. package/dist/core/labels.d.ts +32 -6
  20. package/dist/core/labels.js +70 -8
  21. package/dist/engine/diff.js +38 -11
  22. package/dist/engine/gateway-key-reconcile.d.ts +1 -2
  23. package/dist/engine/gateway-key-reconcile.js +19 -15
  24. package/dist/engine/pipeline-reconcile.js +2 -2
  25. package/dist/engine/pipeline-workflow-reconcile.js +15 -9
  26. package/dist/engine/reconcile.js +48 -15
  27. package/dist/engine/refusals.d.ts +0 -5
  28. package/dist/engine/refusals.js +1 -5
  29. package/dist/engine/secrets-apply.d.ts +10 -14
  30. package/dist/engine/secrets-apply.js +12 -17
  31. package/dist/engine/workflow-reconcile.d.ts +1 -1
  32. package/dist/generated/cli-commands.json +170 -34
  33. package/dist/generated/providers.d.ts +40 -0
  34. package/dist/generated/providers.js +30 -0
  35. package/docs/REFERENCE.md +9 -7
  36. package/node_modules/@orchestraworks/client/dist/esm/models/ApiErrorDetail.d.ts +1 -1
  37. package/node_modules/@orchestraworks/client/dist/esm/models/CreateEnvironmentRequest.d.ts +7 -0
  38. package/node_modules/@orchestraworks/client/dist/esm/models/CreateEnvironmentRequest.js +3 -0
  39. package/node_modules/@orchestraworks/client/dist/esm/models/CreateSecretRequest.d.ts +4 -3
  40. package/node_modules/@orchestraworks/client/dist/esm/models/Environment.d.ts +7 -0
  41. package/node_modules/@orchestraworks/client/dist/esm/models/Environment.js +3 -0
  42. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentCredential.d.ts +38 -0
  43. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentCredential.js +45 -0
  44. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentProvisionSpec.d.ts +1 -1
  45. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentProvisionSpecRequest.d.ts +1 -1
  46. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentSnapshot.d.ts +1 -1
  47. package/node_modules/@orchestraworks/client/dist/esm/models/InjectionRecipe.d.ts +6 -0
  48. package/node_modules/@orchestraworks/client/dist/esm/models/InjectionRecipe.js +2 -0
  49. package/node_modules/@orchestraworks/client/dist/esm/models/OAuthTokenRequest.d.ts +1 -1
  50. package/node_modules/@orchestraworks/client/dist/esm/models/Secret.d.ts +1 -7
  51. package/node_modules/@orchestraworks/client/dist/esm/models/Secret.js +0 -4
  52. package/node_modules/@orchestraworks/client/dist/esm/models/UpdateEnvironmentRequest.d.ts +7 -0
  53. package/node_modules/@orchestraworks/client/dist/esm/models/UpdateEnvironmentRequest.js +3 -0
  54. package/node_modules/@orchestraworks/client/dist/esm/models/UpdateSecretRequest.d.ts +4 -3
  55. package/node_modules/@orchestraworks/client/dist/esm/models/index.d.ts +1 -0
  56. package/node_modules/@orchestraworks/client/dist/esm/models/index.js +1 -0
  57. package/node_modules/@orchestraworks/client/dist/models/ApiErrorDetail.d.ts +1 -1
  58. package/node_modules/@orchestraworks/client/dist/models/CreateEnvironmentRequest.d.ts +7 -0
  59. package/node_modules/@orchestraworks/client/dist/models/CreateEnvironmentRequest.js +3 -0
  60. package/node_modules/@orchestraworks/client/dist/models/CreateSecretRequest.d.ts +4 -3
  61. package/node_modules/@orchestraworks/client/dist/models/Environment.d.ts +7 -0
  62. package/node_modules/@orchestraworks/client/dist/models/Environment.js +3 -0
  63. package/node_modules/@orchestraworks/client/dist/models/EnvironmentCredential.d.ts +38 -0
  64. package/node_modules/@orchestraworks/client/dist/models/EnvironmentCredential.js +52 -0
  65. package/node_modules/@orchestraworks/client/dist/models/EnvironmentProvisionSpec.d.ts +1 -1
  66. package/node_modules/@orchestraworks/client/dist/models/EnvironmentProvisionSpecRequest.d.ts +1 -1
  67. package/node_modules/@orchestraworks/client/dist/models/EnvironmentSnapshot.d.ts +1 -1
  68. package/node_modules/@orchestraworks/client/dist/models/InjectionRecipe.d.ts +6 -0
  69. package/node_modules/@orchestraworks/client/dist/models/InjectionRecipe.js +2 -0
  70. package/node_modules/@orchestraworks/client/dist/models/OAuthTokenRequest.d.ts +1 -1
  71. package/node_modules/@orchestraworks/client/dist/models/Secret.d.ts +1 -7
  72. package/node_modules/@orchestraworks/client/dist/models/Secret.js +0 -4
  73. package/node_modules/@orchestraworks/client/dist/models/UpdateEnvironmentRequest.d.ts +7 -0
  74. package/node_modules/@orchestraworks/client/dist/models/UpdateEnvironmentRequest.js +3 -0
  75. package/node_modules/@orchestraworks/client/dist/models/UpdateSecretRequest.d.ts +4 -3
  76. package/node_modules/@orchestraworks/client/dist/models/index.d.ts +1 -0
  77. package/node_modules/@orchestraworks/client/dist/models/index.js +1 -0
  78. package/node_modules/@orchestraworks/client/package.json +1 -1
  79. package/package.json +4 -4
  80. package/skills/orchestra/SKILL.md +132 -18
  81. package/skills/orchestra-fdk/references/authoring.md +511 -20
  82. package/skills/orchestra-fdk/references/environment.md +49 -12
  83. package/skills/orchestra-fdk/references/integrations/code-repo.md +26 -5
  84. package/skills/orchestra-fdk/references/phases/1-discover.md +1 -1
  85. package/skills/orchestra-fdk/references/phases/2-plan.md +1 -1
  86. package/skills/orchestra-fdk/references/troubleshooting.md +3 -2
  87. package/templates/bug-fix/main.ts +7 -4
  88. package/templates/engineering-team/lib/environment.ts +6 -3
  89. package/templates/engineering-team/package.json +1 -1
  90. package/templates/todo-factory/main.ts +7 -4
  91. package/templates/todo-factory/package.json +1 -1
@@ -547,6 +547,16 @@ export declare const Slack: {
547
547
  readonly SessionPerConversation: import("../constructs/provider-types.js").Binding<"slack::app_mention" | "slack::message" | "slack::message.im" | "slack::message.mpim">;
548
548
  readonly SessionPerThread: import("../constructs/provider-types.js").Binding<"slack::app_mention" | "slack::message" | "slack::message.im" | "slack::message.mpim">;
549
549
  };
550
+ readonly skill: {
551
+ /**
552
+ * Accepts a platform id or a slug interchangeably — one rule for every reference property, stated
553
+ * once on `IResource` (`constructs/interfaces.ts`). A catalog row is seeded with slug = id, so this
554
+ * one key is both at once.
555
+ */
556
+ readonly skillId: "skill_slack";
557
+ /** @internal — the reference this catalog skill contributes when passed (its `org_global` key). */
558
+ readonly _resourceId: () => string;
559
+ };
550
560
  readonly conversation: {
551
561
  readonly mention: import("../constructs/provider-types.js").ProviderEventHandle<"slack::app_mention">;
552
562
  readonly dm: import("../constructs/provider-types.js").ProviderEventHandle<"slack::message.im">;
@@ -605,6 +615,16 @@ export declare const Teams: {
605
615
  readonly SessionPerConversation: import("../constructs/provider-types.js").Binding<"teams::message">;
606
616
  readonly SessionPerThread: import("../constructs/provider-types.js").Binding<"teams::message">;
607
617
  };
618
+ readonly skill: {
619
+ /**
620
+ * Accepts a platform id or a slug interchangeably — one rule for every reference property, stated
621
+ * once on `IResource` (`constructs/interfaces.ts`). A catalog row is seeded with slug = id, so this
622
+ * one key is both at once.
623
+ */
624
+ readonly skillId: "skill_teams";
625
+ /** @internal — the reference this catalog skill contributes when passed (its `org_global` key). */
626
+ readonly _resourceId: () => string;
627
+ };
608
628
  readonly conversation: {
609
629
  readonly message: import("../constructs/provider-types.js").ProviderEventHandle<"teams::message">;
610
630
  readonly inChannel: () => ScopedCondition<"teams::message">;
@@ -1140,6 +1160,16 @@ export declare const Providers: {
1140
1160
  readonly SessionPerConversation: import("../constructs/provider-types.js").Binding<"slack::app_mention" | "slack::message" | "slack::message.im" | "slack::message.mpim">;
1141
1161
  readonly SessionPerThread: import("../constructs/provider-types.js").Binding<"slack::app_mention" | "slack::message" | "slack::message.im" | "slack::message.mpim">;
1142
1162
  };
1163
+ readonly skill: {
1164
+ /**
1165
+ * Accepts a platform id or a slug interchangeably — one rule for every reference property, stated
1166
+ * once on `IResource` (`constructs/interfaces.ts`). A catalog row is seeded with slug = id, so this
1167
+ * one key is both at once.
1168
+ */
1169
+ readonly skillId: "skill_slack";
1170
+ /** @internal — the reference this catalog skill contributes when passed (its `org_global` key). */
1171
+ readonly _resourceId: () => string;
1172
+ };
1143
1173
  readonly conversation: {
1144
1174
  readonly mention: import("../constructs/provider-types.js").ProviderEventHandle<"slack::app_mention">;
1145
1175
  readonly dm: import("../constructs/provider-types.js").ProviderEventHandle<"slack::message.im">;
@@ -1191,6 +1221,16 @@ export declare const Providers: {
1191
1221
  readonly SessionPerConversation: import("../constructs/provider-types.js").Binding<"teams::message">;
1192
1222
  readonly SessionPerThread: import("../constructs/provider-types.js").Binding<"teams::message">;
1193
1223
  };
1224
+ readonly skill: {
1225
+ /**
1226
+ * Accepts a platform id or a slug interchangeably — one rule for every reference property, stated
1227
+ * once on `IResource` (`constructs/interfaces.ts`). A catalog row is seeded with slug = id, so this
1228
+ * one key is both at once.
1229
+ */
1230
+ readonly skillId: "skill_teams";
1231
+ /** @internal — the reference this catalog skill contributes when passed (its `org_global` key). */
1232
+ readonly _resourceId: () => string;
1233
+ };
1194
1234
  readonly conversation: {
1195
1235
  readonly message: import("../constructs/provider-types.js").ProviderEventHandle<"teams::message">;
1196
1236
  readonly inChannel: () => ScopedCondition<"teams::message">;
@@ -538,6 +538,20 @@ export const Slack = {
538
538
  conversational: true,
539
539
  events: slackEvents,
540
540
  bindings: slackBindings,
541
+ // The provider's catalog skill — attach it with `skills: [Slack.skill]`. A plain catalog literal
542
+ // satisfying `ISkill` rather than a registered plan import: a module-level constant has no construct
543
+ // scope to register one in. It skips synth-time plan-import registration only — at apply the ref still
544
+ // resolves through one idempotent getSkill, and boot validation guarantees the catalog row exists.
545
+ skill: {
546
+ /**
547
+ * Accepts a platform id or a slug interchangeably — one rule for every reference property, stated
548
+ * once on `IResource` (`constructs/interfaces.ts`). A catalog row is seeded with slug = id, so this
549
+ * one key is both at once.
550
+ */
551
+ skillId: "skill_slack",
552
+ /** @internal — the reference this catalog skill contributes when passed (its `org_global` key). */
553
+ _resourceId: () => "skill_slack",
554
+ },
541
555
  // The conversation authoring sugar, generated from the catalog conversation block.
542
556
  conversation: {
543
557
  mention: slackEvents.AppMention,
@@ -589,6 +603,20 @@ export const Teams = {
589
603
  conversational: true,
590
604
  events: teamsEvents,
591
605
  bindings: teamsBindings,
606
+ // The provider's catalog skill — attach it with `skills: [Teams.skill]`. A plain catalog literal
607
+ // satisfying `ISkill` rather than a registered plan import: a module-level constant has no construct
608
+ // scope to register one in. It skips synth-time plan-import registration only — at apply the ref still
609
+ // resolves through one idempotent getSkill, and boot validation guarantees the catalog row exists.
610
+ skill: {
611
+ /**
612
+ * Accepts a platform id or a slug interchangeably — one rule for every reference property, stated
613
+ * once on `IResource` (`constructs/interfaces.ts`). A catalog row is seeded with slug = id, so this
614
+ * one key is both at once.
615
+ */
616
+ skillId: "skill_teams",
617
+ /** @internal — the reference this catalog skill contributes when passed (its `org_global` key). */
618
+ _resourceId: () => "skill_teams",
619
+ },
592
620
  // The conversation authoring sugar, generated from the catalog conversation block.
593
621
  conversation: {
594
622
  message: teamsEvents.Message,
@@ -673,6 +701,8 @@ export const PROVIDER_SKILL_IDS = {
673
701
  "jira-classic": "skill_jira-classic",
674
702
  "linear": "skill_linear",
675
703
  "notion": "skill_notion",
704
+ "slack": "skill_slack",
705
+ "teams": "skill_teams",
676
706
  "zendesk": "skill_zendesk",
677
707
  };
678
708
  /**
package/docs/REFERENCE.md CHANGED
@@ -131,9 +131,11 @@ export ORCHESTRA_API_TOKEN="…" # any principal's bearer; the CLI ne
131
131
  export ORCHESTRA_ORGANIZATION_ID="org_…"
132
132
  ```
133
133
 
134
+ Each `ORCHESTRA_` machine variable this page names also has a former `SFDK_` spelling. Until the rename's compatibility period ends ([D50](../../docs/specs/2026-10-03_2446_orchestra_rename_spec.md)), the platform and the worker still write the former spelling beside the new one, and every reader takes the new name first and the former one when the new one is absent.
135
+
134
136
  **The auth-provider chain** (one ordered chain for every command, presence is selection):
135
137
  `ORCHESTRA_API_TOKEN` → the file `ORCHESTRA_API_TOKEN_FILE` names → the `login` profile → the
136
- platform-injected machine edge flag (`SFDK_AUTH_EDGE_INJECTED`) → a named missing-credentials error.
138
+ platform-injected machine edge flag (`ORCHESTRA_AUTH_EDGE_INJECTED`) → a named missing-credentials error.
137
139
  There is **no `--token` flag**: a token never appears in argv.
138
140
 
139
141
  - **The token file.** On an Orchestra machine, the worker writes the agent's own platform token to a
@@ -158,14 +160,14 @@ bearer is itself a credential — with the unauthenticated `health` ping the one
158
160
  print the resolved target org as a banner before any read/write, and warn when an exported
159
161
  `ORCHESTRA_ORGANIZATION_ID` diverges from the profile's org (so a stale export can't silently redirect writes).
160
162
 
161
- The conversation (`SFDK_SESSION_ID`, under every provider). The worker sets it on each harness process
163
+ The conversation (`ORCHESTRA_SESSION_ID`, under every provider). The worker sets it on each harness process
162
164
  it starts, so a command an agent runs knows which conversation it is in. When it is set, `orchestra` adds
163
165
  `sessionId` to every JSON request body that has none: typed commands, `orchestra api`, `apply`, and the
164
166
  `login` and refresh token requests. A body that already names a `sessionId` is sent unchanged, so
165
167
  `artifacts create --session-id <id>` wins. Query strings, uploads and other non-JSON bodies are never
166
168
  changed, and an empty or whitespace-only value counts as unset. The platform checks a supplied session as
167
169
  usual. An artifact takes its project from the session, so a command that must publish into another project
168
- than its conversation's runs without the variable: `env -u SFDK_SESSION_ID orchestra artifacts create …`. A
170
+ than its conversation's runs without the variable: `env -u ORCHESTRA_SESSION_ID orchestra artifacts create …`. A
169
171
  value you export by hand in your own shell applies the same way.
170
172
 
171
173
  ## 4. Author your first factory
@@ -819,7 +821,7 @@ subscription token rather than an API key:
819
821
  import { EgressPolicy, Secret, SecretValue } from "@orchestraworks/cli";
820
822
 
821
823
  new Secret(factory, "claude-sign-in", {
822
- value: SecretValue.fromEnv("SFDK_CLAUDE_CODE_OAUTH_TOKEN"),
824
+ value: SecretValue.fromEnv("ORCHESTRA_FDK_CLAUDE_CODE_OAUTH_TOKEN"),
823
825
  hosts: ["api.anthropic.com"],
824
826
  injection: {
825
827
  headers: [{ name: "authorization", value: "Bearer ${secret}" }],
@@ -863,7 +865,7 @@ Agent.fromSlug(factory, "existing-agent");
863
865
  Environment.fromSlug(factory, "shared-runtime");
864
866
  Volume.fromSlug(factory, "cache-vol");
865
867
  Volume.fromId(factory, "volume_…");
866
- Connection.fromEnv(factory, "SFDK_ZENDESK_CONNECTION_ID", { provider: Providers.Zendesk });
868
+ Connection.fromEnv(factory, "ORCHESTRA_FDK_ZENDESK_CONNECTION_ID", { provider: Providers.Zendesk });
867
869
  ```
868
870
 
869
871
  `Connection.fromEnv` resolves the connection id from `process.env` at apply, so **no tenant id
@@ -1069,8 +1071,8 @@ const ourSlackApp = new Connector(factory, "our-slack-app", {
1069
1071
  provider: Providers.Slack,
1070
1072
  clientId: "1234.5678",
1071
1073
  appId: "A0ACME",
1072
- clientSecret: new Secret(factory, "slack-client-secret", { value: SecretValue.fromEnv("SFDK_SLACK_CLIENT_SECRET") }),
1073
- signingSecret: new Secret(factory, "slack-signing-secret", { value: SecretValue.fromEnv("SFDK_SLACK_SIGNING_SECRET") }),
1074
+ clientSecret: new Secret(factory, "slack-client-secret", { value: SecretValue.fromEnv("ORCHESTRA_FDK_SLACK_CLIENT_SECRET") }),
1075
+ signingSecret: new Secret(factory, "slack-signing-secret", { value: SecretValue.fromEnv("ORCHESTRA_FDK_SLACK_SIGNING_SECRET") }),
1074
1076
  });
1075
1077
 
1076
1078
  const workspace = new Connection(factory, "workspace", {
@@ -16,7 +16,7 @@
16
16
  */
17
17
  export interface ApiErrorDetail {
18
18
  /**
19
- * Present only when `code` is CREDENTIAL_UNAVAILABLE, ORGANIZATION_AUTH_POLICY_UNSATISFIED or SSO_CALLER_SESSION_REQUIRED. Published as a plain value rather than a closed enum because the shapes that carry `reason` do not agree on one value set. When `code` is CREDENTIAL_UNAVAILABLE: Closed denial-reason class explaining why the credential chain refused — one of secret_missing, secret_expired, refresh_failed, recipe_field_missing, policy_denied, ambiguous_match, connection_needs_attention, user_subject_required, user_grant_unavailable, conversation_not_attested, path_not_permitted, forge_credential_stale, install_declaration_invalid, provider_unavailable, internal_error, credential_not_found, use_denied, host_not_covered, machine_in_setup, credential_needs_https, plan_feature_disabled. When `code` is ORGANIZATION_AUTH_POLICY_UNSATISFIED or SSO_CALLER_SESSION_REQUIRED: Closed reason class naming the first policy check the session failed — one of ORGANIZATION_NOT_ACTIVE, SSO_ENFORCED_WITHOUT_BINDING, WRONG_IDENTITY_PROVIDER, AUTHENTICATION_METHOD_NOT_ALLOWED, MFA_REQUIRED.
19
+ * Present only when `code` is CREDENTIAL_UNAVAILABLE, ORGANIZATION_AUTH_POLICY_UNSATISFIED or SSO_CALLER_SESSION_REQUIRED. Published as a plain value rather than a closed enum because the shapes that carry `reason` do not agree on one value set. When `code` is CREDENTIAL_UNAVAILABLE: Closed denial-reason class explaining why the credential chain refused — one of secret_missing, secret_expired, refresh_failed, recipe_field_missing, policy_denied, connection_needs_attention, user_subject_required, user_grant_unavailable, conversation_not_attested, path_not_permitted, forge_credential_stale, install_declaration_invalid, provider_unavailable, internal_error, credential_not_found, use_denied, host_not_covered, machine_in_setup, credential_needs_https, plan_feature_disabled. When `code` is ORGANIZATION_AUTH_POLICY_UNSATISFIED or SSO_CALLER_SESSION_REQUIRED: Closed reason class naming the first policy check the session failed — one of ORGANIZATION_NOT_ACTIVE, SSO_ENFORCED_WITHOUT_BINDING, WRONG_IDENTITY_PROVIDER, AUTHENTICATION_METHOD_NOT_ALLOWED, MFA_REQUIRED.
20
20
  * @type {string}
21
21
  * @memberof ApiErrorDetail
22
22
  */
@@ -10,6 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import type { EnvironmentIngressPolicy } from './EnvironmentIngressPolicy';
13
+ import type { EnvironmentCredential } from './EnvironmentCredential';
13
14
  import type { EnvironmentHooks } from './EnvironmentHooks';
14
15
  import type { EnvironmentPlatformRequest } from './EnvironmentPlatformRequest';
15
16
  import type { EnvironmentEgressPolicy } from './EnvironmentEgressPolicy';
@@ -50,6 +51,12 @@ export interface CreateEnvironmentRequest {
50
51
  * @memberof CreateEnvironmentRequest
51
52
  */
52
53
  ingressPolicy?: EnvironmentIngressPolicy | null;
54
+ /**
55
+ * The credentials this environment's machines get on a request that names none, in order: the first one covering the request's host is added, whatever the agent. Each entry is a Secret or Connection of this organization by id, and adding one needs the caller's own use of it. A request naming a credential gets that one instead. Absent declares none.
56
+ * @type {Array<EnvironmentCredential>}
57
+ * @memberof CreateEnvironmentRequest
58
+ */
59
+ credentials?: Array<EnvironmentCredential>;
53
60
  /**
54
61
  * Whether the platform provisions this environment's machines (provisioned, the default) or a customer's own machine enrols into it (enrolled). Fixed at create.
55
62
  * @type {CreateEnvironmentRequestKindEnum}
@@ -12,6 +12,7 @@
12
12
  * Do not edit the class manually.
13
13
  */
14
14
  import { EnvironmentIngressPolicyFromJSON, EnvironmentIngressPolicyToJSON, } from './EnvironmentIngressPolicy';
15
+ import { EnvironmentCredentialFromJSON, EnvironmentCredentialToJSON, } from './EnvironmentCredential';
15
16
  import { EnvironmentHooksFromJSON, EnvironmentHooksToJSON, } from './EnvironmentHooks';
16
17
  import { EnvironmentPlatformRequestFromJSON, EnvironmentPlatformRequestToJSON, } from './EnvironmentPlatformRequest';
17
18
  import { EnvironmentEgressPolicyFromJSON, EnvironmentEgressPolicyToJSON, } from './EnvironmentEgressPolicy';
@@ -44,6 +45,7 @@ export function CreateEnvironmentRequestFromJSONTyped(json, ignoreDiscriminator)
44
45
  'platform': json['platform'] == null ? undefined : EnvironmentPlatformRequestFromJSON(json['platform']),
45
46
  'egressPolicy': json['egressPolicy'] == null ? undefined : EnvironmentEgressPolicyFromJSON(json['egressPolicy']),
46
47
  'ingressPolicy': json['ingressPolicy'] == null ? undefined : EnvironmentIngressPolicyFromJSON(json['ingressPolicy']),
48
+ 'credentials': json['credentials'] == null ? undefined : (json['credentials'].map(EnvironmentCredentialFromJSON)),
47
49
  'kind': json['kind'] == null ? undefined : json['kind'],
48
50
  'provisionSpec': json['provisionSpec'] == null ? undefined : EnvironmentProvisionSpecRequestFromJSON(json['provisionSpec']),
49
51
  'teamId': json['teamId'] == null ? undefined : json['teamId'],
@@ -65,6 +67,7 @@ export function CreateEnvironmentRequestToJSONTyped(value, ignoreDiscriminator =
65
67
  'platform': EnvironmentPlatformRequestToJSON(value['platform']),
66
68
  'egressPolicy': EnvironmentEgressPolicyToJSON(value['egressPolicy']),
67
69
  'ingressPolicy': EnvironmentIngressPolicyToJSON(value['ingressPolicy']),
70
+ 'credentials': value['credentials'] == null ? undefined : (value['credentials'].map(EnvironmentCredentialToJSON)),
68
71
  'kind': value['kind'],
69
72
  'provisionSpec': EnvironmentProvisionSpecRequestToJSON(value['provisionSpec']),
70
73
  'teamId': value['teamId'],
@@ -35,7 +35,7 @@ export interface CreateSecretRequest {
35
35
  */
36
36
  description?: string;
37
37
  /**
38
- * Secret value. This is write-only and is never returned by management APIs.
38
+ * Secret value. This is write-only and is never returned by management APIs. For git over HTTPS, store base64 of <user>:<token> as the value, such as the output of printf 'x-access-token:%s' "$TOKEN" | base64 | tr -d '\n' for a GitHub token, and present it as Authorization: Basic ${secret}.
39
39
  * @type {string}
40
40
  * @memberof CreateSecretRequest
41
41
  */
@@ -53,7 +53,7 @@ export interface CreateSecretRequest {
53
53
  */
54
54
  teamId?: string;
55
55
  /**
56
- * Optional injection recipe describing the request mutations the broker applies from this secret
56
+ * Optional injection recipe: the request mutations the broker applies from this secret, and the hosts it applies them on. A secret without one is stored only: the broker presents it on no request. For git over HTTPS, store base64 of <user>:<token> as the value, such as the output of printf 'x-access-token:%s' "$TOKEN" | base64 | tr -d '\n' for a GitHub token, and present it as Authorization: Basic ${secret}.
57
57
  * @type {InjectionRecipe}
58
58
  * @memberof CreateSecretRequest
59
59
  */
@@ -67,9 +67,10 @@ export interface CreateSecretRequest {
67
67
  [key: string]: string;
68
68
  };
69
69
  /**
70
- * Host patterns this secret is presented on, in egress rule host syntax (exact host, *.suffix, or *); empty or omitted covers no host. A non-empty list needs an injection recipe with a header, and no pattern may name the platform API host or the object store host.
70
+ * Deprecated: write injection.hosts instead. Accepted for one release and moved into the recipe's hosts; a request whose recipe names other hosts is refused.
71
71
  * @type {Array<string>}
72
72
  * @memberof CreateSecretRequest
73
+ * @deprecated
73
74
  */
74
75
  hosts?: Array<string>;
75
76
  }
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import type { EnvironmentIngressPolicy } from './EnvironmentIngressPolicy';
13
13
  import type { EnvironmentPlatformWithRuntime } from './EnvironmentPlatformWithRuntime';
14
+ import type { EnvironmentCredential } from './EnvironmentCredential';
14
15
  import type { EnvironmentHooks } from './EnvironmentHooks';
15
16
  import type { EnvironmentEgressPolicy } from './EnvironmentEgressPolicy';
16
17
  import type { EnvironmentProvisionSpec } from './EnvironmentProvisionSpec';
@@ -68,6 +69,12 @@ export interface Environment {
68
69
  * @memberof Environment
69
70
  */
70
71
  ingressPolicy?: EnvironmentIngressPolicy;
72
+ /**
73
+ * The credentials this environment's machines get on a request that names none, in order: the first one covering the request's host is added, whatever the agent. Each entry is a Secret or Connection of this organization by id, and adding one needs the caller's own use of it. A request naming a credential gets that one instead.
74
+ * @type {Array<EnvironmentCredential>}
75
+ * @memberof Environment
76
+ */
77
+ credentials?: Array<EnvironmentCredential>;
71
78
  /**
72
79
  * Whether the platform provisions this environment's machines (provisioned) or a customer's own machine enrols into it (enrolled). Fixed when the environment is created.
73
80
  * @type {EnvironmentKindEnum}
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import { EnvironmentIngressPolicyFromJSON, EnvironmentIngressPolicyToJSON, } from './EnvironmentIngressPolicy';
15
15
  import { EnvironmentPlatformWithRuntimeFromJSON, EnvironmentPlatformWithRuntimeToJSON, } from './EnvironmentPlatformWithRuntime';
16
+ import { EnvironmentCredentialFromJSON, EnvironmentCredentialToJSON, } from './EnvironmentCredential';
16
17
  import { EnvironmentHooksFromJSON, EnvironmentHooksToJSON, } from './EnvironmentHooks';
17
18
  import { EnvironmentEgressPolicyFromJSON, EnvironmentEgressPolicyToJSON, } from './EnvironmentEgressPolicy';
18
19
  import { EnvironmentProvisionSpecFromJSON, EnvironmentProvisionSpecToJSON, } from './EnvironmentProvisionSpec';
@@ -65,6 +66,7 @@ export function EnvironmentFromJSONTyped(json, ignoreDiscriminator) {
65
66
  'platform': EnvironmentPlatformWithRuntimeFromJSON(json['platform']),
66
67
  'egressPolicy': EnvironmentEgressPolicyFromJSON(json['egressPolicy']),
67
68
  'ingressPolicy': json['ingressPolicy'] == null ? undefined : EnvironmentIngressPolicyFromJSON(json['ingressPolicy']),
69
+ 'credentials': json['credentials'] == null ? undefined : (json['credentials'].map(EnvironmentCredentialFromJSON)),
68
70
  'kind': json['kind'],
69
71
  'provisionSpec': json['provisionSpec'] == null ? undefined : EnvironmentProvisionSpecFromJSON(json['provisionSpec']),
70
72
  'workingDirectory': json['workingDirectory'] == null ? undefined : json['workingDirectory'],
@@ -90,6 +92,7 @@ export function EnvironmentToJSONTyped(value, ignoreDiscriminator = false) {
90
92
  'platform': EnvironmentPlatformWithRuntimeToJSON(value['platform']),
91
93
  'egressPolicy': EnvironmentEgressPolicyToJSON(value['egressPolicy']),
92
94
  'ingressPolicy': EnvironmentIngressPolicyToJSON(value['ingressPolicy']),
95
+ 'credentials': value['credentials'] == null ? undefined : (value['credentials'].map(EnvironmentCredentialToJSON)),
93
96
  'provisionSpec': EnvironmentProvisionSpecToJSON(value['provisionSpec']),
94
97
  'workingDirectory': value['workingDirectory'],
95
98
  'hooks': EnvironmentHooksToJSON(value['hooks']),
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Orchestra platform API
3
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
4
+ *
5
+ * The version of the OpenAPI document: 0.1.0
6
+ *
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ /**
13
+ *
14
+ * @export
15
+ * @interface EnvironmentCredential
16
+ */
17
+ export interface EnvironmentCredential {
18
+ /**
19
+ * The credential, as secret/<id> or connection/<id>
20
+ * @type {string}
21
+ * @memberof EnvironmentCredential
22
+ */
23
+ credential: string;
24
+ /**
25
+ * Whether the credential replaces a value the request already carries in a header the credential sets. False leaves such a request as it was sent. Absent means true.
26
+ * @type {boolean}
27
+ * @memberof EnvironmentCredential
28
+ */
29
+ replace?: boolean;
30
+ }
31
+ /**
32
+ * Check if a given object implements the EnvironmentCredential interface.
33
+ */
34
+ export declare function instanceOfEnvironmentCredential(value: object): value is EnvironmentCredential;
35
+ export declare function EnvironmentCredentialFromJSON(json: any): EnvironmentCredential;
36
+ export declare function EnvironmentCredentialFromJSONTyped(json: any, ignoreDiscriminator: boolean): EnvironmentCredential;
37
+ export declare function EnvironmentCredentialToJSON(json: any): EnvironmentCredential;
38
+ export declare function EnvironmentCredentialToJSONTyped(value?: EnvironmentCredential | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,45 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Orchestra platform API
5
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
6
+ *
7
+ * The version of the OpenAPI document: 0.1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+ /**
15
+ * Check if a given object implements the EnvironmentCredential interface.
16
+ */
17
+ export function instanceOfEnvironmentCredential(value) {
18
+ if (!('credential' in value) || value['credential'] === undefined)
19
+ return false;
20
+ return true;
21
+ }
22
+ export function EnvironmentCredentialFromJSON(json) {
23
+ return EnvironmentCredentialFromJSONTyped(json, false);
24
+ }
25
+ export function EnvironmentCredentialFromJSONTyped(json, ignoreDiscriminator) {
26
+ if (json == null) {
27
+ return json;
28
+ }
29
+ return {
30
+ 'credential': json['credential'],
31
+ 'replace': json['replace'] == null ? undefined : json['replace'],
32
+ };
33
+ }
34
+ export function EnvironmentCredentialToJSON(json) {
35
+ return EnvironmentCredentialToJSONTyped(json, false);
36
+ }
37
+ export function EnvironmentCredentialToJSONTyped(value, ignoreDiscriminator = false) {
38
+ if (value == null) {
39
+ return value;
40
+ }
41
+ return {
42
+ 'credential': value['credential'],
43
+ 'replace': value['replace'],
44
+ };
45
+ }
@@ -42,7 +42,7 @@ export interface EnvironmentProvisionSpec {
42
42
  */
43
43
  volumeMounts: Array<EnvironmentMount>;
44
44
  /**
45
- * Environment variables set on every machine created from this environment, and forwarded into the agent process itself. NOT A SECRET STORE: values are stored unencrypted on the environment row and returned verbatim by every read of it, so anyone who can read the environment can read them. Put credentials in a Secret referenced by an egress allow rule instead - the broker injects those into the outbound request at the egress edge and the agent process never holds them. Names beginning SFDK_ or ORCHESTRA_ are platform-owned and rejected, and the platform writes its own reserved variables last, overriding anything you declare. Names beginning ORCHESTRA_FDK_, the inputs of an agent-as-code kit, are accepted in exactly that spelling as ordinary variables of your own. The other exception is six worker settings, accepted in exactly this spelling: SFDK_WORKER_RESTART_AFTER_IDLE, SFDK_WORKER_RELEASE_FETCH_TIMEOUT and SFDK_WORKER_RELEASE_CHECK_INTERVAL, each a positive duration such as 30s or 5m; SFDK_WORKER_RELEASE_REGISTRY_URL, an http or https URL; and SFDK_WORKER_AUTO_UPGRADE and SFDK_WORKER_AUTO_RESTART, each exactly true or false, which turn the worker's move to a newer release and its restart into that release on or off. They reach the machine's worker, where each one set wins over the platform's release settings, and never an agent process. HOME and USERPROFILE are not among them: the platform sets neither, the account inside the image decides where the home directory is, and a HOME you declare here is passed to the harness to conform to or complain about. Declare a volume mount at /home if you want that home directory to be durable. On a Windows environment names are matched case-insensitively, the way Windows itself matches them - sfdk_x and orchestra_fdk_x are rejected reserved names there, and Home and HOME are one variable - while a POSIX environment matches names exactly. At most 64 entries; a key matches [A-Za-z_][A-Za-z0-9_]* and is at most 128 characters; a value is at most 4096 characters.
45
+ * Environment variables set on every machine created from this environment, and forwarded into the agent process itself. NOT A SECRET STORE: values are stored unencrypted on the environment row and returned verbatim by every read of it, so anyone who can read the environment can read them. Put credentials in a Secret referenced by an egress allow rule instead - the broker injects those into the outbound request at the egress edge and the agent process never holds them. Names beginning SFDK_ or ORCHESTRA_ are platform-owned and rejected, and the platform writes its own reserved variables last, overriding anything you declare. Names beginning ORCHESTRA_FDK_, the inputs of an agent-as-code kit, are accepted in exactly that spelling as ordinary variables of your own. The other exception is six worker settings, accepted in exactly this spelling: ORCHESTRA_WORKER_RESTART_AFTER_IDLE, ORCHESTRA_WORKER_RELEASE_FETCH_TIMEOUT and ORCHESTRA_WORKER_RELEASE_CHECK_INTERVAL, each a positive duration such as 30s or 5m; ORCHESTRA_WORKER_RELEASE_REGISTRY_URL, an http or https URL; and ORCHESTRA_WORKER_AUTO_UPGRADE and ORCHESTRA_WORKER_AUTO_RESTART, each exactly true or false, which turn the worker's move to a newer release and its restart into that release on or off. Their former spellings beginning SFDK_WORKER_ are refused. They reach the machine's worker, where each one set wins over the platform's release settings, and never an agent process. HOME and USERPROFILE are not among them: the platform sets neither, the account inside the image decides where the home directory is, and a HOME you declare here is passed to the harness to conform to or complain about. Declare a volume mount at /home if you want that home directory to be durable. On a Windows environment names are matched case-insensitively, the way Windows itself matches them - sfdk_x and orchestra_fdk_x are rejected reserved names there, and Home and HOME are one variable - while a POSIX environment matches names exactly. At most 64 entries; a key matches [A-Za-z_][A-Za-z0-9_]* and is at most 128 characters; a value is at most 4096 characters.
46
46
  * @type {{ [key: string]: string; }}
47
47
  * @memberof EnvironmentProvisionSpec
48
48
  */
@@ -55,7 +55,7 @@ export interface EnvironmentProvisionSpecRequest {
55
55
  */
56
56
  setup?: string;
57
57
  /**
58
- * Declared environment variables; a supplied map replaces the stored one entirely, and an absent one leaves it unchanged. Environment variables set on every machine created from this environment, and forwarded into the agent process itself. NOT A SECRET STORE: values are stored unencrypted on the environment row and returned verbatim by every read of it, so anyone who can read the environment can read them. Put credentials in a Secret referenced by an egress allow rule instead - the broker injects those into the outbound request at the egress edge and the agent process never holds them. Names beginning SFDK_ or ORCHESTRA_ are platform-owned and rejected, and the platform writes its own reserved variables last, overriding anything you declare. Names beginning ORCHESTRA_FDK_, the inputs of an agent-as-code kit, are accepted in exactly that spelling as ordinary variables of your own. The other exception is six worker settings, accepted in exactly this spelling: SFDK_WORKER_RESTART_AFTER_IDLE, SFDK_WORKER_RELEASE_FETCH_TIMEOUT and SFDK_WORKER_RELEASE_CHECK_INTERVAL, each a positive duration such as 30s or 5m; SFDK_WORKER_RELEASE_REGISTRY_URL, an http or https URL; and SFDK_WORKER_AUTO_UPGRADE and SFDK_WORKER_AUTO_RESTART, each exactly true or false, which turn the worker's move to a newer release and its restart into that release on or off. They reach the machine's worker, where each one set wins over the platform's release settings, and never an agent process. HOME and USERPROFILE are not among them: the platform sets neither, the account inside the image decides where the home directory is, and a HOME you declare here is passed to the harness to conform to or complain about. Declare a volume mount at /home if you want that home directory to be durable. On a Windows environment names are matched case-insensitively, the way Windows itself matches them - sfdk_x and orchestra_fdk_x are rejected reserved names there, and Home and HOME are one variable - while a POSIX environment matches names exactly. At most 64 entries; a key matches [A-Za-z_][A-Za-z0-9_]* and is at most 128 characters; a value is at most 4096 characters.
58
+ * Declared environment variables; a supplied map replaces the stored one entirely, and an absent one leaves it unchanged. Environment variables set on every machine created from this environment, and forwarded into the agent process itself. NOT A SECRET STORE: values are stored unencrypted on the environment row and returned verbatim by every read of it, so anyone who can read the environment can read them. Put credentials in a Secret referenced by an egress allow rule instead - the broker injects those into the outbound request at the egress edge and the agent process never holds them. Names beginning SFDK_ or ORCHESTRA_ are platform-owned and rejected, and the platform writes its own reserved variables last, overriding anything you declare. Names beginning ORCHESTRA_FDK_, the inputs of an agent-as-code kit, are accepted in exactly that spelling as ordinary variables of your own. The other exception is six worker settings, accepted in exactly this spelling: ORCHESTRA_WORKER_RESTART_AFTER_IDLE, ORCHESTRA_WORKER_RELEASE_FETCH_TIMEOUT and ORCHESTRA_WORKER_RELEASE_CHECK_INTERVAL, each a positive duration such as 30s or 5m; ORCHESTRA_WORKER_RELEASE_REGISTRY_URL, an http or https URL; and ORCHESTRA_WORKER_AUTO_UPGRADE and ORCHESTRA_WORKER_AUTO_RESTART, each exactly true or false, which turn the worker's move to a newer release and its restart into that release on or off. Their former spellings beginning SFDK_WORKER_ are refused. They reach the machine's worker, where each one set wins over the platform's release settings, and never an agent process. HOME and USERPROFILE are not among them: the platform sets neither, the account inside the image decides where the home directory is, and a HOME you declare here is passed to the harness to conform to or complain about. Declare a volume mount at /home if you want that home directory to be durable. On a Windows environment names are matched case-insensitively, the way Windows itself matches them - sfdk_x and orchestra_fdk_x are rejected reserved names there, and Home and HOME are one variable - while a POSIX environment matches names exactly. At most 64 entries; a key matches [A-Za-z_][A-Za-z0-9_]* and is at most 128 characters; a value is at most 4096 characters.
59
59
  * @type {{ [key: string]: string; }}
60
60
  * @memberof EnvironmentProvisionSpecRequest
61
61
  */
@@ -107,7 +107,7 @@ export interface EnvironmentSnapshot {
107
107
  */
108
108
  setup?: string;
109
109
  /**
110
- * Environment variables set on every machine created from this environment, and forwarded into the agent process itself. NOT A SECRET STORE: values are stored unencrypted on the environment row and returned verbatim by every read of it, so anyone who can read the environment can read them. Put credentials in a Secret referenced by an egress allow rule instead - the broker injects those into the outbound request at the egress edge and the agent process never holds them. Names beginning SFDK_ or ORCHESTRA_ are platform-owned and rejected, and the platform writes its own reserved variables last, overriding anything you declare. Names beginning ORCHESTRA_FDK_, the inputs of an agent-as-code kit, are accepted in exactly that spelling as ordinary variables of your own. The other exception is six worker settings, accepted in exactly this spelling: SFDK_WORKER_RESTART_AFTER_IDLE, SFDK_WORKER_RELEASE_FETCH_TIMEOUT and SFDK_WORKER_RELEASE_CHECK_INTERVAL, each a positive duration such as 30s or 5m; SFDK_WORKER_RELEASE_REGISTRY_URL, an http or https URL; and SFDK_WORKER_AUTO_UPGRADE and SFDK_WORKER_AUTO_RESTART, each exactly true or false, which turn the worker's move to a newer release and its restart into that release on or off. They reach the machine's worker, where each one set wins over the platform's release settings, and never an agent process. HOME and USERPROFILE are not among them: the platform sets neither, the account inside the image decides where the home directory is, and a HOME you declare here is passed to the harness to conform to or complain about. Declare a volume mount at /home if you want that home directory to be durable. On a Windows environment names are matched case-insensitively, the way Windows itself matches them - sfdk_x and orchestra_fdk_x are rejected reserved names there, and Home and HOME are one variable - while a POSIX environment matches names exactly. At most 64 entries; a key matches [A-Za-z_][A-Za-z0-9_]* and is at most 128 characters; a value is at most 4096 characters.
110
+ * Environment variables set on every machine created from this environment, and forwarded into the agent process itself. NOT A SECRET STORE: values are stored unencrypted on the environment row and returned verbatim by every read of it, so anyone who can read the environment can read them. Put credentials in a Secret referenced by an egress allow rule instead - the broker injects those into the outbound request at the egress edge and the agent process never holds them. Names beginning SFDK_ or ORCHESTRA_ are platform-owned and rejected, and the platform writes its own reserved variables last, overriding anything you declare. Names beginning ORCHESTRA_FDK_, the inputs of an agent-as-code kit, are accepted in exactly that spelling as ordinary variables of your own. The other exception is six worker settings, accepted in exactly this spelling: ORCHESTRA_WORKER_RESTART_AFTER_IDLE, ORCHESTRA_WORKER_RELEASE_FETCH_TIMEOUT and ORCHESTRA_WORKER_RELEASE_CHECK_INTERVAL, each a positive duration such as 30s or 5m; ORCHESTRA_WORKER_RELEASE_REGISTRY_URL, an http or https URL; and ORCHESTRA_WORKER_AUTO_UPGRADE and ORCHESTRA_WORKER_AUTO_RESTART, each exactly true or false, which turn the worker's move to a newer release and its restart into that release on or off. Their former spellings beginning SFDK_WORKER_ are refused. They reach the machine's worker, where each one set wins over the platform's release settings, and never an agent process. HOME and USERPROFILE are not among them: the platform sets neither, the account inside the image decides where the home directory is, and a HOME you declare here is passed to the harness to conform to or complain about. Declare a volume mount at /home if you want that home directory to be durable. On a Windows environment names are matched case-insensitively, the way Windows itself matches them - sfdk_x and orchestra_fdk_x are rejected reserved names there, and Home and HOME are one variable - while a POSIX environment matches names exactly. At most 64 entries; a key matches [A-Za-z_][A-Za-z0-9_]* and is at most 128 characters; a value is at most 4096 characters.
111
111
  * @type {{ [key: string]: string; }}
112
112
  * @memberof EnvironmentSnapshot
113
113
  */
@@ -28,6 +28,12 @@ export interface InjectionRecipe {
28
28
  * @memberof InjectionRecipe
29
29
  */
30
30
  removeHeaders: Array<string>;
31
+ /**
32
+ * Host patterns this secret is presented on, in egress rule host syntax (exact host, *.suffix, or *); empty or omitted covers no host. A non-empty list needs at least one header, and no pattern may name the platform API host or the object store host.
33
+ * @type {Array<string>}
34
+ * @memberof InjectionRecipe
35
+ */
36
+ hosts?: Array<string>;
31
37
  }
32
38
  /**
33
39
  * Check if a given object implements the InjectionRecipe interface.
@@ -30,6 +30,7 @@ export function InjectionRecipeFromJSONTyped(json, ignoreDiscriminator) {
30
30
  return {
31
31
  'headers': json['headers'] == null ? undefined : (json['headers'].map(InjectionHeaderFromJSON)),
32
32
  'removeHeaders': json['removeHeaders'],
33
+ 'hosts': json['hosts'] == null ? undefined : json['hosts'],
33
34
  };
34
35
  }
35
36
  export function InjectionRecipeToJSON(json) {
@@ -42,5 +43,6 @@ export function InjectionRecipeToJSONTyped(value, ignoreDiscriminator = false) {
42
43
  return {
43
44
  'headers': value['headers'] == null ? undefined : (value['headers'].map(InjectionHeaderToJSON)),
44
45
  'removeHeaders': value['removeHeaders'],
46
+ 'hosts': value['hosts'],
45
47
  };
46
48
  }
@@ -46,7 +46,7 @@ export interface OAuthTokenRequest {
46
46
  */
47
47
  refreshToken?: string;
48
48
  /**
49
- * Public client identifier; omit it or send sfdk-public
49
+ * Public client identifier; omit it or send orchestra-public
50
50
  * @type {string}
51
51
  * @memberof OAuthTokenRequest
52
52
  */
@@ -80,17 +80,11 @@ export interface Secret {
80
80
  */
81
81
  expiresAt?: Date;
82
82
  /**
83
- * Optional injection recipe describing the request mutations the broker applies from this secret
83
+ * Optional injection recipe: the request mutations the broker applies from this secret, and the hosts it applies them on. A secret without one is stored only: the broker presents it on no request. For git over HTTPS, store base64 of <user>:<token> as the value, such as the output of printf 'x-access-token:%s' "$TOKEN" | base64 | tr -d '\n' for a GitHub token, and present it as Authorization: Basic ${secret}.
84
84
  * @type {InjectionRecipe}
85
85
  * @memberof Secret
86
86
  */
87
87
  injection?: InjectionRecipe;
88
- /**
89
- * Host patterns this secret is presented on, in egress rule host syntax (exact host, *.suffix, or *); empty covers no host
90
- * @type {Array<string>}
91
- * @memberof Secret
92
- */
93
- hosts: Array<string>;
94
88
  /**
95
89
  * The agents you can see that may use this secret, as IAM decides at this read. Present on the singular read only; a list row leaves it out.
96
90
  * @type {Array<Agent>}
@@ -33,8 +33,6 @@ export function instanceOfSecret(value) {
33
33
  return false;
34
34
  if (!('updatedAt' in value) || value['updatedAt'] === undefined)
35
35
  return false;
36
- if (!('hosts' in value) || value['hosts'] === undefined)
37
- return false;
38
36
  return true;
39
37
  }
40
38
  export function SecretFromJSON(json) {
@@ -56,7 +54,6 @@ export function SecretFromJSONTyped(json, ignoreDiscriminator) {
56
54
  'updatedAt': (new Date(json['updatedAt'])),
57
55
  'expiresAt': json['expiresAt'] == null ? undefined : (new Date(json['expiresAt'])),
58
56
  'injection': json['injection'] == null ? undefined : InjectionRecipeFromJSON(json['injection']),
59
- 'hosts': json['hosts'],
60
57
  'usableBy': json['usableBy'] == null ? undefined : (json['usableBy'].map(AgentFromJSON)),
61
58
  };
62
59
  }
@@ -79,6 +76,5 @@ export function SecretToJSONTyped(value, ignoreDiscriminator = false) {
79
76
  'updatedAt': value['updatedAt'].toISOString(),
80
77
  'expiresAt': value['expiresAt'] == null ? value['expiresAt'] : value['expiresAt'].toISOString(),
81
78
  'injection': InjectionRecipeToJSON(value['injection']),
82
- 'hosts': value['hosts'],
83
79
  };
84
80
  }
@@ -10,6 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import type { EnvironmentIngressPolicy } from './EnvironmentIngressPolicy';
13
+ import type { EnvironmentCredential } from './EnvironmentCredential';
13
14
  import type { EnvironmentPlatformRequest } from './EnvironmentPlatformRequest';
14
15
  import type { EnvironmentEgressPolicy } from './EnvironmentEgressPolicy';
15
16
  import type { EnvironmentProvisionSpecRequest } from './EnvironmentProvisionSpecRequest';
@@ -44,6 +45,12 @@ export interface UpdateEnvironmentRequest {
44
45
  * @memberof UpdateEnvironmentRequest
45
46
  */
46
47
  ingressPolicy?: EnvironmentIngressPolicy | null;
48
+ /**
49
+ * The credentials this environment's machines get on a request that names none, in order: the first one covering the request's host is added, whatever the agent. Each entry is a Secret or Connection of this organization by id, and adding one needs the caller's own use of it. A request naming a credential gets that one instead. A provided list replaces the stored one, and absent leaves it.
50
+ * @type {Array<EnvironmentCredential>}
51
+ * @memberof UpdateEnvironmentRequest
52
+ */
53
+ credentials?: Array<EnvironmentCredential>;
47
54
  /**
48
55
  * The launch spec — every fact that applies only when the platform controls the machine. Rejected on an enrolled environment, whose machine the platform never launches.
49
56
  * @type {EnvironmentProvisionSpecRequest}
@@ -12,6 +12,7 @@
12
12
  * Do not edit the class manually.
13
13
  */
14
14
  import { EnvironmentIngressPolicyFromJSON, EnvironmentIngressPolicyToJSON, } from './EnvironmentIngressPolicy';
15
+ import { EnvironmentCredentialFromJSON, EnvironmentCredentialToJSON, } from './EnvironmentCredential';
15
16
  import { EnvironmentPlatformRequestFromJSON, EnvironmentPlatformRequestToJSON, } from './EnvironmentPlatformRequest';
16
17
  import { EnvironmentEgressPolicyFromJSON, EnvironmentEgressPolicyToJSON, } from './EnvironmentEgressPolicy';
17
18
  import { EnvironmentProvisionSpecRequestFromJSON, EnvironmentProvisionSpecRequestToJSON, } from './EnvironmentProvisionSpecRequest';
@@ -34,6 +35,7 @@ export function UpdateEnvironmentRequestFromJSONTyped(json, ignoreDiscriminator)
34
35
  'platform': json['platform'] == null ? undefined : EnvironmentPlatformRequestFromJSON(json['platform']),
35
36
  'egressPolicy': json['egressPolicy'] == null ? undefined : EnvironmentEgressPolicyFromJSON(json['egressPolicy']),
36
37
  'ingressPolicy': json['ingressPolicy'] == null ? undefined : EnvironmentIngressPolicyFromJSON(json['ingressPolicy']),
38
+ 'credentials': json['credentials'] == null ? undefined : (json['credentials'].map(EnvironmentCredentialFromJSON)),
37
39
  'provisionSpec': json['provisionSpec'] == null ? undefined : EnvironmentProvisionSpecRequestFromJSON(json['provisionSpec']),
38
40
  'workingDirectory': json['workingDirectory'] == null ? undefined : json['workingDirectory'],
39
41
  'hooks': json['hooks'] == null ? undefined : EnvironmentHooksRequestFromJSON(json['hooks']),
@@ -52,6 +54,7 @@ export function UpdateEnvironmentRequestToJSONTyped(value, ignoreDiscriminator =
52
54
  'platform': EnvironmentPlatformRequestToJSON(value['platform']),
53
55
  'egressPolicy': EnvironmentEgressPolicyToJSON(value['egressPolicy']),
54
56
  'ingressPolicy': EnvironmentIngressPolicyToJSON(value['ingressPolicy']),
57
+ 'credentials': value['credentials'] == null ? undefined : (value['credentials'].map(EnvironmentCredentialToJSON)),
55
58
  'provisionSpec': EnvironmentProvisionSpecRequestToJSON(value['provisionSpec']),
56
59
  'workingDirectory': value['workingDirectory'],
57
60
  'hooks': EnvironmentHooksRequestToJSON(value['hooks']),
@@ -29,7 +29,7 @@ export interface UpdateSecretRequest {
29
29
  */
30
30
  description?: string;
31
31
  /**
32
- * Secret value. This is write-only and is never returned by management APIs.
32
+ * Secret value. This is write-only and is never returned by management APIs. For git over HTTPS, store base64 of <user>:<token> as the value, such as the output of printf 'x-access-token:%s' "$TOKEN" | base64 | tr -d '\n' for a GitHub token, and present it as Authorization: Basic ${secret}.
33
33
  * @type {string}
34
34
  * @memberof UpdateSecretRequest
35
35
  */
@@ -41,7 +41,7 @@ export interface UpdateSecretRequest {
41
41
  */
42
42
  expiresAt?: Date;
43
43
  /**
44
- * Injection recipe update: absent = unchanged, null = clear the recipe, value = replace it
44
+ * Injection recipe update: absent = unchanged, null = clear the recipe and its hosts, leaving the secret stored only, value = replace the recipe and its hosts. Optional injection recipe: the request mutations the broker applies from this secret, and the hosts it applies them on. A secret without one is stored only: the broker presents it on no request. For git over HTTPS, store base64 of <user>:<token> as the value, such as the output of printf 'x-access-token:%s' "$TOKEN" | base64 | tr -d '\n' for a GitHub token, and present it as Authorization: Basic ${secret}.
45
45
  * @type {InjectionRecipe}
46
46
  * @memberof UpdateSecretRequest
47
47
  */
@@ -55,9 +55,10 @@ export interface UpdateSecretRequest {
55
55
  [key: string]: string | null;
56
56
  };
57
57
  /**
58
- * Whole-list replacement of the host patterns this secret is presented on; absent = unchanged, [] covers no host. A non-empty list needs an injection recipe with a header, and no pattern may name the platform API host or the object store host.
58
+ * Deprecated: write injection.hosts instead. Accepted for one release and moved into the recipe's hosts; a request whose recipe names other hosts is refused. Absent leaves the recipe's hosts unchanged; a list replaces them.
59
59
  * @type {Array<string>}
60
60
  * @memberof UpdateSecretRequest
61
+ * @deprecated
61
62
  */
62
63
  hosts?: Array<string>;
63
64
  }