@burdenoff/microfe-devportal 2026.1108.2 → 2026.1109.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/devportal/DevportalRoot.js +68 -61
- package/dist/devportal/DevportalRoot.js.map +1 -1
- package/dist/devportal/DevportalRoutes.js +137 -133
- package/dist/devportal/DevportalRoutes.js.map +1 -1
- package/dist/devportal/components/SectionNav.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +229 -217
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/NodeLifecyclePage.js +2 -0
- package/dist/devportal/pages/NodeLifecyclePage.js.map +1 -1
- package/dist/devportal/pages/TimeCampusAppletsPage.d.ts +2 -0
- package/dist/devportal/pages/TimeCampusAppletsPage.js +490 -0
- package/dist/devportal/pages/TimeCampusAppletsPage.js.map +1 -0
- package/dist/devportal/utils/constants.js +5 -1
- package/dist/devportal/utils/constants.js.map +1 -1
- package/dist/devportal/utils/timecampusApplets.d.ts +98 -0
- package/dist/devportal/utils/timecampusApplets.js +130 -0
- package/dist/devportal/utils/timecampusApplets.js.map +1 -0
- package/dist/generated/global-operations.d.ts +46 -5
- package/dist/generated/global-operations.js.map +1 -1
- package/dist/generated/global-types.d.ts +3901 -638
- package/dist/generated/global-types.js.map +1 -1
- package/dist/generated/wspace-operations.d.ts +678 -2
- package/dist/generated/wspace-operations.js +203 -4
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +166197 -34713
- package/dist/translations/en.d.ts +46 -0
- package/dist/translations/en.js +47 -1
- package/dist/translations/en.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["APP_STATUS_COLORS","WEBHOOK_STATUS_COLORS","DELIVERY_STATUS_COLORS","INVITATION_STATUS_COLORS","ORG_TIER_COLORS","PARTNER_TIER_COLORS","APP_TYPE_LABELS","ORG_ROLE_LABELS"],"sources":["../../../src/devportal/utils/constants.ts"],"sourcesContent":["/**\n * Developer Portal Constants\n */\n\n// API Endpoints\nexport const API_ENDPOINTS = {\n GRAPHQL: \"/graphql\",\n} as const;\n\n// App Status Colors\nexport const APP_STATUS_COLORS: Record<string, string> = {\n DRAFT: \"bg-bg-sunken text-text-primary\",\n SUBMITTED: \"bg-status-info-bg-subtle text-status-info-text\",\n IN_REVIEW: \"bg-status-warning-bg-subtle text-status-warning-text\",\n APPROVED: \"bg-status-success-bg-subtle text-status-success-text\",\n PUBLISHED: \"bg-status-success-bg-subtle text-status-success-text\",\n REJECTED: \"bg-status-error-bg-subtle text-status-error-text\",\n SUSPENDED: \"bg-accent-orange-subtle text-accent-orange\",\n DEPRECATED: \"bg-bg-sunken text-text-secondary\",\n ACTIVE: \"bg-status-success-bg-subtle text-status-success-text\",\n INACTIVE: \"bg-bg-sunken text-text-secondary\",\n REVOKED: \"bg-status-error-bg-subtle text-status-error-text\",\n};\n\n// Webhook Status Colors\nexport const WEBHOOK_STATUS_COLORS: Record<string, string> = {\n ACTIVE: \"bg-status-success-bg-subtle text-status-success-text\",\n PAUSED: \"bg-status-warning-bg-subtle text-status-warning-text\",\n FAILED: \"bg-status-error-bg-subtle text-status-error-text\",\n DISABLED: \"bg-bg-sunken text-text-secondary\",\n};\n\n// Delivery Status Colors\nexport const DELIVERY_STATUS_COLORS: Record<string, string> = {\n PENDING: \"bg-bg-sunken text-text-primary\",\n DELIVERING: \"bg-status-info-bg-subtle text-status-info-text\",\n DELIVERED: \"bg-status-success-bg-subtle text-status-success-text\",\n FAILED: \"bg-status-error-bg-subtle text-status-error-text\",\n RETRYING: \"bg-status-warning-bg-subtle text-status-warning-text\",\n};\n\n// Invitation Status Colors\nexport const INVITATION_STATUS_COLORS: Record<string, string> = {\n PENDING: \"bg-status-warning-bg-subtle text-status-warning-text\",\n ACCEPTED: \"bg-status-success-bg-subtle text-status-success-text\",\n REJECTED: \"bg-status-error-bg-subtle text-status-error-text\",\n EXPIRED: \"bg-bg-sunken text-text-secondary\",\n CANCELLED: \"bg-bg-sunken text-text-secondary\",\n};\n\n// Organization Tier Colors\nexport const ORG_TIER_COLORS: Record<string, string> = {\n FREE: \"bg-bg-sunken text-text-primary\",\n DEVELOPER: \"bg-status-info-bg-subtle text-status-info-text\",\n PROFESSIONAL: \"bg-accent-purple-subtle text-accent-purple\",\n ENTERPRISE: \"bg-status-warning-bg-subtle text-status-warning-text\",\n};\n\n// Partner Tier Colors\nexport const PARTNER_TIER_COLORS: Record<string, string> = {\n REGISTERED: \"bg-bg-sunken text-text-primary\",\n SELECT: \"bg-status-info-bg-subtle text-status-info-text\",\n PREMIER: \"bg-status-warning-bg-subtle text-status-warning-text\",\n};\n\n// App Type Labels\nexport const APP_TYPE_LABELS: Record<string, string> = {\n WEB_APP: \"Web Application\",\n MOBILE_APP: \"Mobile App\",\n DESKTOP_APP: \"Desktop App\",\n CLI_TOOL: \"CLI Tool\",\n API_INTEGRATION: \"API Integration\",\n WORKFLOW: \"Workflow\",\n WIDGET: \"Widget\",\n BOT: \"Bot\",\n SERVICE: \"Service\",\n INTEGRATION: \"Integration\",\n ANALYST: \"Analyst\",\n ASSISTANT: \"Assistant\",\n AUTOMATION: \"Automation\",\n SPECIALIST: \"Specialist\",\n PARSER: \"Parser\",\n DASHBOARD: \"Dashboard Template\",\n};\n\n// OAuth Grant Type Labels\nexport const GRANT_TYPE_LABELS: Record<string, string> = {\n AUTHORIZATION_CODE: \"Authorization Code\",\n REFRESH_TOKEN: \"Refresh Token\",\n CLIENT_CREDENTIALS: \"Client Credentials\",\n IMPLICIT: \"Implicit (Legacy)\",\n PASSWORD: \"Password (Legacy)\",\n};\n\n// API Key Type Labels\nexport const API_KEY_TYPE_LABELS: Record<string, string> = {\n PUBLISHABLE: \"Publishable Key\",\n SECRET: \"Secret Key\",\n RESTRICTED: \"Restricted Key\",\n};\n\n// Organization Role Labels\nexport const ORG_ROLE_LABELS: Record<string, string> = {\n OWNER: \"Owner\",\n ADMIN: \"Admin\",\n DEVELOPER: \"Developer\",\n VIEWER: \"Viewer\",\n};\n\n// Pagination defaults\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\n// Date format\nexport const DATE_FORMAT = \"MMM d, yyyy\";\nexport const DATETIME_FORMAT = \"MMM d, yyyy HH:mm\";\n\n// Documentation links\nexport const DOCS_LINKS = {\n GETTING_STARTED:\n \"https://docs.burdenoff.com/developer-portal/getting-started\",\n API_REFERENCE: \"https://docs.burdenoff.com/api-reference\",\n OAUTH2: \"https://docs.burdenoff.com/developer-portal/oauth2\",\n WEBHOOKS: \"https://docs.burdenoff.com/developer-portal/webhooks\",\n SDK_NODE: \"https://docs.burdenoff.com/sdks/nodejs\",\n SDK_PYTHON: \"https://docs.burdenoff.com/sdks/python\",\n BEST_PRACTICES: \"https://docs.burdenoff.com/developer-portal/best-practices\",\n CHANGELOG: \"https://docs.burdenoff.com/changelog\",\n};\n\n// Feature flags (for progressive rollout)\nexport const FEATURE_FLAGS = {\n SHOW_ANALYTICS: true,\n SHOW_REVENUE: true,\n SHOW_STORE_INTEGRATION: true,\n SHOW_AUDIT_LOGS: true,\n ENABLE_DARK_MODE: true,\n};\n\n// Available OAuth/API scopes\nexport const AVAILABLE_SCOPES = [\n // User scopes\n {\n scope: \"user:read\",\n description: \"Read user profile information\",\n category: \"User\",\n },\n {\n scope: \"user:write\",\n description: \"Modify user profile information\",\n category: \"User\",\n },\n {\n scope: \"user:email\",\n description: \"Access user email address\",\n category: \"User\",\n },\n // Workspace scopes\n {\n scope: \"workspace:read\",\n description: \"Read workspace information\",\n category: \"Workspace\",\n },\n {\n scope: \"workspace:write\",\n description: \"Create and modify workspaces\",\n category: \"Workspace\",\n },\n {\n scope: \"workspace:delete\",\n description: \"Delete workspaces\",\n category: \"Workspace\",\n },\n {\n scope: \"workspace:members\",\n description: \"Manage workspace members\",\n category: \"Workspace\",\n },\n // Project scopes\n {\n scope: \"project:read\",\n description: \"Read project information\",\n category: \"Project\",\n },\n {\n scope: \"project:write\",\n description: \"Create and modify projects\",\n category: \"Project\",\n },\n {\n scope: \"project:delete\",\n description: \"Delete projects\",\n category: \"Project\",\n },\n // Task scopes\n { scope: \"task:read\", description: \"Read tasks\", category: \"Task\" },\n {\n scope: \"task:write\",\n description: \"Create and modify tasks\",\n category: \"Task\",\n },\n { scope: \"task:delete\", description: \"Delete tasks\", category: \"Task\" },\n // File scopes\n { scope: \"file:read\", description: \"Read files\", category: \"File\" },\n {\n scope: \"file:write\",\n description: \"Upload and modify files\",\n category: \"File\",\n },\n { scope: \"file:delete\", description: \"Delete files\", category: \"File\" },\n // Offline access\n {\n scope: \"offline_access\",\n description: \"Access data while user is offline\",\n category: \"Access\",\n },\n] as const;\n"],"mappings":";AAUA,IAAaA,IAA4C;CACvD,OAAO;CACP,WAAW;CACX,WAAW;CACX,UAAU;CACV,WAAW;CACX,UAAU;CACV,WAAW;CACX,YAAY;CACZ,QAAQ;CACR,UAAU;CACV,SAAS;
|
|
1
|
+
{"version":3,"file":"constants.js","names":["APP_STATUS_COLORS","WEBHOOK_STATUS_COLORS","DELIVERY_STATUS_COLORS","INVITATION_STATUS_COLORS","ORG_TIER_COLORS","PARTNER_TIER_COLORS","APP_TYPE_LABELS","ORG_ROLE_LABELS"],"sources":["../../../src/devportal/utils/constants.ts"],"sourcesContent":["/**\n * Developer Portal Constants\n */\n\n// API Endpoints\nexport const API_ENDPOINTS = {\n GRAPHQL: \"/graphql\",\n} as const;\n\n// App Status Colors\nexport const APP_STATUS_COLORS: Record<string, string> = {\n DRAFT: \"bg-bg-sunken text-text-primary\",\n SUBMITTED: \"bg-status-info-bg-subtle text-status-info-text\",\n IN_REVIEW: \"bg-status-warning-bg-subtle text-status-warning-text\",\n APPROVED: \"bg-status-success-bg-subtle text-status-success-text\",\n PUBLISHED: \"bg-status-success-bg-subtle text-status-success-text\",\n REJECTED: \"bg-status-error-bg-subtle text-status-error-text\",\n SUSPENDED: \"bg-accent-orange-subtle text-accent-orange\",\n DEPRECATED: \"bg-bg-sunken text-text-secondary\",\n ACTIVE: \"bg-status-success-bg-subtle text-status-success-text\",\n INACTIVE: \"bg-bg-sunken text-text-secondary\",\n REVOKED: \"bg-status-error-bg-subtle text-status-error-text\",\n // TimeCampus applet and marketplace states (BOFF-11005)\n CERTIFIED: \"bg-status-success-bg-subtle text-status-success-text\",\n WITHDRAWN: \"bg-bg-sunken text-text-secondary\",\n SUPERSEDED: \"bg-bg-sunken text-text-secondary\",\n NOT_LISTED: \"bg-bg-sunken text-text-secondary\",\n};\n\n// Webhook Status Colors\nexport const WEBHOOK_STATUS_COLORS: Record<string, string> = {\n ACTIVE: \"bg-status-success-bg-subtle text-status-success-text\",\n PAUSED: \"bg-status-warning-bg-subtle text-status-warning-text\",\n FAILED: \"bg-status-error-bg-subtle text-status-error-text\",\n DISABLED: \"bg-bg-sunken text-text-secondary\",\n};\n\n// Delivery Status Colors\nexport const DELIVERY_STATUS_COLORS: Record<string, string> = {\n PENDING: \"bg-bg-sunken text-text-primary\",\n DELIVERING: \"bg-status-info-bg-subtle text-status-info-text\",\n DELIVERED: \"bg-status-success-bg-subtle text-status-success-text\",\n FAILED: \"bg-status-error-bg-subtle text-status-error-text\",\n RETRYING: \"bg-status-warning-bg-subtle text-status-warning-text\",\n};\n\n// Invitation Status Colors\nexport const INVITATION_STATUS_COLORS: Record<string, string> = {\n PENDING: \"bg-status-warning-bg-subtle text-status-warning-text\",\n ACCEPTED: \"bg-status-success-bg-subtle text-status-success-text\",\n REJECTED: \"bg-status-error-bg-subtle text-status-error-text\",\n EXPIRED: \"bg-bg-sunken text-text-secondary\",\n CANCELLED: \"bg-bg-sunken text-text-secondary\",\n};\n\n// Organization Tier Colors\nexport const ORG_TIER_COLORS: Record<string, string> = {\n FREE: \"bg-bg-sunken text-text-primary\",\n DEVELOPER: \"bg-status-info-bg-subtle text-status-info-text\",\n PROFESSIONAL: \"bg-accent-purple-subtle text-accent-purple\",\n ENTERPRISE: \"bg-status-warning-bg-subtle text-status-warning-text\",\n};\n\n// Partner Tier Colors\nexport const PARTNER_TIER_COLORS: Record<string, string> = {\n REGISTERED: \"bg-bg-sunken text-text-primary\",\n SELECT: \"bg-status-info-bg-subtle text-status-info-text\",\n PREMIER: \"bg-status-warning-bg-subtle text-status-warning-text\",\n};\n\n// App Type Labels\nexport const APP_TYPE_LABELS: Record<string, string> = {\n WEB_APP: \"Web Application\",\n MOBILE_APP: \"Mobile App\",\n DESKTOP_APP: \"Desktop App\",\n CLI_TOOL: \"CLI Tool\",\n API_INTEGRATION: \"API Integration\",\n WORKFLOW: \"Workflow\",\n WIDGET: \"Widget\",\n BOT: \"Bot\",\n SERVICE: \"Service\",\n INTEGRATION: \"Integration\",\n ANALYST: \"Analyst\",\n ASSISTANT: \"Assistant\",\n AUTOMATION: \"Automation\",\n SPECIALIST: \"Specialist\",\n PARSER: \"Parser\",\n DASHBOARD: \"Dashboard Template\",\n};\n\n// OAuth Grant Type Labels\nexport const GRANT_TYPE_LABELS: Record<string, string> = {\n AUTHORIZATION_CODE: \"Authorization Code\",\n REFRESH_TOKEN: \"Refresh Token\",\n CLIENT_CREDENTIALS: \"Client Credentials\",\n IMPLICIT: \"Implicit (Legacy)\",\n PASSWORD: \"Password (Legacy)\",\n};\n\n// API Key Type Labels\nexport const API_KEY_TYPE_LABELS: Record<string, string> = {\n PUBLISHABLE: \"Publishable Key\",\n SECRET: \"Secret Key\",\n RESTRICTED: \"Restricted Key\",\n};\n\n// Organization Role Labels\nexport const ORG_ROLE_LABELS: Record<string, string> = {\n OWNER: \"Owner\",\n ADMIN: \"Admin\",\n DEVELOPER: \"Developer\",\n VIEWER: \"Viewer\",\n};\n\n// Pagination defaults\nexport const DEFAULT_PAGE_SIZE = 10;\nexport const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\n// Date format\nexport const DATE_FORMAT = \"MMM d, yyyy\";\nexport const DATETIME_FORMAT = \"MMM d, yyyy HH:mm\";\n\n// Documentation links\nexport const DOCS_LINKS = {\n GETTING_STARTED:\n \"https://docs.burdenoff.com/developer-portal/getting-started\",\n API_REFERENCE: \"https://docs.burdenoff.com/api-reference\",\n OAUTH2: \"https://docs.burdenoff.com/developer-portal/oauth2\",\n WEBHOOKS: \"https://docs.burdenoff.com/developer-portal/webhooks\",\n SDK_NODE: \"https://docs.burdenoff.com/sdks/nodejs\",\n SDK_PYTHON: \"https://docs.burdenoff.com/sdks/python\",\n BEST_PRACTICES: \"https://docs.burdenoff.com/developer-portal/best-practices\",\n CHANGELOG: \"https://docs.burdenoff.com/changelog\",\n};\n\n// Feature flags (for progressive rollout)\nexport const FEATURE_FLAGS = {\n SHOW_ANALYTICS: true,\n SHOW_REVENUE: true,\n SHOW_STORE_INTEGRATION: true,\n SHOW_AUDIT_LOGS: true,\n ENABLE_DARK_MODE: true,\n};\n\n// Available OAuth/API scopes\nexport const AVAILABLE_SCOPES = [\n // User scopes\n {\n scope: \"user:read\",\n description: \"Read user profile information\",\n category: \"User\",\n },\n {\n scope: \"user:write\",\n description: \"Modify user profile information\",\n category: \"User\",\n },\n {\n scope: \"user:email\",\n description: \"Access user email address\",\n category: \"User\",\n },\n // Workspace scopes\n {\n scope: \"workspace:read\",\n description: \"Read workspace information\",\n category: \"Workspace\",\n },\n {\n scope: \"workspace:write\",\n description: \"Create and modify workspaces\",\n category: \"Workspace\",\n },\n {\n scope: \"workspace:delete\",\n description: \"Delete workspaces\",\n category: \"Workspace\",\n },\n {\n scope: \"workspace:members\",\n description: \"Manage workspace members\",\n category: \"Workspace\",\n },\n // Project scopes\n {\n scope: \"project:read\",\n description: \"Read project information\",\n category: \"Project\",\n },\n {\n scope: \"project:write\",\n description: \"Create and modify projects\",\n category: \"Project\",\n },\n {\n scope: \"project:delete\",\n description: \"Delete projects\",\n category: \"Project\",\n },\n // Task scopes\n { scope: \"task:read\", description: \"Read tasks\", category: \"Task\" },\n {\n scope: \"task:write\",\n description: \"Create and modify tasks\",\n category: \"Task\",\n },\n { scope: \"task:delete\", description: \"Delete tasks\", category: \"Task\" },\n // File scopes\n { scope: \"file:read\", description: \"Read files\", category: \"File\" },\n {\n scope: \"file:write\",\n description: \"Upload and modify files\",\n category: \"File\",\n },\n { scope: \"file:delete\", description: \"Delete files\", category: \"File\" },\n // Offline access\n {\n scope: \"offline_access\",\n description: \"Access data while user is offline\",\n category: \"Access\",\n },\n] as const;\n"],"mappings":";AAUA,IAAaA,IAA4C;CACvD,OAAO;CACP,WAAW;CACX,WAAW;CACX,UAAU;CACV,WAAW;CACX,UAAU;CACV,WAAW;CACX,YAAY;CACZ,QAAQ;CACR,UAAU;CACV,SAAS;CAET,WAAW;CACX,WAAW;CACX,YAAY;CACZ,YAAY;AACd,GAGaC,IAAgD;CAC3D,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,UAAU;AACZ,GAGaC,IAAiD;CAC5D,SAAS;CACT,YAAY;CACZ,WAAW;CACX,QAAQ;CACR,UAAU;AACZ,GAGaC,IAAmD;CAC9D,SAAS;CACT,UAAU;CACV,UAAU;CACV,SAAS;CACT,WAAW;AACb,GAGaC,IAA0C;CACrD,MAAM;CACN,WAAW;CACX,cAAc;CACd,YAAY;AACd,GAGaC,IAA8C;CACzD,YAAY;CACZ,QAAQ;CACR,SAAS;AACX,GAGaC,IAA0C;CACrD,SAAS;CACT,YAAY;CACZ,aAAa;CACb,UAAU;CACV,iBAAiB;CACjB,UAAU;CACV,QAAQ;CACR,KAAK;CACL,SAAS;CACT,aAAa;CACb,SAAS;CACT,WAAW;CACX,YAAY;CACZ,YAAY;CACZ,QAAQ;CACR,WAAW;AACb,GAmBaC,IAA0C;CACrD,OAAO;CACP,OAAO;CACP,WAAW;CACX,QAAQ;AACV"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TimeCampus applets in the developer portal (BOFF-11005).
|
|
3
|
+
*
|
|
4
|
+
* Pure helpers for the TimeCampus applets page: manifest text handling, the
|
|
5
|
+
* starter manifest, version bumps and the rules that decide which developer
|
|
6
|
+
* action is available for an applet. The rules mirror wspace-timecampus-svc
|
|
7
|
+
* (the service is still the authority; these only decide which buttons to
|
|
8
|
+
* offer and what to say when one is not available).
|
|
9
|
+
*/
|
|
10
|
+
/** Public TimeCampus docs: the manifest reference and the extensibility overview. */
|
|
11
|
+
export declare const TIMECAMPUS_MANIFEST_DOCS_URL = "https://docs.timecampus.com/developers/applet-manifest";
|
|
12
|
+
export declare const TIMECAMPUS_APPLETS_DOCS_URL = "https://docs.timecampus.com/extensibility/applets";
|
|
13
|
+
/** The sample widget the TimeCampus app shell serves (copy it as a starting point). */
|
|
14
|
+
export declare const TIMECAMPUS_SAMPLE_WIDGET_URL = "https://app.timecampus.com/applet-samples/time-summary.html";
|
|
15
|
+
export type ManifestParse = {
|
|
16
|
+
ok: true;
|
|
17
|
+
manifest: Record<string, unknown>;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
error: string;
|
|
21
|
+
};
|
|
22
|
+
/** Parse the manifest editor's text into a JSON object. */
|
|
23
|
+
export declare function parseManifestText(text: string): ManifestParse;
|
|
24
|
+
export declare function manifestText(manifest: unknown): string;
|
|
25
|
+
/** Next patch version of MAJOR.MINOR.PATCH (falls back to 1.0.0). */
|
|
26
|
+
export declare function nextPatchVersion(version: string): string;
|
|
27
|
+
/** The manifest for a new version: the given one with the next patch version. */
|
|
28
|
+
export declare function manifestForNextVersion(manifest: unknown): string;
|
|
29
|
+
/** A working starter manifest that points at the TimeCampus sample widget. */
|
|
30
|
+
export declare function starterManifest(): string;
|
|
31
|
+
/** The bits of an applet the page decides on. */
|
|
32
|
+
export interface AppletActionInput {
|
|
33
|
+
status: string;
|
|
34
|
+
latestVersion: {
|
|
35
|
+
id: string;
|
|
36
|
+
version: string;
|
|
37
|
+
status: string;
|
|
38
|
+
};
|
|
39
|
+
liveVersion?: {
|
|
40
|
+
version: string;
|
|
41
|
+
} | null;
|
|
42
|
+
marketplace?: {
|
|
43
|
+
status: string;
|
|
44
|
+
latestSubmission: {
|
|
45
|
+
version: string;
|
|
46
|
+
status: string;
|
|
47
|
+
};
|
|
48
|
+
liveSubmission?: {
|
|
49
|
+
version: string;
|
|
50
|
+
} | null;
|
|
51
|
+
} | null;
|
|
52
|
+
}
|
|
53
|
+
/** What the developer can do with the applet's latest version right now. */
|
|
54
|
+
export type VersionAction = {
|
|
55
|
+
kind: "submit";
|
|
56
|
+
versionId: string;
|
|
57
|
+
} | {
|
|
58
|
+
kind: "withdraw";
|
|
59
|
+
versionId: string;
|
|
60
|
+
} | {
|
|
61
|
+
kind: "none";
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* A draft latest version can be submitted for workspace review; one in
|
|
65
|
+
* review can be withdrawn back to a draft. Rejected, published, superseded
|
|
66
|
+
* and suspended versions take no action here: add a new version instead.
|
|
67
|
+
*/
|
|
68
|
+
export declare function versionAction(applet: AppletActionInput): VersionAction;
|
|
69
|
+
/** Whether a new version can be added (only when no draft or review is open). */
|
|
70
|
+
export declare function canAddVersion(applet: AppletActionInput): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Whether the latest version's manifest can be replaced in place. The
|
|
73
|
+
* service accepts edits to a DRAFT or REJECTED version (a rejected one
|
|
74
|
+
* returns to DRAFT); versions in review, live or retired are immutable.
|
|
75
|
+
*/
|
|
76
|
+
export declare function canEditVersion(applet: AppletActionInput): boolean;
|
|
77
|
+
/** Compare two MAJOR.MINOR.PATCH versions (non-numeric parts count as 0). */
|
|
78
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
79
|
+
export type MarketplaceOffer = {
|
|
80
|
+
canOffer: true;
|
|
81
|
+
version: string;
|
|
82
|
+
} | {
|
|
83
|
+
canOffer: false;
|
|
84
|
+
reason: string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Whether the developer can offer the applet's live workspace version to the
|
|
88
|
+
* public marketplace now, and why not otherwise. Mirrors the service rules:
|
|
89
|
+
* only a workspace-published version, one submission in certification at a
|
|
90
|
+
* time, and only a version higher than every certified one.
|
|
91
|
+
*/
|
|
92
|
+
export declare function marketplaceOffer(applet: AppletActionInput): MarketplaceOffer;
|
|
93
|
+
/** Whether the latest marketplace submission is still in certification (and can be withdrawn). */
|
|
94
|
+
export declare function canWithdrawFromMarketplace(applet: AppletActionInput): boolean;
|
|
95
|
+
/** A readable date for an ISO timestamp, or the raw value when it cannot be parsed. */
|
|
96
|
+
export declare function formatDate(iso: string): string;
|
|
97
|
+
/** A short, user-facing message for a failed request. */
|
|
98
|
+
export declare function errorText(err: unknown): string;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// src/devportal/utils/timecampusApplets.ts
|
|
2
|
+
var e = "https://docs.timecampus.com/developers/applet-manifest", t = "https://docs.timecampus.com/extensibility/applets", n = "https://app.timecampus.com/applet-samples/time-summary.html";
|
|
3
|
+
function r(e) {
|
|
4
|
+
if (!e.trim()) return {
|
|
5
|
+
ok: !1,
|
|
6
|
+
error: "Paste or write a manifest."
|
|
7
|
+
};
|
|
8
|
+
let t;
|
|
9
|
+
try {
|
|
10
|
+
t = JSON.parse(e);
|
|
11
|
+
} catch (e) {
|
|
12
|
+
return {
|
|
13
|
+
ok: !1,
|
|
14
|
+
error: `Not valid JSON: ${e instanceof Error ? e.message : "parse error"}`
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return typeof t != "object" || !t || Array.isArray(t) ? {
|
|
18
|
+
ok: !1,
|
|
19
|
+
error: "The manifest must be a JSON object."
|
|
20
|
+
} : {
|
|
21
|
+
ok: !0,
|
|
22
|
+
manifest: t
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function i(e) {
|
|
26
|
+
return JSON.stringify(e, null, 2);
|
|
27
|
+
}
|
|
28
|
+
function a(e) {
|
|
29
|
+
let t = /^(\d+)\.(\d+)\.(\d+)$/.exec(e);
|
|
30
|
+
return t ? `${t[1]}.${t[2]}.${Number(t[3]) + 1}` : "1.0.0";
|
|
31
|
+
}
|
|
32
|
+
function o(e) {
|
|
33
|
+
if (typeof e != "object" || !e) return i(e);
|
|
34
|
+
let t = e, n = typeof t.version == "string" ? t.version : "";
|
|
35
|
+
return i({
|
|
36
|
+
...t,
|
|
37
|
+
version: a(n)
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function s() {
|
|
41
|
+
return i({
|
|
42
|
+
manifestVersion: 1,
|
|
43
|
+
key: "my-first-applet",
|
|
44
|
+
name: "My first applet",
|
|
45
|
+
version: "1.0.0",
|
|
46
|
+
description: "Shows your tracked time today in a sandboxed widget.",
|
|
47
|
+
icon: "Puzzle",
|
|
48
|
+
category: "ANALYTICS",
|
|
49
|
+
entryPoint: "https://app.timecampus.com/applet-samples/",
|
|
50
|
+
permissions: ["time-summary:read"],
|
|
51
|
+
widgets: [{
|
|
52
|
+
key: "today",
|
|
53
|
+
name: "Tracked today",
|
|
54
|
+
description: "Your tracked time today and this week",
|
|
55
|
+
path: "/applet-samples/time-summary.html",
|
|
56
|
+
height: 220
|
|
57
|
+
}],
|
|
58
|
+
developer: { name: "Your team" }
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function c(e) {
|
|
62
|
+
let t = e.latestVersion;
|
|
63
|
+
return t.status === "DRAFT" ? {
|
|
64
|
+
kind: "submit",
|
|
65
|
+
versionId: t.id
|
|
66
|
+
} : t.status === "IN_REVIEW" ? {
|
|
67
|
+
kind: "withdraw",
|
|
68
|
+
versionId: t.id
|
|
69
|
+
} : { kind: "none" };
|
|
70
|
+
}
|
|
71
|
+
function l(e) {
|
|
72
|
+
let t = e.latestVersion.status;
|
|
73
|
+
return t !== "DRAFT" && t !== "IN_REVIEW";
|
|
74
|
+
}
|
|
75
|
+
function u(e) {
|
|
76
|
+
let t = e.latestVersion.status;
|
|
77
|
+
return t === "DRAFT" || t === "REJECTED";
|
|
78
|
+
}
|
|
79
|
+
function d(e, t) {
|
|
80
|
+
let n = e.split(".").map((e) => Number(e) || 0), r = t.split(".").map((e) => Number(e) || 0);
|
|
81
|
+
for (let e = 0; e < 3; e += 1) {
|
|
82
|
+
let t = (n[e] ?? 0) - (r[e] ?? 0);
|
|
83
|
+
if (t !== 0) return t;
|
|
84
|
+
}
|
|
85
|
+
return 0;
|
|
86
|
+
}
|
|
87
|
+
var f = /* @__PURE__ */ new Set(["CERTIFIED", "SUPERSEDED"]);
|
|
88
|
+
function p(e) {
|
|
89
|
+
if (!e) return null;
|
|
90
|
+
let t = [];
|
|
91
|
+
return e.liveSubmission && t.push(e.liveSubmission.version), f.has(e.latestSubmission.status) && t.push(e.latestSubmission.version), t.reduce((e, t) => e === null || d(t, e) > 0 ? t : e, null);
|
|
92
|
+
}
|
|
93
|
+
function m(e) {
|
|
94
|
+
let t = e.liveVersion;
|
|
95
|
+
if (e.status !== "PUBLISHED" || !t) return {
|
|
96
|
+
canOffer: !1,
|
|
97
|
+
reason: "Publish a version in your workspace first."
|
|
98
|
+
};
|
|
99
|
+
let n = e.marketplace;
|
|
100
|
+
if (n?.latestSubmission.status === "IN_REVIEW") return {
|
|
101
|
+
canOffer: !1,
|
|
102
|
+
reason: `v${n.latestSubmission.version} is waiting for platform certification.`
|
|
103
|
+
};
|
|
104
|
+
let r = p(n);
|
|
105
|
+
return r !== null && d(t.version, r) <= 0 ? {
|
|
106
|
+
canOffer: !1,
|
|
107
|
+
reason: `v${r} is already certified. Publish a newer version to offer it.`
|
|
108
|
+
} : {
|
|
109
|
+
canOffer: !0,
|
|
110
|
+
version: t.version
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function h(e) {
|
|
114
|
+
return e.marketplace?.latestSubmission.status === "IN_REVIEW";
|
|
115
|
+
}
|
|
116
|
+
function g(e) {
|
|
117
|
+
let t = new Date(e);
|
|
118
|
+
return Number.isNaN(t.getTime()) ? e : t.toLocaleDateString(void 0, {
|
|
119
|
+
year: "numeric",
|
|
120
|
+
month: "short",
|
|
121
|
+
day: "numeric"
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function _(e) {
|
|
125
|
+
let t = e instanceof Error ? e.message : "";
|
|
126
|
+
return /forbidden|permission|not authori[sz]ed/i.test(t) ? "You do not have permission to do that in this workspace." : t || "Something went wrong";
|
|
127
|
+
}
|
|
128
|
+
export { t as TIMECAMPUS_APPLETS_DOCS_URL, e as TIMECAMPUS_MANIFEST_DOCS_URL, n as TIMECAMPUS_SAMPLE_WIDGET_URL, l as canAddVersion, u as canEditVersion, h as canWithdrawFromMarketplace, d as compareVersions, _ as errorText, g as formatDate, o as manifestForNextVersion, i as manifestText, m as marketplaceOffer, a as nextPatchVersion, r as parseManifestText, s as starterManifest, c as versionAction };
|
|
129
|
+
|
|
130
|
+
//# sourceMappingURL=timecampusApplets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timecampusApplets.js","names":["TIMECAMPUS_MANIFEST_DOCS_URL","TIMECAMPUS_APPLETS_DOCS_URL","TIMECAMPUS_SAMPLE_WIDGET_URL","parseManifestText","text","value","err","manifestText","manifest","nextPatchVersion","match","version","manifestForNextVersion","current","starterManifest","versionAction","latest","applet","canAddVersion","status","canEditVersion","compareVersions","left","a","part","right","b","i","diff","CERTIFIED_STATUSES","highestCertifiedVersion","listing","versions","top","marketplaceOffer","live","certified","canWithdrawFromMarketplace","formatDate","date","iso","errorText","message"],"sources":["../../../src/devportal/utils/timecampusApplets.ts"],"sourcesContent":["/**\n * TimeCampus applets in the developer portal (BOFF-11005).\n *\n * Pure helpers for the TimeCampus applets page: manifest text handling, the\n * starter manifest, version bumps and the rules that decide which developer\n * action is available for an applet. The rules mirror wspace-timecampus-svc\n * (the service is still the authority; these only decide which buttons to\n * offer and what to say when one is not available).\n */\n\n/** Public TimeCampus docs: the manifest reference and the extensibility overview. */\nexport const TIMECAMPUS_MANIFEST_DOCS_URL =\n \"https://docs.timecampus.com/developers/applet-manifest\";\nexport const TIMECAMPUS_APPLETS_DOCS_URL =\n \"https://docs.timecampus.com/extensibility/applets\";\n/** The sample widget the TimeCampus app shell serves (copy it as a starting point). */\nexport const TIMECAMPUS_SAMPLE_WIDGET_URL =\n \"https://app.timecampus.com/applet-samples/time-summary.html\";\nconst SAMPLE_ENTRY_POINT = \"https://app.timecampus.com/applet-samples/\";\n\nexport type ManifestParse =\n | { ok: true; manifest: Record<string, unknown> }\n | { ok: false; error: string };\n\n/** Parse the manifest editor's text into a JSON object. */\nexport function parseManifestText(text: string): ManifestParse {\n if (!text.trim()) return { ok: false, error: \"Paste or write a manifest.\" };\n let value: unknown;\n try {\n value = JSON.parse(text);\n } catch (err) {\n return {\n ok: false,\n error: `Not valid JSON: ${err instanceof Error ? err.message : \"parse error\"}`,\n };\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return { ok: false, error: \"The manifest must be a JSON object.\" };\n }\n return { ok: true, manifest: value as Record<string, unknown> };\n}\n\nexport function manifestText(manifest: unknown): string {\n return JSON.stringify(manifest, null, 2);\n}\n\n/** Next patch version of MAJOR.MINOR.PATCH (falls back to 1.0.0). */\nexport function nextPatchVersion(version: string): string {\n const match = /^(\\d+)\\.(\\d+)\\.(\\d+)$/.exec(version);\n if (!match) return \"1.0.0\";\n return `${match[1]}.${match[2]}.${Number(match[3]) + 1}`;\n}\n\n/** The manifest for a new version: the given one with the next patch version. */\nexport function manifestForNextVersion(manifest: unknown): string {\n if (typeof manifest !== \"object\" || manifest === null) {\n return manifestText(manifest);\n }\n const current = manifest as Record<string, unknown>;\n const version = typeof current.version === \"string\" ? current.version : \"\";\n return manifestText({ ...current, version: nextPatchVersion(version) });\n}\n\n/** A working starter manifest that points at the TimeCampus sample widget. */\nexport function starterManifest(): string {\n return manifestText({\n manifestVersion: 1,\n key: \"my-first-applet\",\n name: \"My first applet\",\n version: \"1.0.0\",\n description: \"Shows your tracked time today in a sandboxed widget.\",\n icon: \"Puzzle\",\n category: \"ANALYTICS\",\n entryPoint: SAMPLE_ENTRY_POINT,\n permissions: [\"time-summary:read\"],\n widgets: [\n {\n key: \"today\",\n name: \"Tracked today\",\n description: \"Your tracked time today and this week\",\n path: \"/applet-samples/time-summary.html\",\n height: 220,\n },\n ],\n developer: { name: \"Your team\" },\n });\n}\n\n/** The bits of an applet the page decides on. */\nexport interface AppletActionInput {\n status: string;\n latestVersion: { id: string; version: string; status: string };\n liveVersion?: { version: string } | null;\n marketplace?: {\n status: string;\n latestSubmission: { version: string; status: string };\n liveSubmission?: { version: string } | null;\n } | null;\n}\n\n/** What the developer can do with the applet's latest version right now. */\nexport type VersionAction =\n | { kind: \"submit\"; versionId: string }\n | { kind: \"withdraw\"; versionId: string }\n | { kind: \"none\" };\n\n/**\n * A draft latest version can be submitted for workspace review; one in\n * review can be withdrawn back to a draft. Rejected, published, superseded\n * and suspended versions take no action here: add a new version instead.\n */\nexport function versionAction(applet: AppletActionInput): VersionAction {\n const latest = applet.latestVersion;\n if (latest.status === \"DRAFT\") {\n return { kind: \"submit\", versionId: latest.id };\n }\n if (latest.status === \"IN_REVIEW\") {\n return { kind: \"withdraw\", versionId: latest.id };\n }\n return { kind: \"none\" };\n}\n\n/** Whether a new version can be added (only when no draft or review is open). */\nexport function canAddVersion(applet: AppletActionInput): boolean {\n const status = applet.latestVersion.status;\n return status !== \"DRAFT\" && status !== \"IN_REVIEW\";\n}\n\n/**\n * Whether the latest version's manifest can be replaced in place. The\n * service accepts edits to a DRAFT or REJECTED version (a rejected one\n * returns to DRAFT); versions in review, live or retired are immutable.\n */\nexport function canEditVersion(applet: AppletActionInput): boolean {\n const status = applet.latestVersion.status;\n return status === \"DRAFT\" || status === \"REJECTED\";\n}\n\n/** Compare two MAJOR.MINOR.PATCH versions (non-numeric parts count as 0). */\nexport function compareVersions(a: string, b: string): number {\n const left = a.split(\".\").map((part) => Number(part) || 0);\n const right = b.split(\".\").map((part) => Number(part) || 0);\n for (let i = 0; i < 3; i += 1) {\n const diff = (left[i] ?? 0) - (right[i] ?? 0);\n if (diff !== 0) return diff;\n }\n return 0;\n}\n\nconst CERTIFIED_STATUSES = new Set([\"CERTIFIED\", \"SUPERSEDED\"]);\n\n/** The highest certified version the page can see (the live and latest submissions). */\nfunction highestCertifiedVersion(\n listing: AppletActionInput[\"marketplace\"],\n): string | null {\n if (!listing) return null;\n const versions: string[] = [];\n if (listing.liveSubmission) versions.push(listing.liveSubmission.version);\n if (CERTIFIED_STATUSES.has(listing.latestSubmission.status)) {\n versions.push(listing.latestSubmission.version);\n }\n return versions.reduce<string | null>(\n (top, version) =>\n top === null || compareVersions(version, top) > 0 ? version : top,\n null,\n );\n}\n\nexport type MarketplaceOffer =\n { canOffer: true; version: string } | { canOffer: false; reason: string };\n\n/**\n * Whether the developer can offer the applet's live workspace version to the\n * public marketplace now, and why not otherwise. Mirrors the service rules:\n * only a workspace-published version, one submission in certification at a\n * time, and only a version higher than every certified one.\n */\nexport function marketplaceOffer(applet: AppletActionInput): MarketplaceOffer {\n const live = applet.liveVersion;\n if (applet.status !== \"PUBLISHED\" || !live) {\n return {\n canOffer: false,\n reason: \"Publish a version in your workspace first.\",\n };\n }\n const listing = applet.marketplace;\n if (listing?.latestSubmission.status === \"IN_REVIEW\") {\n return {\n canOffer: false,\n reason: `v${listing.latestSubmission.version} is waiting for platform certification.`,\n };\n }\n const certified = highestCertifiedVersion(listing);\n if (certified !== null && compareVersions(live.version, certified) <= 0) {\n return {\n canOffer: false,\n reason: `v${certified} is already certified. Publish a newer version to offer it.`,\n };\n }\n return { canOffer: true, version: live.version };\n}\n\n/** Whether the latest marketplace submission is still in certification (and can be withdrawn). */\nexport function canWithdrawFromMarketplace(applet: AppletActionInput): boolean {\n return applet.marketplace?.latestSubmission.status === \"IN_REVIEW\";\n}\n\n/** A readable date for an ISO timestamp, or the raw value when it cannot be parsed. */\nexport function formatDate(iso: string): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return iso;\n return date.toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\n/** A short, user-facing message for a failed request. */\nexport function errorText(err: unknown): string {\n const message = err instanceof Error ? err.message : \"\";\n if (/forbidden|permission|not authori[sz]ed/i.test(message)) {\n return \"You do not have permission to do that in this workspace.\";\n }\n return message || \"Something went wrong\";\n}\n"],"mappings":"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"}
|
|
@@ -69,7 +69,10 @@ export type CreateApplicationInput = {
|
|
|
69
69
|
appId?: string | number | null | undefined;
|
|
70
70
|
appType: AppType;
|
|
71
71
|
category?: string | null | undefined;
|
|
72
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Which products this item is compatible with (e.g. "fluidgrids", "workspaces").
|
|
74
|
+
* Stored in manifest.compatibility.products and extracted to the store on publish.
|
|
75
|
+
*/
|
|
73
76
|
compatibleProducts?: Array<string> | null | undefined;
|
|
74
77
|
description?: string | null | undefined;
|
|
75
78
|
developerOrganizationId?: string | number | null | undefined;
|
|
@@ -97,9 +100,20 @@ export type CreateApplicationVersionInput = {
|
|
|
97
100
|
manifest?: Record<string, unknown> | null | undefined;
|
|
98
101
|
maxPlatformVersion?: string | null | undefined;
|
|
99
102
|
minPlatformVersion?: string | null | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* wspace-files-svc File id of the uploaded package, captured with packageUrl
|
|
105
|
+
* at upload time. Lets the service fetch fresh download URLs from the
|
|
106
|
+
* canonical file owner instead of re-signing S3 URLs itself (BOFF-5311).
|
|
107
|
+
*/
|
|
108
|
+
packageFileId?: string | null | undefined;
|
|
100
109
|
packageHash?: string | null | undefined;
|
|
101
110
|
packageSize?: string | null | undefined;
|
|
102
111
|
packageUrl?: string | null | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* Workspace that owns the files-svc File referenced by packageFileId.
|
|
114
|
+
* Required together with packageFileId for the files-svc download-URL path.
|
|
115
|
+
*/
|
|
116
|
+
packageWorkspaceId?: string | null | undefined;
|
|
103
117
|
releaseNotes?: string | null | undefined;
|
|
104
118
|
requiredScopes?: Array<string> | null | undefined;
|
|
105
119
|
version: string;
|
|
@@ -133,7 +147,12 @@ export type CreateDeveloperOrganizationInput = {
|
|
|
133
147
|
logoUrl?: string | null | undefined;
|
|
134
148
|
metadata?: Record<string, unknown> | null | undefined;
|
|
135
149
|
name: string;
|
|
136
|
-
/**
|
|
150
|
+
/**
|
|
151
|
+
* Optional at creation — dedicated pickup pincode for carrier rate quoting
|
|
152
|
+
* on physical-goods orders (Shiprocket, etc). Only meaningful for
|
|
153
|
+
* createSellerOrganization (PHYSICAL orgs); ignored for DIGITAL orgs. Can
|
|
154
|
+
* always be added or changed later from organization settings.
|
|
155
|
+
*/
|
|
137
156
|
pickupPostalCode?: string | null | undefined;
|
|
138
157
|
slug?: string | null | undefined;
|
|
139
158
|
supportEmail?: string | null | undefined;
|
|
@@ -161,7 +180,11 @@ export type CreateWebhookInput = {
|
|
|
161
180
|
export type DelegationStatus = 'ACTIVE' | 'EXPIRED' | 'REVOKED';
|
|
162
181
|
export type DevPortalPaymentMethodType = 'BANK_ACCOUNT' | 'CHECK' | 'PAYPAL' | 'STRIPE_CONNECT' | 'WIRE';
|
|
163
182
|
export type DevPortalPricingModel = 'ENTERPRISE' | 'FREE' | 'FREEMIUM' | 'ONE_TIME' | 'SUBSCRIPTION' | 'USAGE_BASED';
|
|
164
|
-
/**
|
|
183
|
+
/**
|
|
184
|
+
* DIGITAL orgs publish Applications to the store; PHYSICAL orgs list physical
|
|
185
|
+
* goods via the seller portal. Not user-selectable — fixed at creation by which
|
|
186
|
+
* flow provisioned the org. See BOFF-7285.
|
|
187
|
+
*/
|
|
165
188
|
export type DeveloperOrgKind = 'DIGITAL' | 'PHYSICAL';
|
|
166
189
|
export type DeveloperOrgRole = 'ADMIN' | 'DEVELOPER' | 'OWNER' | 'VIEWER';
|
|
167
190
|
export type DeveloperOrgTier = 'DEVELOPER' | 'ENTERPRISE' | 'FREE' | 'PROFESSIONAL';
|
|
@@ -247,7 +270,10 @@ export type UpdateApplicationInput = {
|
|
|
247
270
|
appType?: AppType | null | undefined;
|
|
248
271
|
bannerUrl?: string | null | undefined;
|
|
249
272
|
category?: string | null | undefined;
|
|
250
|
-
/**
|
|
273
|
+
/**
|
|
274
|
+
* Which products this item is compatible with (e.g. "fluidgrids", "workspaces").
|
|
275
|
+
* Stored in manifest.compatibility.products and extracted to the store on publish.
|
|
276
|
+
*/
|
|
251
277
|
compatibleProducts?: Array<string> | null | undefined;
|
|
252
278
|
config?: Record<string, unknown> | null | undefined;
|
|
253
279
|
description?: string | null | undefined;
|
|
@@ -281,12 +307,22 @@ export type UpdateApplicationVersionInput = {
|
|
|
281
307
|
manifest?: Record<string, unknown> | null | undefined;
|
|
282
308
|
maxPlatformVersion?: string | null | undefined;
|
|
283
309
|
minPlatformVersion?: string | null | undefined;
|
|
310
|
+
/**
|
|
311
|
+
* Immutable once status is pending_review or published.
|
|
312
|
+
* Must match the packageUrl being replaced (same upload).
|
|
313
|
+
*/
|
|
314
|
+
packageFileId?: string | null | undefined;
|
|
284
315
|
/** Immutable once status is pending_review or published. */
|
|
285
316
|
packageHash?: string | null | undefined;
|
|
286
317
|
/** Immutable once status is pending_review or published. */
|
|
287
318
|
packageSize?: string | null | undefined;
|
|
288
319
|
/** Immutable once status is pending_review or published. */
|
|
289
320
|
packageUrl?: string | null | undefined;
|
|
321
|
+
/**
|
|
322
|
+
* Immutable once status is pending_review or published.
|
|
323
|
+
* Must match the packageUrl being replaced (same upload).
|
|
324
|
+
*/
|
|
325
|
+
packageWorkspaceId?: string | null | undefined;
|
|
290
326
|
releaseNotes?: string | null | undefined;
|
|
291
327
|
/** Immutable once status is pending_review or published. */
|
|
292
328
|
requiredScopes?: Array<string> | null | undefined;
|
|
@@ -298,7 +334,12 @@ export type UpdateDeveloperOrganizationInput = {
|
|
|
298
334
|
logoUrl?: string | null | undefined;
|
|
299
335
|
metadata?: Record<string, unknown> | null | undefined;
|
|
300
336
|
name?: string | null | undefined;
|
|
301
|
-
/**
|
|
337
|
+
/**
|
|
338
|
+
* Dedicated pickup pincode for carrier rate quoting on physical-goods orders
|
|
339
|
+
* (Shiprocket, etc) — separate from the org's billing address, since a
|
|
340
|
+
* seller's fulfillment/warehouse location isn't necessarily the same place
|
|
341
|
+
* as their billing address.
|
|
342
|
+
*/
|
|
302
343
|
pickupPostalCode?: string | null | undefined;
|
|
303
344
|
settings?: Record<string, unknown> | null | undefined;
|
|
304
345
|
supportEmail?: string | null | undefined;
|