@forge/lint

6.0.0-next.116.0.0-next.12
~

Modified (7 files)

Index: package/out/lint/lint.js
===================================================================
--- package/out/lint/lint.js
+++ package/out/lint/lint.js
@@ -20,8 +20,9 @@
 const frame_component_linter_1 = require("./linters/frame-component-linter/frame-component-linter");
 const deprecated_egress_permissions_manifest_linter_1 = require("./linters/manifest-linter/deprecated-egress-permissions-manifest-linter");
 const llm_module_linter_1 = require("./linters/llm-module-linter/llm-module-linter");
 const deprecated_api_module_linter_1 = require("./linters/deprecated-api-module-linter/deprecated-api-module-linter");
+const app_managed_permissions_sdk_linter_1 = require("./linters/app-managed-permissions-sdk-linter/app-managed-permissions-sdk-linter");
 const function_timeout_linter_1 = require("./linters/function-timeout-linter/function-timeout-linter");
 const reportLintResults = (logger, lintResults, showSummary = true) => {
     let numErrors = 0, numWarnings = 0;
     let noProblemsFound = true;
@@ -96,8 +97,9 @@
     new frame_component_linter_1.FrameComponentLinter(environment, manifest, logger),
     new llm_module_linter_1.LlmModuleLinter(environment, manifest, logger),
     new deprecated_api_module_linter_1.DeprecatedApiModuleLinter(environment, manifest, logger),
     new deprecated_egress_permissions_manifest_linter_1.DeprecatedEgressPermissionsManifestLinter(logger, statsigService),
+    new app_managed_permissions_sdk_linter_1.AppManagedPermissionsSdkLinter(manifest, logger),
     new function_timeout_linter_1.FunctionTimeoutLinter(manifest, logger)
 ]) => {
     const { include, exclude } = await (0, cli_shared_1.listTSConfigIncludeExclude)(new cli_shared_1.FileSystemReader());
     const tsInclude = new Set(include);
Index: package/out/lint/text/messages.js
===================================================================
--- package/out/lint/text/messages.js
+++ package/out/lint/text/messages.js
@@ -74,8 +74,12 @@
         deprecatedApiStorage: {
             message: () => `The \"storage\" export from \"@forge/api\" is deprecated. Use the \"@forge/kvs\" package instead.`,
             reference: 'deprecated-api-storage'
         },
+        appManagedPermissionsSdk: {
+            message: () => 'App-managed permissions enforcement is set in the manifest. Source files include API usage that requires OAuth scopes (such as requestJira or external fetch), without checks for when those scopes are missing. Use the Permissions SDK (@forge/api, @forge/bridge, or @forge/react), displayConditions.permissions, or a trigger filter that references event.permissions.',
+            reference: 'https://go.atlassian.com/forge-permissions-sdk'
+        },
         functionTimeout: {
             shared: {
                 message: (functionKey, conflictingModuleKey, conflictingModuleType) => `Function "${functionKey}" is used by a consumer and ${conflictingModuleType} "${conflictingModuleKey}". Consumer functions must not be shared with other modules. Use a separate function for each module type.`,
                 reference: 'https://developer.atlassian.com/platform/forge/use-a-long-running-function/'
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@forge/lint",
-  "version": "6.0.0-next.11",
+  "version": "6.0.0-next.12",
   "description": "Linting for forge apps",
   "main": "out/index.js",
   "license": "SEE LICENSE IN LICENSE.txt",
   "scripts": {
Index: package/out/lint/lint.d.ts.map
===================================================================
--- package/out/lint/lint.d.ts.map
+++ package/out/lint/lint.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAiBxG,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,GAAI,QAAQ,UAAU,EAAE,aAAa,UAAU,EAAE,EAAE,qBAAkB,KAAG,IA+CrG,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,aAAa,UAAU,EAAE,KAAG,YAQxD,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,QAAQ,OAAO,QAAQ,EACvB,kBAAiB,OAAO,EAAE,CAAC,QAAQ,CAAC,aAAsC,KACzE,OAAO,CAAC,SAAS,CAOnB,CAAC;AAEF,eAAO,MAAM,IAAI,GACf,aAAa,MAAM,EAAE,EACrB,UAAU,QAAQ,EAClB,aAAa,MAAM,EACnB,QAAQ,UAAU,EAClB,gBAAgB,cAAc,EAC9B,2BAlBU,MAAM,UACR,OAAO,QAAQ,oBACN,OAAO,EAAE,CAAC,QAAQ,CAAC,aAAa,KAChD,OAAO,CAAC,SAAS,CAea,EAC/B,UAAS,eAAe,EAevB,KACA,OAAO,CAAC,UAAU,EAAE,CAyCtB,CAAC;AAwBF,eAAO,MAAM,QAAQ,GACnB,QAAQ,UAAU,EAClB,gBAAgB,cAAc,EAC9B,SAAQ,eAAiE,KACxE,OAAO,CAAC,UAAU,EAAE,CAGtB,CAAC"}
\ No newline at end of file
+{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/lint/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAkBxG,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,iBAAiB,GAAI,QAAQ,UAAU,EAAE,aAAa,UAAU,EAAE,EAAE,qBAAkB,KAAG,IA+CrG,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,aAAa,UAAU,EAAE,KAAG,YAQxD,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,QAAQ,OAAO,QAAQ,EACvB,kBAAiB,OAAO,EAAE,CAAC,QAAQ,CAAC,aAAsC,KACzE,OAAO,CAAC,SAAS,CAOnB,CAAC;AAEF,eAAO,MAAM,IAAI,GACf,aAAa,MAAM,EAAE,EACrB,UAAU,QAAQ,EAClB,aAAa,MAAM,EACnB,QAAQ,UAAU,EAClB,gBAAgB,cAAc,EAC9B,2BAlBU,MAAM,UACR,OAAO,QAAQ,oBACN,OAAO,EAAE,CAAC,QAAQ,CAAC,aAAa,KAChD,OAAO,CAAC,SAAS,CAea,EAC/B,UAAS,eAAe,EAgBvB,KACA,OAAO,CAAC,UAAU,EAAE,CAyCtB,CAAC;AAwBF,eAAO,MAAM,QAAQ,GACnB,QAAQ,UAAU,EAClB,gBAAgB,cAAc,EAC9B,SAAQ,eAAiE,KACxE,OAAO,CAAC,UAAU,EAAE,CAGtB,CAAC"}
\ No newline at end of file
Index: package/out/lint/text/messages.d.ts.map
===================================================================
--- package/out/lint/text/messages.d.ts.map
+++ package/out/lint/text/messages.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/lint/text/messages.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;2BAGA,MAAM;2BAEN,MAAM,KAAG,MAAM;;;;2BAKf,MAAM;2BAER,MAAM;;;;2BAKJ,MAAM;2BAEN,MAAM,KAAG,MAAM;;;;iCAKT,MAAM;;;;iCAKN,MAAM;;;;8BAKT,MAAM,OAAO,MAAM;;;;+BAKlB,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,SAAS,SAAS,MAAM;;;;6BAKjE,MAAM;;;;+BAIJ,MAAM,QAAQ,MAAM,SAAS,MAAM;;;;8BAKpC,MAAM;;;;8BAIN,MAAM;;;;8BAIN,MAAM;;;;;;;;;oCASF,MAAM;;;;;6BAOX,MAAM,WAAW,MAAM;;;;;;;;;uCAWf,MAAM,wBAAwB,MAAM,yBAAyB,MAAM;;;;uCAKnE,MAAM,kBAAkB,MAAM,aAAa,MAAM,cAAc,MAAM;;;;;CAMnG,CAAC"}
\ No newline at end of file
+{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/lint/text/messages.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ;;;2BAGA,MAAM;2BAEN,MAAM,KAAG,MAAM;;;;2BAKf,MAAM;2BAER,MAAM;;;;2BAKJ,MAAM;2BAEN,MAAM,KAAG,MAAM;;;;iCAKT,MAAM;;;;iCAKN,MAAM;;;;8BAKT,MAAM,OAAO,MAAM;;;;+BAKlB,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,SAAS,SAAS,MAAM;;;;6BAKjE,MAAM;;;;+BAIJ,MAAM,QAAQ,MAAM,SAAS,MAAM;;;;8BAKpC,MAAM;;;;8BAIN,MAAM;;;;8BAIN,MAAM;;;;;;;;;oCASF,MAAM;;;;;6BAOX,MAAM,WAAW,MAAM;;;;;;;;;;;;;uCAgBf,MAAM,wBAAwB,MAAM,yBAAyB,MAAM;;;;uCAKnE,MAAM,kBAAkB,MAAM,aAAa,MAAM,cAAc,MAAM;;;;;CAMnG,CAAC"}
\ No newline at end of file
File too large for inline diff
Index: package/out/lint/text/messages.d.ts
===================================================================
--- package/out/lint/text/messages.d.ts
+++ package/out/lint/text/messages.d.ts
@@ -68,8 +68,12 @@
         deprecatedApiStorage: {
             message: () => string;
             reference: string;
         };
+        appManagedPermissionsSdk: {
+            message: () => string;
+            reference: string;
+        };
         functionTimeout: {
             shared: {
                 message: (functionKey: string, conflictingModuleKey: string, conflictingModuleType: string) => string;
                 reference: string;