npm package diff

Package: @forge/resolver

Versions: 1.6.17-next.0 - 1.7.0-next.1

Added: package/out/shared/index.js

Added: package/out/shared/index.d.ts.map

Added: package/out/shared/index.d.ts

Modified: package/out/index.js

Index: package/out/index.js
===================================================================
--- package/out/index.js
+++ package/out/index.js
@@ -1,35 +1,11 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-const api_1 = require("@forge/api");
-const isRequestPayload = (request) => {
-    return typeof request.payload === 'object' && request.payload.product && request.payload.fetchUrl;
-};
-const defaultFunctions = {
-    __request: async (request) => {
-        if (!isRequestPayload(request)) {
-            throw new Error('Invalid payload specified for request');
-        }
-        const { payload } = request;
-        const productApis = {
-            jira: (0, api_1.asUser)().requestJira,
-            confluence: (0, api_1.asUser)().requestConfluence
-        };
-        const response = await productApis[payload.product]((0, api_1.assumeTrustedRoute)(payload.fetchUrl), payload.fetchOptions);
-        let body = await response.text();
-        try {
-            body = JSON.parse(body);
-        }
-        catch (e) { }
-        return { ...response, body };
-    }
-};
+exports.makeResolver = void 0;
 class Resolver {
     functions;
     constructor() {
-        this.functions = {
-            ...defaultFunctions
-        };
+        this.functions = {};
     }
     define(functionKey, cb) {
         if (!cb || typeof cb !== 'function') {
             throw new Error(`Resolver definition '${functionKey}' callback must be a 'function'. Received '${typeof cb}'.`);
@@ -49,12 +25,12 @@
     sanitizeObject(object) {
         return JSON.parse(JSON.stringify(object));
     }
     getDefinitions() {
-        const resolve = async ({ call: { functionKey, payload: callPayload, jobId }, context }, backendRuntimePayload) => {
+        return async ({ call: { functionKey, payload, jobId }, context }, backendRuntimePayload) => {
             const cb = this.getFunction(functionKey);
             const result = await cb({
-                payload: callPayload || {},
+                payload: payload || {},
                 context: {
                     ...context,
                     installContext: backendRuntimePayload?.installContext,
                     accountId: backendRuntimePayload?.principal?.accountId,
@@ -67,8 +43,15 @@
                 return this.sanitizeObject(result);
             }
             return result;
         };
-        return resolve;
     }
 }
 exports.default = Resolver;
+function makeResolver(handlers) {
+    const resolver = new Resolver();
+    for (const key of Object.keys(handlers)) {
+        resolver.define(key, handlers[key]);
+    }
+    return resolver.getDefinitions();
+}
+exports.makeResolver = makeResolver;

Modified: package/package.json

Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,20 +1,23 @@
 {
   "name": "@forge/resolver",
-  "version": "1.6.17-next.0",
+  "version": "1.7.0-next.1",
   "description": "Forge function resolver",
   "author": "Atlassian",
   "license": "SEE LICENSE IN LICENSE.txt",
   "main": "out/index.js",
   "types": "out/index.d.ts",
+  "exports": {
+    "./shared": {
+      "types": "./out/shared/index.d.ts",
+      "default": "./out/shared/index.js"
+    }
+  },
   "scripts": {
     "build": "yarn run clean && yarn run compile",
     "clean": "rm -rf ./out && rm -f tsconfig.tsbuildinfo",
     "compile": "tsc -b -v"
   },
-  "dependencies": {
-    "@forge/api": "6.1.0-next.0"
-  },
   "publishConfig": {
     "registry": "https://packages.atlassian.com/api/npm/npm-public/"
   }
 }

Modified: package/out/index.d.ts.map

Index: package/out/index.d.ts.map
===================================================================
--- package/out/index.d.ts.map
+++ package/out/index.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,UAAU,aAAa;IACrB,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE;aAAG,GAAG,IAAI,MAAM,GAAG,MAAM,GAAG,GAAG;SAAE,CAAC;QAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE;QACP,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE;SACN,GAAG,IAAI,MAAM,GAAG,MAAM,GAAG,GAAG;KAC9B,CAAC;IACF,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CACnC;AAED,UAAU,cAAc;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,oBAAY,QAAQ,GAAG,cAAc,GAAG,MAAM,GAAG,IAAI,CAAC;AAEtD,oBAAY,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAElF,aAAK,kBAAkB,GAAG,CACxB,OAAO,EAAE,aAAa,EACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,KACvC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAsC3C,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,OAAO,CAAC,SAAS,CAAmC;;IAQ7C,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,GAAG,IAAI;IAW9D,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAIf,cAAc,IAAI,kBAAkB;CA2B5C"}
\ No newline at end of file
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEtF,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,aAAK,aAAa,CAAC,QAAQ,IAAI;IAC7B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,oBAAY,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAAC;AAE9D,oBAAY,gBAAgB,CAAC,QAAQ,GAAG,GAAG,EAAE,MAAM,GAAG,QAAQ,IAAI,CAChE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,KACvB,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAE9B,aAAK,kBAAkB,GAAG,CACxB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KACxC,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,OAAO,CAAC,SAAS,CAAqD;;IAM/D,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI;IAa9E,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAIf,cAAc,IAAI,kBAAkB;CAyB5C;AAOD,oBAAY,QAAQ,CAAC,CAAC,SAAS,WAAW,IAAI;KAC3C,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;CACpF,CAAC;AAQF,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAM7F"}
\ No newline at end of file

Modified: package/CHANGELOG.md

Index: package/CHANGELOG.md
===================================================================
--- package/CHANGELOG.md
+++ package/CHANGELOG.md
@@ -1,6 +1,12 @@
 # @forge/resolver
 
+## 1.7.0-next.1
+
+### Minor Changes
+
+- 1a5bad3: Typed interface for invoking resolvers
+
 ## 1.6.17-next.0
 
 ### Patch Changes

Modified: package/out/index.d.ts

Index: package/out/index.d.ts
===================================================================
--- package/out/index.d.ts
+++ package/out/index.d.ts
@@ -1,34 +1,28 @@
-interface InvokePayload {
+import type { Context, DefArgument, DefResult, Definitions, Request } from './shared';
+export { Request };
+declare type InvokePayload<Argument> = {
     call: {
         functionKey: string;
-        payload?: {
-            [key in number | string]: any;
-        };
+        payload?: Argument;
         jobId?: string;
     };
-    context: {
-        [key: string]: any;
-    };
-}
-export interface Request {
-    payload: {
-        [key in number | string]: any;
-    };
-    context: InvokePayload['context'];
-}
-interface ResponseObject {
+    context: Context;
+};
+export declare type Response = {
     [key: string]: any;
-}
-export declare type Response = ResponseObject | string | void;
-export declare type ResolverFunction = (request: Request) => Promise<Response> | Response;
-declare type DefinitionsHandler = (payload: InvokePayload, backendRuntimePayload?: Request['payload']) => Promise<ReturnType<ResolverFunction>>;
+} | string | void;
+export declare type ResolverFunction<Argument = any, Result = Response> = (request: Request<Argument>) => Promise<Result> | Result;
+declare type DefinitionsHandler = (payload: InvokePayload<unknown>, backendRuntimePayload?: Record<string, any>) => Promise<unknown>;
 export default class Resolver {
     private functions;
     constructor();
-    define(functionKey: string, cb: ResolverFunction): this;
+    define(functionKey: string, cb: ResolverFunction<never, unknown>): this;
     private getFunction;
     private sanitizeObject;
     getDefinitions(): DefinitionsHandler;
 }
-export {};
+export declare type Handlers<D extends Definitions> = {
+    [Def in keyof D & string]: ResolverFunction<DefArgument<D, Def>, DefResult<D, Def>>;
+};
+export declare function makeResolver<D extends Definitions>(handlers: Handlers<D>): DefinitionsHandler;
 //# sourceMappingURL=index.d.ts.map
\ No newline at end of file