@forge/runtime 5.3.2 → 5.4.0-next.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @forge/runtime
2
2
 
3
+ ## 5.4.0-next.1
4
+
5
+ ### Minor Changes
6
+
7
+ - d36502b: This change extends existing methods on external auth providers. We are now providing account details including: externalAccountId, displayName, avatarUrl, granted scopes.
8
+ Moreover, if end user authenticates multiple accounts, it is possible to select what account to use.
9
+
10
+ ## 5.3.3-next.0
11
+
12
+ ### Patch Changes
13
+
14
+ - 32fa518: Bumping dependencies via Renovate:
15
+
16
+ - @types/node-fetch
17
+
3
18
  ## 5.3.2
4
19
 
5
20
  ### Patch Changes
package/out/request.d.ts CHANGED
@@ -1,4 +1,14 @@
1
1
  import * as t from 'io-ts';
2
+ declare const XisRequestTokenType: t.IntersectionC<[t.TypeC<{
3
+ id: t.StringC;
4
+ service: t.StringC;
5
+ token: t.StringC;
6
+ }>, t.PartialC<{
7
+ externalAccountId: t.StringC;
8
+ displayName: t.StringC;
9
+ avatarUrl: t.UnionC<[t.StringC, t.UndefinedC]>;
10
+ scopes: t.ArrayC<t.StringC>;
11
+ }>]>;
2
12
  declare const MetadataType: t.IntersectionC<[t.TypeC<{
3
13
  apiAuth: t.TypeC<{
4
14
  env: t.StringC;
@@ -6,11 +16,16 @@ declare const MetadataType: t.IntersectionC<[t.TypeC<{
6
16
  }>;
7
17
  clientId: t.StringC;
8
18
  contextAri: t.StringC;
9
- tokens: t.ArrayC<t.TypeC<{
19
+ tokens: t.ArrayC<t.IntersectionC<[t.TypeC<{
10
20
  id: t.StringC;
11
21
  service: t.StringC;
12
22
  token: t.StringC;
13
- }>>;
23
+ }>, t.PartialC<{
24
+ externalAccountId: t.StringC;
25
+ displayName: t.StringC;
26
+ avatarUrl: t.UnionC<[t.StringC, t.UndefinedC]>;
27
+ scopes: t.ArrayC<t.StringC>;
28
+ }>]>>;
14
29
  appContext: t.TypeC<{
15
30
  appId: t.StringC;
16
31
  appVersion: t.StringC;
@@ -60,11 +75,16 @@ export declare const ExternalRequestBodyType: t.IntersectionC<[t.TypeC<{
60
75
  }>;
61
76
  clientId: t.StringC;
62
77
  contextAri: t.StringC;
63
- tokens: t.ArrayC<t.TypeC<{
78
+ tokens: t.ArrayC<t.IntersectionC<[t.TypeC<{
64
79
  id: t.StringC;
65
80
  service: t.StringC;
66
81
  token: t.StringC;
67
- }>>;
82
+ }>, t.PartialC<{
83
+ externalAccountId: t.StringC;
84
+ displayName: t.StringC;
85
+ avatarUrl: t.UnionC<[t.StringC, t.UndefinedC]>;
86
+ scopes: t.ArrayC<t.StringC>;
87
+ }>]>>;
68
88
  appContext: t.TypeC<{
69
89
  appId: t.StringC;
70
90
  appVersion: t.StringC;
@@ -119,11 +139,16 @@ export declare const InvocationType: t.TypeC<{
119
139
  }>;
120
140
  clientId: t.StringC;
121
141
  contextAri: t.StringC;
122
- tokens: t.ArrayC<t.TypeC<{
142
+ tokens: t.ArrayC<t.IntersectionC<[t.TypeC<{
123
143
  id: t.StringC;
124
144
  service: t.StringC;
125
145
  token: t.StringC;
126
- }>>;
146
+ }>, t.PartialC<{
147
+ externalAccountId: t.StringC;
148
+ displayName: t.StringC;
149
+ avatarUrl: t.UnionC<[t.StringC, t.UndefinedC]>;
150
+ scopes: t.ArrayC<t.StringC>;
151
+ }>]>>;
127
152
  appContext: t.TypeC<{
128
153
  appId: t.StringC;
129
154
  appVersion: t.StringC;
@@ -178,6 +203,7 @@ export declare const InvocationType: t.TypeC<{
178
203
  export declare type ExternalRequestVariable = t.TypeOf<typeof VariableType>;
179
204
  export declare type Invocation = t.TypeOf<typeof InvocationType>;
180
205
  export declare type Metadata = t.TypeOf<typeof MetadataType>;
206
+ export declare type XisRequestToken = t.TypeOf<typeof XisRequestTokenType>;
181
207
  export declare type ExternalRequestBody = t.TypeOf<typeof ExternalRequestBodyType>;
182
208
  export {};
183
209
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAG3B,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuDhB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;EAIhB,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASlC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOzB,CAAC;AAEH,oBAAY,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEpE,oBAAY,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AACzD,oBAAY,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AACrD,oBAAY,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAG3B,QAAA,MAAM,mBAAmB;;;;;;;;;IAYvB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiDhB,CAAC;AAEH,QAAA,MAAM,YAAY;;;;EAIhB,CAAC;AAIH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASlC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOzB,CAAC;AAEH,oBAAY,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AAEpE,oBAAY,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,cAAc,CAAC,CAAC;AACzD,oBAAY,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC,CAAC;AACrD,oBAAY,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACnE,oBAAY,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
package/out/request.js CHANGED
@@ -3,6 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InvocationType = exports.ExternalRequestBodyType = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const t = tslib_1.__importStar(require("io-ts"));
6
+ const XisRequestTokenType = t.intersection([
7
+ t.type({
8
+ id: t.string,
9
+ service: t.string,
10
+ token: t.string
11
+ }),
12
+ t.partial({
13
+ externalAccountId: t.string,
14
+ displayName: t.string,
15
+ avatarUrl: t.union([t.string, t.undefined]),
16
+ scopes: t.array(t.string)
17
+ })
18
+ ]);
6
19
  const MetadataType = t.intersection([
7
20
  t.type({
8
21
  apiAuth: t.type({
@@ -11,11 +24,7 @@ const MetadataType = t.intersection([
11
24
  }),
12
25
  clientId: t.string,
13
26
  contextAri: t.string,
14
- tokens: t.array(t.type({
15
- id: t.string,
16
- service: t.string,
17
- token: t.string
18
- })),
27
+ tokens: t.array(XisRequestTokenType),
19
28
  appContext: t.type({
20
29
  appId: t.string,
21
30
  appVersion: t.string,
@@ -5,6 +5,16 @@ export interface ServiceToken {
5
5
  id: string;
6
6
  service: string;
7
7
  token: string;
8
+ externalAccountId: string;
9
+ displayName: string;
10
+ avatarUrl?: string;
11
+ scopes: string[];
12
+ }
13
+ export interface ExternalAuthAccount {
14
+ id: string;
15
+ displayName: string;
16
+ avatarUrl?: string;
17
+ scopes: string[];
8
18
  }
9
19
  export interface ProxyInformation {
10
20
  token: string;
@@ -71,10 +81,15 @@ export declare class InvocationRequest implements BaseInvocationRequest {
71
81
  getInvocationResourceOwner(): string;
72
82
  getAppToken(): string | undefined;
73
83
  getProxy(): ProxyInformation | undefined;
74
- getTokenForService(requestedServiceKey: string, tokenId?: string): ServiceToken | undefined;
84
+ getTokenByTokenId(requestedServiceKey: string, tokenId?: string): ServiceToken | undefined;
85
+ getTokenByExternalAccount(requestedServiceKey: string, externalAccountIdToFilter?: string): ServiceToken | undefined;
86
+ private getTokensByServiceAndAccount;
87
+ private isSuperset;
88
+ getExternalAuthAccounts(serviceKey: string, externalAccountId?: string | undefined, scopes?: string[] | undefined): ExternalAuthAccount[];
75
89
  getTokenIDsForService(serviceKey: string): string[];
76
- getAllTokens(): ServiceToken[];
90
+ getAllTokens(serviceKey?: string): ServiceToken[];
77
91
  getAtlassianTokenServiceKey(): string;
92
+ private pickTokenToUse;
78
93
  getAtlassianServiceToken(): string | undefined;
79
94
  getAppTokenKey(): string;
80
95
  getThirdPartyTokenReferenceList(serviceKey: string): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"invocation-request.d.ts","sourceRoot":"","sources":["../../src/sandbox/invocation-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invocation-request.d.ts","sourceRoot":"","sources":["../../src/sandbox/invocation-request.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,19 @@ class XenInvocationRequestImpl {
9
9
  constructor(request, invocationId) {
10
10
  this.request = request;
11
11
  this.invocationId = invocationId;
12
+ this.serviceTokens = [];
13
+ this.serviceTokens = this.buildServiceTokens(request._meta.tokens);
14
+ }
15
+ buildServiceTokens(tokens) {
16
+ return tokens.map((token) => ({
17
+ id: token.id,
18
+ service: token.service,
19
+ token: token.token,
20
+ externalAccountId: token.externalAccountId || '',
21
+ displayName: token.displayName || '',
22
+ avatarUrl: token.avatarUrl,
23
+ scopes: token.scopes || []
24
+ }));
12
25
  }
13
26
  getFeatureFlags() {
14
27
  if (!this.featureFlags) {
@@ -68,7 +81,7 @@ class XenInvocationRequestImpl {
68
81
  return (_a = this.request._meta) === null || _a === void 0 ? void 0 : _a.proxy;
69
82
  }
70
83
  getAllTokens() {
71
- return this.request._meta.tokens;
84
+ return this.serviceTokens;
72
85
  }
73
86
  getUserVariables() {
74
87
  return this.request.variables;
@@ -163,23 +176,52 @@ class InvocationRequest {
163
176
  getProxy() {
164
177
  return this.xenInvocationRequest.getProxy();
165
178
  }
166
- getTokenForService(requestedServiceKey, tokenId) {
167
- return this.getAllTokens().find(({ service, id }) => service === requestedServiceKey && (!tokenId || id === tokenId));
179
+ getTokenByTokenId(requestedServiceKey, tokenId) {
180
+ const allTokens = this.getAllTokens(requestedServiceKey);
181
+ const filteredTokens = tokenId !== undefined ? allTokens.filter((token) => token.id == tokenId) : allTokens;
182
+ return this.pickTokenToUse(filteredTokens);
183
+ }
184
+ getTokenByExternalAccount(requestedServiceKey, externalAccountIdToFilter) {
185
+ const tokens = this.getTokensByServiceAndAccount(requestedServiceKey, externalAccountIdToFilter);
186
+ return this.pickTokenToUse(tokens);
187
+ }
188
+ getTokensByServiceAndAccount(requestedServiceKey, externalAccountIdToFilter) {
189
+ const tokens = this.getAllTokens(requestedServiceKey);
190
+ return externalAccountIdToFilter !== undefined
191
+ ? tokens.filter(({ externalAccountId }) => externalAccountId === externalAccountIdToFilter)
192
+ : tokens;
193
+ }
194
+ isSuperset(superset, subset) {
195
+ return !subset || subset.every((scopeInSubset) => superset.includes(scopeInSubset));
196
+ }
197
+ getExternalAuthAccounts(serviceKey, externalAccountId, scopes) {
198
+ return this.getTokensByServiceAndAccount(serviceKey, externalAccountId)
199
+ .filter((serviceToken) => this.isSuperset(serviceToken.scopes, scopes))
200
+ .map((token) => ({
201
+ id: token.externalAccountId,
202
+ displayName: token.displayName,
203
+ avatarUrl: token.avatarUrl,
204
+ scopes: token.scopes
205
+ }));
168
206
  }
169
207
  getTokenIDsForService(serviceKey) {
170
- return this.getAllTokens()
171
- .filter(({ service }) => service === serviceKey)
172
- .map((token) => token.id);
208
+ return this.getAllTokens(serviceKey).map((token) => token.id);
173
209
  }
174
- getAllTokens() {
175
- return this.xenInvocationRequest.getAllTokens();
210
+ getAllTokens(serviceKey) {
211
+ return this.xenInvocationRequest
212
+ .getAllTokens()
213
+ .filter(({ service }) => serviceKey === undefined || service === serviceKey);
176
214
  }
177
215
  getAtlassianTokenServiceKey() {
178
216
  return 'atlassian-token-service-key';
179
217
  }
218
+ pickTokenToUse(serviceTokens) {
219
+ return serviceTokens ? serviceTokens[0] : undefined;
220
+ }
180
221
  getAtlassianServiceToken() {
181
- const { token } = this.getTokenForService(this.getAtlassianTokenServiceKey()) || {};
182
- return token;
222
+ var _a;
223
+ const atlassianTokens = this.getAllTokens(this.getAtlassianTokenServiceKey());
224
+ return (_a = this.pickTokenToUse(atlassianTokens)) === null || _a === void 0 ? void 0 : _a.token;
183
225
  }
184
226
  getAppTokenKey() {
185
227
  return '__atlassian-app-token';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/runtime",
3
- "version": "5.3.2",
3
+ "version": "5.4.0-next.1",
4
4
  "description": "A Node.js runtime for Atlassian app functions",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -15,7 +15,7 @@
15
15
  "devDependencies": {
16
16
  "@types/jest": "^29.5.11",
17
17
  "@types/node": "14.18.63",
18
- "@types/node-fetch": "^2.6.10",
18
+ "@types/node-fetch": "^2.6.11",
19
19
  "@types/ws": "^7.4.7",
20
20
  "jest": "^29.7.0",
21
21
  "jest-junit": "^16.0.0",