@ubiquity-os/plugin-sdk 3.12.4 → 3.12.5

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.
@@ -104,6 +104,11 @@ function normalizeBaseUrl(baseUrl) {
104
104
  // src/types/manifest.ts
105
105
  var import_typebox2 = require("@sinclair/typebox");
106
106
  var import_webhooks2 = require("@octokit/webhooks");
107
+
108
+ // src/helpers/runtime-manifest.ts
109
+ var EMPTY_VALUE = String();
110
+
111
+ // src/types/manifest.ts
107
112
  var runEvent = import_typebox2.Type.Union(import_webhooks2.emitterEventNames.map((o) => import_typebox2.Type.Literal(o)));
108
113
  var exampleCommandExecutionSchema = import_typebox2.Type.Object({
109
114
  commandInvocation: import_typebox2.Type.String({ minLength: 1 }),
@@ -65,6 +65,11 @@ function normalizeBaseUrl(baseUrl) {
65
65
  // src/types/manifest.ts
66
66
  import { Type as T2 } from "@sinclair/typebox";
67
67
  import { emitterEventNames as emitterEventNames2 } from "@octokit/webhooks";
68
+
69
+ // src/helpers/runtime-manifest.ts
70
+ var EMPTY_VALUE = String();
71
+
72
+ // src/types/manifest.ts
68
73
  var runEvent = T2.Union(emitterEventNames2.map((o) => T2.Literal(o)));
69
74
  var exampleCommandExecutionSchema = T2.Object({
70
75
  commandInvocation: T2.String({ minLength: 1 }),
package/dist/index.js CHANGED
@@ -854,35 +854,43 @@ var import_hono = require("hono");
854
854
  var import_adapter2 = require("hono/adapter");
855
855
  var import_http_exception = require("hono/http-exception");
856
856
 
857
+ // src/types/manifest.ts
858
+ var import_typebox4 = require("@sinclair/typebox");
859
+ var import_webhooks = require("@octokit/webhooks");
860
+
857
861
  // src/helpers/runtime-manifest.ts
858
862
  var EMPTY_VALUE = String();
859
- function readRuntimeTimeline() {
860
- if (typeof globalThis.Deno !== "undefined" && typeof globalThis.Deno?.env?.get === "function") {
861
- const denoTimeline = globalThis.Deno.env.get("DENO_TIMELINE");
862
- if (typeof denoTimeline === "string" && denoTimeline.trim()) {
863
- return denoTimeline.trim();
863
+ var GITHUB_HEADS_PREFIX = "refs/heads/";
864
+ var GITHUB_TAGS_PREFIX = "refs/tags/";
865
+ function readRuntimeEnvValue(env, key) {
866
+ const explicitValue = env?.[key];
867
+ if (typeof explicitValue === "string" && explicitValue.trim()) {
868
+ return explicitValue.trim();
869
+ }
870
+ const runtime = globalThis;
871
+ if (typeof runtime.Deno?.env?.get === "function") {
872
+ const denoValue = runtime.Deno.env.get(key);
873
+ if (typeof denoValue === "string" && denoValue.trim()) {
874
+ return denoValue.trim();
864
875
  }
865
876
  }
866
877
  if (typeof process !== "undefined") {
867
- const processTimeline = process.env.DENO_TIMELINE;
868
- if (typeof processTimeline === "string" && processTimeline.trim()) {
869
- return processTimeline.trim();
878
+ const processValue = process.env[key];
879
+ if (typeof processValue === "string" && processValue.trim()) {
880
+ return processValue.trim();
870
881
  }
871
882
  }
872
883
  return EMPTY_VALUE;
873
884
  }
874
- function resolveRuntimeRefName(timeline) {
875
- if (!timeline) {
885
+ function parseRefNameFromGitHubRef(ref) {
886
+ if (!ref) {
876
887
  return EMPTY_VALUE;
877
888
  }
878
- if (timeline === "production") {
879
- return "main";
880
- }
881
- if (timeline.startsWith("git-branch/")) {
882
- return timeline.slice("git-branch/".length);
889
+ if (ref.startsWith(GITHUB_HEADS_PREFIX)) {
890
+ return ref.slice(GITHUB_HEADS_PREFIX.length);
883
891
  }
884
- if (timeline.startsWith("preview/")) {
885
- return timeline.slice("preview/".length);
892
+ if (ref.startsWith(GITHUB_TAGS_PREFIX)) {
893
+ return ref.slice(GITHUB_TAGS_PREFIX.length);
886
894
  }
887
895
  return EMPTY_VALUE;
888
896
  }
@@ -897,25 +905,59 @@ function overrideShortName(shortName, refName) {
897
905
  }
898
906
  return `${repository}@${refName}`;
899
907
  }
900
- function resolveRuntimeManifest(manifest, requestUrl) {
901
- const timeline = readRuntimeTimeline();
902
- const refName = resolveRuntimeRefName(timeline);
908
+ function resolveRuntimeRefName(env) {
909
+ const explicitRefName = readRuntimeEnvValue(env, "REF_NAME");
910
+ if (explicitRefName) {
911
+ return explicitRefName;
912
+ }
913
+ const legacyManifestRefName = readRuntimeEnvValue(env, "PLUGIN_MANIFEST_REF_NAME");
914
+ if (legacyManifestRefName) {
915
+ return legacyManifestRefName;
916
+ }
917
+ const githubRefName = readRuntimeEnvValue(env, "GITHUB_REF_NAME");
918
+ if (githubRefName) {
919
+ return githubRefName;
920
+ }
921
+ return parseRefNameFromGitHubRef(readRuntimeEnvValue(env, "GITHUB_REF"));
922
+ }
923
+ function resolveRuntimeManifest(manifest, env) {
924
+ const refName = resolveRuntimeRefName(env);
903
925
  if (!refName) {
904
926
  return manifest;
905
927
  }
906
- let homepageUrl;
907
- try {
908
- homepageUrl = new URL(requestUrl).origin;
909
- } catch {
910
- homepageUrl = void 0;
911
- }
912
928
  return {
913
929
  ...manifest,
914
- short_name: overrideShortName(manifest.short_name, refName),
915
- ...homepageUrl ? { homepage_url: homepageUrl } : {}
930
+ short_name: overrideShortName(manifest.short_name, refName)
916
931
  };
917
932
  }
918
933
 
934
+ // src/types/manifest.ts
935
+ var runEvent = import_typebox4.Type.Union(import_webhooks.emitterEventNames.map((o) => import_typebox4.Type.Literal(o)));
936
+ var exampleCommandExecutionSchema = import_typebox4.Type.Object({
937
+ commandInvocation: import_typebox4.Type.String({ minLength: 1 }),
938
+ githubContext: import_typebox4.Type.Optional(import_typebox4.Type.Record(import_typebox4.Type.String(), import_typebox4.Type.Any())),
939
+ expectedToolCallResult: import_typebox4.Type.Object({
940
+ function: import_typebox4.Type.String({ minLength: 1 }),
941
+ parameters: import_typebox4.Type.Record(import_typebox4.Type.String(), import_typebox4.Type.Any())
942
+ })
943
+ });
944
+ var commandSchema = import_typebox4.Type.Object({
945
+ description: import_typebox4.Type.String({ minLength: 1 }),
946
+ "ubiquity:example": import_typebox4.Type.String({ minLength: 1 }),
947
+ parameters: import_typebox4.Type.Optional(import_typebox4.Type.Record(import_typebox4.Type.String(), import_typebox4.Type.Any())),
948
+ examples: import_typebox4.Type.Optional(import_typebox4.Type.Array(exampleCommandExecutionSchema, { default: [] }))
949
+ });
950
+ var manifestSchema = import_typebox4.Type.Object({
951
+ name: import_typebox4.Type.String({ minLength: 1 }),
952
+ short_name: import_typebox4.Type.String({ minLength: 1 }),
953
+ description: import_typebox4.Type.Optional(import_typebox4.Type.String({ default: "" })),
954
+ commands: import_typebox4.Type.Optional(import_typebox4.Type.Record(import_typebox4.Type.String({ pattern: "^[A-Za-z-_]+$" }), commandSchema, { default: {} })),
955
+ "ubiquity:listeners": import_typebox4.Type.Optional(import_typebox4.Type.Array(runEvent, { default: [] })),
956
+ configuration: import_typebox4.Type.Optional(import_typebox4.Type.Record(import_typebox4.Type.String(), import_typebox4.Type.Any(), { default: {} })),
957
+ skipBotEvents: import_typebox4.Type.Optional(import_typebox4.Type.Boolean({ default: true })),
958
+ homepage_url: import_typebox4.Type.Optional(import_typebox4.Type.String())
959
+ });
960
+
919
961
  // src/server.ts
920
962
  async function handleError2(context, pluginOptions, error) {
921
963
  console.error(error);
@@ -929,7 +971,7 @@ function createPlugin(handler, manifest, options) {
929
971
  const pluginOptions = getPluginOptions(options);
930
972
  const app = new import_hono.Hono();
931
973
  app.get("/manifest.json", (ctx) => {
932
- return ctx.json(resolveRuntimeManifest(manifest, ctx.req.url));
974
+ return ctx.json(resolveRuntimeManifest(manifest, (0, import_adapter2.env)(ctx)));
933
975
  });
934
976
  app.post("/", async function appPost(ctx) {
935
977
  if (ctx.req.header("content-type") !== "application/json") {
package/dist/index.mjs CHANGED
@@ -813,35 +813,43 @@ import { Hono } from "hono";
813
813
  import { env as honoEnv } from "hono/adapter";
814
814
  import { HTTPException } from "hono/http-exception";
815
815
 
816
+ // src/types/manifest.ts
817
+ import { Type as T3 } from "@sinclair/typebox";
818
+ import { emitterEventNames } from "@octokit/webhooks";
819
+
816
820
  // src/helpers/runtime-manifest.ts
817
821
  var EMPTY_VALUE = String();
818
- function readRuntimeTimeline() {
819
- if (typeof globalThis.Deno !== "undefined" && typeof globalThis.Deno?.env?.get === "function") {
820
- const denoTimeline = globalThis.Deno.env.get("DENO_TIMELINE");
821
- if (typeof denoTimeline === "string" && denoTimeline.trim()) {
822
- return denoTimeline.trim();
822
+ var GITHUB_HEADS_PREFIX = "refs/heads/";
823
+ var GITHUB_TAGS_PREFIX = "refs/tags/";
824
+ function readRuntimeEnvValue(env, key) {
825
+ const explicitValue = env?.[key];
826
+ if (typeof explicitValue === "string" && explicitValue.trim()) {
827
+ return explicitValue.trim();
828
+ }
829
+ const runtime = globalThis;
830
+ if (typeof runtime.Deno?.env?.get === "function") {
831
+ const denoValue = runtime.Deno.env.get(key);
832
+ if (typeof denoValue === "string" && denoValue.trim()) {
833
+ return denoValue.trim();
823
834
  }
824
835
  }
825
836
  if (typeof process !== "undefined") {
826
- const processTimeline = process.env.DENO_TIMELINE;
827
- if (typeof processTimeline === "string" && processTimeline.trim()) {
828
- return processTimeline.trim();
837
+ const processValue = process.env[key];
838
+ if (typeof processValue === "string" && processValue.trim()) {
839
+ return processValue.trim();
829
840
  }
830
841
  }
831
842
  return EMPTY_VALUE;
832
843
  }
833
- function resolveRuntimeRefName(timeline) {
834
- if (!timeline) {
844
+ function parseRefNameFromGitHubRef(ref) {
845
+ if (!ref) {
835
846
  return EMPTY_VALUE;
836
847
  }
837
- if (timeline === "production") {
838
- return "main";
839
- }
840
- if (timeline.startsWith("git-branch/")) {
841
- return timeline.slice("git-branch/".length);
848
+ if (ref.startsWith(GITHUB_HEADS_PREFIX)) {
849
+ return ref.slice(GITHUB_HEADS_PREFIX.length);
842
850
  }
843
- if (timeline.startsWith("preview/")) {
844
- return timeline.slice("preview/".length);
851
+ if (ref.startsWith(GITHUB_TAGS_PREFIX)) {
852
+ return ref.slice(GITHUB_TAGS_PREFIX.length);
845
853
  }
846
854
  return EMPTY_VALUE;
847
855
  }
@@ -856,25 +864,59 @@ function overrideShortName(shortName, refName) {
856
864
  }
857
865
  return `${repository}@${refName}`;
858
866
  }
859
- function resolveRuntimeManifest(manifest, requestUrl) {
860
- const timeline = readRuntimeTimeline();
861
- const refName = resolveRuntimeRefName(timeline);
867
+ function resolveRuntimeRefName(env) {
868
+ const explicitRefName = readRuntimeEnvValue(env, "REF_NAME");
869
+ if (explicitRefName) {
870
+ return explicitRefName;
871
+ }
872
+ const legacyManifestRefName = readRuntimeEnvValue(env, "PLUGIN_MANIFEST_REF_NAME");
873
+ if (legacyManifestRefName) {
874
+ return legacyManifestRefName;
875
+ }
876
+ const githubRefName = readRuntimeEnvValue(env, "GITHUB_REF_NAME");
877
+ if (githubRefName) {
878
+ return githubRefName;
879
+ }
880
+ return parseRefNameFromGitHubRef(readRuntimeEnvValue(env, "GITHUB_REF"));
881
+ }
882
+ function resolveRuntimeManifest(manifest, env) {
883
+ const refName = resolveRuntimeRefName(env);
862
884
  if (!refName) {
863
885
  return manifest;
864
886
  }
865
- let homepageUrl;
866
- try {
867
- homepageUrl = new URL(requestUrl).origin;
868
- } catch {
869
- homepageUrl = void 0;
870
- }
871
887
  return {
872
888
  ...manifest,
873
- short_name: overrideShortName(manifest.short_name, refName),
874
- ...homepageUrl ? { homepage_url: homepageUrl } : {}
889
+ short_name: overrideShortName(manifest.short_name, refName)
875
890
  };
876
891
  }
877
892
 
893
+ // src/types/manifest.ts
894
+ var runEvent = T3.Union(emitterEventNames.map((o) => T3.Literal(o)));
895
+ var exampleCommandExecutionSchema = T3.Object({
896
+ commandInvocation: T3.String({ minLength: 1 }),
897
+ githubContext: T3.Optional(T3.Record(T3.String(), T3.Any())),
898
+ expectedToolCallResult: T3.Object({
899
+ function: T3.String({ minLength: 1 }),
900
+ parameters: T3.Record(T3.String(), T3.Any())
901
+ })
902
+ });
903
+ var commandSchema = T3.Object({
904
+ description: T3.String({ minLength: 1 }),
905
+ "ubiquity:example": T3.String({ minLength: 1 }),
906
+ parameters: T3.Optional(T3.Record(T3.String(), T3.Any())),
907
+ examples: T3.Optional(T3.Array(exampleCommandExecutionSchema, { default: [] }))
908
+ });
909
+ var manifestSchema = T3.Object({
910
+ name: T3.String({ minLength: 1 }),
911
+ short_name: T3.String({ minLength: 1 }),
912
+ description: T3.Optional(T3.String({ default: "" })),
913
+ commands: T3.Optional(T3.Record(T3.String({ pattern: "^[A-Za-z-_]+$" }), commandSchema, { default: {} })),
914
+ "ubiquity:listeners": T3.Optional(T3.Array(runEvent, { default: [] })),
915
+ configuration: T3.Optional(T3.Record(T3.String(), T3.Any(), { default: {} })),
916
+ skipBotEvents: T3.Optional(T3.Boolean({ default: true })),
917
+ homepage_url: T3.Optional(T3.String())
918
+ });
919
+
878
920
  // src/server.ts
879
921
  async function handleError2(context, pluginOptions, error) {
880
922
  console.error(error);
@@ -888,7 +930,7 @@ function createPlugin(handler, manifest, options) {
888
930
  const pluginOptions = getPluginOptions(options);
889
931
  const app = new Hono();
890
932
  app.get("/manifest.json", (ctx) => {
891
- return ctx.json(resolveRuntimeManifest(manifest, ctx.req.url));
933
+ return ctx.json(resolveRuntimeManifest(manifest, honoEnv(ctx)));
892
934
  });
893
935
  app.post("/", async function appPost(ctx) {
894
936
  if (ctx.req.header("content-type") !== "application/json") {
@@ -1,6 +1,9 @@
1
1
  import * as _sinclair_typebox from '@sinclair/typebox';
2
2
  import { Static } from '@sinclair/typebox';
3
3
 
4
+ type RuntimeManifestEnv = Record<string, unknown>;
5
+ declare function resolveRuntimeManifest(manifest: Manifest, env?: RuntimeManifestEnv): Manifest;
6
+
4
7
  declare const runEvent: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.promote_to_enterprise" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issue_dependencies" | "issue_dependencies.blocked_by_added" | "issue_dependencies.blocked_by_removed" | "issue_dependencies.blocking_added" | "issue_dependencies.blocking_removed" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.typed" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "issues.untyped" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "projects_v2_status_update" | "projects_v2_status_update.created" | "projects_v2_status_update.deleted" | "projects_v2_status_update.edited" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.assigned" | "secret_scanning_alert.created" | "secret_scanning_alert.publicly_leaked" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.unassigned" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "secret_scanning_scan" | "secret_scanning_scan.completed" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "sub_issues" | "sub_issues.parent_issue_added" | "sub_issues.parent_issue_removed" | "sub_issues.sub_issue_added" | "sub_issues.sub_issue_removed" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>;
5
8
  declare const exampleCommandExecutionSchema: _sinclair_typebox.TObject<{
6
9
  commandInvocation: _sinclair_typebox.TString;
@@ -47,4 +50,4 @@ declare const manifestSchema: _sinclair_typebox.TObject<{
47
50
  }>;
48
51
  type Manifest = Static<typeof manifestSchema>;
49
52
 
50
- export { type Manifest, commandSchema, exampleCommandExecutionSchema, manifestSchema, runEvent };
53
+ export { type Manifest, commandSchema, exampleCommandExecutionSchema, manifestSchema, resolveRuntimeManifest, runEvent };
@@ -1,6 +1,9 @@
1
1
  import * as _sinclair_typebox from '@sinclair/typebox';
2
2
  import { Static } from '@sinclair/typebox';
3
3
 
4
+ type RuntimeManifestEnv = Record<string, unknown>;
5
+ declare function resolveRuntimeManifest(manifest: Manifest, env?: RuntimeManifestEnv): Manifest;
6
+
4
7
  declare const runEvent: _sinclair_typebox.TUnion<_sinclair_typebox.TLiteral<"branch_protection_configuration" | "branch_protection_configuration.disabled" | "branch_protection_configuration.enabled" | "branch_protection_rule" | "branch_protection_rule.created" | "branch_protection_rule.deleted" | "branch_protection_rule.edited" | "check_run" | "check_run.completed" | "check_run.created" | "check_run.requested_action" | "check_run.rerequested" | "check_suite" | "check_suite.completed" | "check_suite.requested" | "check_suite.rerequested" | "code_scanning_alert" | "code_scanning_alert.appeared_in_branch" | "code_scanning_alert.closed_by_user" | "code_scanning_alert.created" | "code_scanning_alert.fixed" | "code_scanning_alert.reopened" | "code_scanning_alert.reopened_by_user" | "commit_comment" | "commit_comment.created" | "create" | "custom_property" | "custom_property.created" | "custom_property.deleted" | "custom_property.promote_to_enterprise" | "custom_property.updated" | "custom_property_values" | "custom_property_values.updated" | "delete" | "dependabot_alert" | "dependabot_alert.auto_dismissed" | "dependabot_alert.auto_reopened" | "dependabot_alert.created" | "dependabot_alert.dismissed" | "dependabot_alert.fixed" | "dependabot_alert.reintroduced" | "dependabot_alert.reopened" | "deploy_key" | "deploy_key.created" | "deploy_key.deleted" | "deployment" | "deployment.created" | "deployment_protection_rule" | "deployment_protection_rule.requested" | "deployment_review" | "deployment_review.approved" | "deployment_review.rejected" | "deployment_review.requested" | "deployment_status" | "deployment_status.created" | "discussion" | "discussion.answered" | "discussion.category_changed" | "discussion.closed" | "discussion.created" | "discussion.deleted" | "discussion.edited" | "discussion.labeled" | "discussion.locked" | "discussion.pinned" | "discussion.reopened" | "discussion.transferred" | "discussion.unanswered" | "discussion.unlabeled" | "discussion.unlocked" | "discussion.unpinned" | "discussion_comment" | "discussion_comment.created" | "discussion_comment.deleted" | "discussion_comment.edited" | "fork" | "github_app_authorization" | "github_app_authorization.revoked" | "gollum" | "installation" | "installation.created" | "installation.deleted" | "installation.new_permissions_accepted" | "installation.suspend" | "installation.unsuspend" | "installation_repositories" | "installation_repositories.added" | "installation_repositories.removed" | "installation_target" | "installation_target.renamed" | "issue_comment" | "issue_comment.created" | "issue_comment.deleted" | "issue_comment.edited" | "issue_dependencies" | "issue_dependencies.blocked_by_added" | "issue_dependencies.blocked_by_removed" | "issue_dependencies.blocking_added" | "issue_dependencies.blocking_removed" | "issues" | "issues.assigned" | "issues.closed" | "issues.deleted" | "issues.demilestoned" | "issues.edited" | "issues.labeled" | "issues.locked" | "issues.milestoned" | "issues.opened" | "issues.pinned" | "issues.reopened" | "issues.transferred" | "issues.typed" | "issues.unassigned" | "issues.unlabeled" | "issues.unlocked" | "issues.unpinned" | "issues.untyped" | "label" | "label.created" | "label.deleted" | "label.edited" | "marketplace_purchase" | "marketplace_purchase.cancelled" | "marketplace_purchase.changed" | "marketplace_purchase.pending_change" | "marketplace_purchase.pending_change_cancelled" | "marketplace_purchase.purchased" | "member" | "member.added" | "member.edited" | "member.removed" | "membership" | "membership.added" | "membership.removed" | "merge_group" | "merge_group.checks_requested" | "merge_group.destroyed" | "meta" | "meta.deleted" | "milestone" | "milestone.closed" | "milestone.created" | "milestone.deleted" | "milestone.edited" | "milestone.opened" | "org_block" | "org_block.blocked" | "org_block.unblocked" | "organization" | "organization.deleted" | "organization.member_added" | "organization.member_invited" | "organization.member_removed" | "organization.renamed" | "package" | "package.published" | "package.updated" | "page_build" | "personal_access_token_request" | "personal_access_token_request.approved" | "personal_access_token_request.cancelled" | "personal_access_token_request.created" | "personal_access_token_request.denied" | "ping" | "project" | "project.closed" | "project.created" | "project.deleted" | "project.edited" | "project.reopened" | "project_card" | "project_card.converted" | "project_card.created" | "project_card.deleted" | "project_card.edited" | "project_card.moved" | "project_column" | "project_column.created" | "project_column.deleted" | "project_column.edited" | "project_column.moved" | "projects_v2" | "projects_v2.closed" | "projects_v2.created" | "projects_v2.deleted" | "projects_v2.edited" | "projects_v2.reopened" | "projects_v2_item" | "projects_v2_item.archived" | "projects_v2_item.converted" | "projects_v2_item.created" | "projects_v2_item.deleted" | "projects_v2_item.edited" | "projects_v2_item.reordered" | "projects_v2_item.restored" | "projects_v2_status_update" | "projects_v2_status_update.created" | "projects_v2_status_update.deleted" | "projects_v2_status_update.edited" | "public" | "pull_request" | "pull_request.assigned" | "pull_request.auto_merge_disabled" | "pull_request.auto_merge_enabled" | "pull_request.closed" | "pull_request.converted_to_draft" | "pull_request.demilestoned" | "pull_request.dequeued" | "pull_request.edited" | "pull_request.enqueued" | "pull_request.labeled" | "pull_request.locked" | "pull_request.milestoned" | "pull_request.opened" | "pull_request.ready_for_review" | "pull_request.reopened" | "pull_request.review_request_removed" | "pull_request.review_requested" | "pull_request.synchronize" | "pull_request.unassigned" | "pull_request.unlabeled" | "pull_request.unlocked" | "pull_request_review" | "pull_request_review.dismissed" | "pull_request_review.edited" | "pull_request_review.submitted" | "pull_request_review_comment" | "pull_request_review_comment.created" | "pull_request_review_comment.deleted" | "pull_request_review_comment.edited" | "pull_request_review_thread" | "pull_request_review_thread.resolved" | "pull_request_review_thread.unresolved" | "push" | "registry_package" | "registry_package.published" | "registry_package.updated" | "release" | "release.created" | "release.deleted" | "release.edited" | "release.prereleased" | "release.published" | "release.released" | "release.unpublished" | "repository" | "repository.archived" | "repository.created" | "repository.deleted" | "repository.edited" | "repository.privatized" | "repository.publicized" | "repository.renamed" | "repository.transferred" | "repository.unarchived" | "repository_advisory" | "repository_advisory.published" | "repository_advisory.reported" | "repository_dispatch" | "repository_dispatch.sample.collected" | "repository_import" | "repository_ruleset" | "repository_ruleset.created" | "repository_ruleset.deleted" | "repository_ruleset.edited" | "repository_vulnerability_alert" | "repository_vulnerability_alert.create" | "repository_vulnerability_alert.dismiss" | "repository_vulnerability_alert.reopen" | "repository_vulnerability_alert.resolve" | "secret_scanning_alert" | "secret_scanning_alert.assigned" | "secret_scanning_alert.created" | "secret_scanning_alert.publicly_leaked" | "secret_scanning_alert.reopened" | "secret_scanning_alert.resolved" | "secret_scanning_alert.unassigned" | "secret_scanning_alert.validated" | "secret_scanning_alert_location" | "secret_scanning_alert_location.created" | "secret_scanning_scan" | "secret_scanning_scan.completed" | "security_advisory" | "security_advisory.published" | "security_advisory.updated" | "security_advisory.withdrawn" | "security_and_analysis" | "sponsorship" | "sponsorship.cancelled" | "sponsorship.created" | "sponsorship.edited" | "sponsorship.pending_cancellation" | "sponsorship.pending_tier_change" | "sponsorship.tier_changed" | "star" | "star.created" | "star.deleted" | "status" | "sub_issues" | "sub_issues.parent_issue_added" | "sub_issues.parent_issue_removed" | "sub_issues.sub_issue_added" | "sub_issues.sub_issue_removed" | "team" | "team.added_to_repository" | "team.created" | "team.deleted" | "team.edited" | "team.removed_from_repository" | "team_add" | "watch" | "watch.started" | "workflow_dispatch" | "workflow_job" | "workflow_job.completed" | "workflow_job.in_progress" | "workflow_job.queued" | "workflow_job.waiting" | "workflow_run" | "workflow_run.completed" | "workflow_run.in_progress" | "workflow_run.requested">[]>;
5
8
  declare const exampleCommandExecutionSchema: _sinclair_typebox.TObject<{
6
9
  commandInvocation: _sinclair_typebox.TString;
@@ -47,4 +50,4 @@ declare const manifestSchema: _sinclair_typebox.TObject<{
47
50
  }>;
48
51
  type Manifest = Static<typeof manifestSchema>;
49
52
 
50
- export { type Manifest, commandSchema, exampleCommandExecutionSchema, manifestSchema, runEvent };
53
+ export { type Manifest, commandSchema, exampleCommandExecutionSchema, manifestSchema, resolveRuntimeManifest, runEvent };
package/dist/manifest.js CHANGED
@@ -23,11 +23,87 @@ __export(manifest_exports, {
23
23
  commandSchema: () => commandSchema,
24
24
  exampleCommandExecutionSchema: () => exampleCommandExecutionSchema,
25
25
  manifestSchema: () => manifestSchema,
26
+ resolveRuntimeManifest: () => resolveRuntimeManifest,
26
27
  runEvent: () => runEvent
27
28
  });
28
29
  module.exports = __toCommonJS(manifest_exports);
29
30
  var import_typebox = require("@sinclair/typebox");
30
31
  var import_webhooks = require("@octokit/webhooks");
32
+
33
+ // src/helpers/runtime-manifest.ts
34
+ var EMPTY_VALUE = String();
35
+ var GITHUB_HEADS_PREFIX = "refs/heads/";
36
+ var GITHUB_TAGS_PREFIX = "refs/tags/";
37
+ function readRuntimeEnvValue(env, key) {
38
+ const explicitValue = env?.[key];
39
+ if (typeof explicitValue === "string" && explicitValue.trim()) {
40
+ return explicitValue.trim();
41
+ }
42
+ const runtime = globalThis;
43
+ if (typeof runtime.Deno?.env?.get === "function") {
44
+ const denoValue = runtime.Deno.env.get(key);
45
+ if (typeof denoValue === "string" && denoValue.trim()) {
46
+ return denoValue.trim();
47
+ }
48
+ }
49
+ if (typeof process !== "undefined") {
50
+ const processValue = process.env[key];
51
+ if (typeof processValue === "string" && processValue.trim()) {
52
+ return processValue.trim();
53
+ }
54
+ }
55
+ return EMPTY_VALUE;
56
+ }
57
+ function parseRefNameFromGitHubRef(ref) {
58
+ if (!ref) {
59
+ return EMPTY_VALUE;
60
+ }
61
+ if (ref.startsWith(GITHUB_HEADS_PREFIX)) {
62
+ return ref.slice(GITHUB_HEADS_PREFIX.length);
63
+ }
64
+ if (ref.startsWith(GITHUB_TAGS_PREFIX)) {
65
+ return ref.slice(GITHUB_TAGS_PREFIX.length);
66
+ }
67
+ return EMPTY_VALUE;
68
+ }
69
+ function overrideShortName(shortName, refName) {
70
+ if (!shortName || !refName) {
71
+ return shortName;
72
+ }
73
+ const separatorIndex = shortName.lastIndexOf("@");
74
+ const repository = separatorIndex === -1 ? shortName : shortName.slice(0, separatorIndex);
75
+ if (!repository) {
76
+ return shortName;
77
+ }
78
+ return `${repository}@${refName}`;
79
+ }
80
+ function resolveRuntimeRefName(env) {
81
+ const explicitRefName = readRuntimeEnvValue(env, "REF_NAME");
82
+ if (explicitRefName) {
83
+ return explicitRefName;
84
+ }
85
+ const legacyManifestRefName = readRuntimeEnvValue(env, "PLUGIN_MANIFEST_REF_NAME");
86
+ if (legacyManifestRefName) {
87
+ return legacyManifestRefName;
88
+ }
89
+ const githubRefName = readRuntimeEnvValue(env, "GITHUB_REF_NAME");
90
+ if (githubRefName) {
91
+ return githubRefName;
92
+ }
93
+ return parseRefNameFromGitHubRef(readRuntimeEnvValue(env, "GITHUB_REF"));
94
+ }
95
+ function resolveRuntimeManifest(manifest, env) {
96
+ const refName = resolveRuntimeRefName(env);
97
+ if (!refName) {
98
+ return manifest;
99
+ }
100
+ return {
101
+ ...manifest,
102
+ short_name: overrideShortName(manifest.short_name, refName)
103
+ };
104
+ }
105
+
106
+ // src/types/manifest.ts
31
107
  var runEvent = import_typebox.Type.Union(import_webhooks.emitterEventNames.map((o) => import_typebox.Type.Literal(o)));
32
108
  var exampleCommandExecutionSchema = import_typebox.Type.Object({
33
109
  commandInvocation: import_typebox.Type.String({ minLength: 1 }),
@@ -58,5 +134,6 @@ var manifestSchema = import_typebox.Type.Object({
58
134
  commandSchema,
59
135
  exampleCommandExecutionSchema,
60
136
  manifestSchema,
137
+ resolveRuntimeManifest,
61
138
  runEvent
62
139
  });
package/dist/manifest.mjs CHANGED
@@ -1,6 +1,81 @@
1
1
  // src/types/manifest.ts
2
2
  import { Type as T } from "@sinclair/typebox";
3
3
  import { emitterEventNames } from "@octokit/webhooks";
4
+
5
+ // src/helpers/runtime-manifest.ts
6
+ var EMPTY_VALUE = String();
7
+ var GITHUB_HEADS_PREFIX = "refs/heads/";
8
+ var GITHUB_TAGS_PREFIX = "refs/tags/";
9
+ function readRuntimeEnvValue(env, key) {
10
+ const explicitValue = env?.[key];
11
+ if (typeof explicitValue === "string" && explicitValue.trim()) {
12
+ return explicitValue.trim();
13
+ }
14
+ const runtime = globalThis;
15
+ if (typeof runtime.Deno?.env?.get === "function") {
16
+ const denoValue = runtime.Deno.env.get(key);
17
+ if (typeof denoValue === "string" && denoValue.trim()) {
18
+ return denoValue.trim();
19
+ }
20
+ }
21
+ if (typeof process !== "undefined") {
22
+ const processValue = process.env[key];
23
+ if (typeof processValue === "string" && processValue.trim()) {
24
+ return processValue.trim();
25
+ }
26
+ }
27
+ return EMPTY_VALUE;
28
+ }
29
+ function parseRefNameFromGitHubRef(ref) {
30
+ if (!ref) {
31
+ return EMPTY_VALUE;
32
+ }
33
+ if (ref.startsWith(GITHUB_HEADS_PREFIX)) {
34
+ return ref.slice(GITHUB_HEADS_PREFIX.length);
35
+ }
36
+ if (ref.startsWith(GITHUB_TAGS_PREFIX)) {
37
+ return ref.slice(GITHUB_TAGS_PREFIX.length);
38
+ }
39
+ return EMPTY_VALUE;
40
+ }
41
+ function overrideShortName(shortName, refName) {
42
+ if (!shortName || !refName) {
43
+ return shortName;
44
+ }
45
+ const separatorIndex = shortName.lastIndexOf("@");
46
+ const repository = separatorIndex === -1 ? shortName : shortName.slice(0, separatorIndex);
47
+ if (!repository) {
48
+ return shortName;
49
+ }
50
+ return `${repository}@${refName}`;
51
+ }
52
+ function resolveRuntimeRefName(env) {
53
+ const explicitRefName = readRuntimeEnvValue(env, "REF_NAME");
54
+ if (explicitRefName) {
55
+ return explicitRefName;
56
+ }
57
+ const legacyManifestRefName = readRuntimeEnvValue(env, "PLUGIN_MANIFEST_REF_NAME");
58
+ if (legacyManifestRefName) {
59
+ return legacyManifestRefName;
60
+ }
61
+ const githubRefName = readRuntimeEnvValue(env, "GITHUB_REF_NAME");
62
+ if (githubRefName) {
63
+ return githubRefName;
64
+ }
65
+ return parseRefNameFromGitHubRef(readRuntimeEnvValue(env, "GITHUB_REF"));
66
+ }
67
+ function resolveRuntimeManifest(manifest, env) {
68
+ const refName = resolveRuntimeRefName(env);
69
+ if (!refName) {
70
+ return manifest;
71
+ }
72
+ return {
73
+ ...manifest,
74
+ short_name: overrideShortName(manifest.short_name, refName)
75
+ };
76
+ }
77
+
78
+ // src/types/manifest.ts
4
79
  var runEvent = T.Union(emitterEventNames.map((o) => T.Literal(o)));
5
80
  var exampleCommandExecutionSchema = T.Object({
6
81
  commandInvocation: T.String({ minLength: 1 }),
@@ -30,5 +105,6 @@ export {
30
105
  commandSchema,
31
106
  exampleCommandExecutionSchema,
32
107
  manifestSchema,
108
+ resolveRuntimeManifest,
33
109
  runEvent
34
110
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubiquity-os/plugin-sdk",
3
- "version": "3.12.4",
3
+ "version": "3.12.5",
4
4
  "description": "SDK for plugin support.",
5
5
  "author": "Ubiquity DAO",
6
6
  "license": "MIT",