foobara-typescript-remote-command-generator 0.0.15 → 0.0.17
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/src/remote_generator/services/auth/access_tokens_generator.rb +13 -0
- data/src/remote_generator/services/auth/login_command_generator.rb +17 -0
- data/src/remote_generator/services/auth/login_generator.rb +17 -0
- data/src/remote_generator/services/auth/logout_command_generator.rb +17 -0
- data/src/remote_generator/services/auth/logout_generator.rb +17 -0
- data/src/remote_generator/services/auth/refresh_login_generator.rb +17 -0
- data/src/remote_generator/services/auth/requires_auth_command_generator.rb +15 -0
- data/src/remote_generator/services/auth/requires_auth_generator.rb +19 -0
- data/src/remote_generator/services/command_generator.rb +8 -0
- data/src/remote_generator/services/domain_generator.rb +1 -1
- data/src/remote_generator/services/typescript_from_manifest_base_generator.rb +23 -3
- data/templates/Command/Inputs.ts.erb +3 -1
- data/templates/Command.ts.erb +2 -2
- data/templates/Foobara/Auth/LoginCommand.ts.erb +19 -0
- data/templates/Foobara/Auth/LogoutCommand.ts.erb +18 -0
- data/templates/Foobara/Auth/RequiresAuthCommand.ts.erb +43 -0
- data/templates/Foobara/Auth/utils/accessTokens.ts.erb +28 -0
- data/templates/base/RemoteCommand.ts +21 -47
- metadata +15 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0edeec83ef5a6e8fdd8f4b0bf8352c0791a593386aec53f70724d3437b7b3b13
|
4
|
+
data.tar.gz: c80f2d935699af9c03f0af3e0db70e9f411299d8017790cd78ae865fe21573eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: acb79c060d229a21d77a0962f72e6ce30adadd7a513ab061725d3fde6a60a414bf0fd5b917d48df58ecaf0012290d6021886ddcf3a11913f9ed798bff2018d63
|
7
|
+
data.tar.gz: caea17f1356db403b37e29bc6edeefea58107e94b57f3d4bc19987ae9c1b112e506f3248c1468cbb07746947604f0a95a68368380d2633e9e835b00d2dba3d96
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Foobara
|
2
|
+
module RemoteGenerator
|
3
|
+
class Services
|
4
|
+
module Auth
|
5
|
+
class LoginCommandGenerator < TypescriptFromManifestBaseGenerator
|
6
|
+
def template_path
|
7
|
+
"Foobara/Auth/LoginCommand.ts.erb"
|
8
|
+
end
|
9
|
+
|
10
|
+
def dependencies
|
11
|
+
super + [AccessTokensGenerator.new(relevant_manifest)]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Foobara
|
2
|
+
module RemoteGenerator
|
3
|
+
class Services
|
4
|
+
module Auth
|
5
|
+
class LoginGenerator < CommandGenerator
|
6
|
+
def base_class_path
|
7
|
+
"Foobara/Auth/LoginCommand"
|
8
|
+
end
|
9
|
+
|
10
|
+
def dependencies
|
11
|
+
super + [LoginCommandGenerator.new(relevant_manifest)]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Foobara
|
2
|
+
module RemoteGenerator
|
3
|
+
class Services
|
4
|
+
module Auth
|
5
|
+
class LogoutCommandGenerator < TypescriptFromManifestBaseGenerator
|
6
|
+
def template_path
|
7
|
+
"Foobara/Auth/LogoutCommand.ts.erb"
|
8
|
+
end
|
9
|
+
|
10
|
+
def dependencies
|
11
|
+
super + [AccessTokensGenerator.new(relevant_manifest)]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Foobara
|
2
|
+
module RemoteGenerator
|
3
|
+
class Services
|
4
|
+
module Auth
|
5
|
+
class LogoutGenerator < CommandGenerator
|
6
|
+
def base_class_path
|
7
|
+
"Foobara/Auth/LogoutCommand"
|
8
|
+
end
|
9
|
+
|
10
|
+
def dependencies
|
11
|
+
super + [LogoutCommandGenerator.new(relevant_manifest)]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Foobara
|
2
|
+
module RemoteGenerator
|
3
|
+
class Services
|
4
|
+
module Auth
|
5
|
+
class RefreshLoginGenerator < CommandGenerator
|
6
|
+
def base_class_path
|
7
|
+
"Foobara/Auth/LoginCommand"
|
8
|
+
end
|
9
|
+
|
10
|
+
def dependencies
|
11
|
+
super + [LoginCommandGenerator.new(relevant_manifest)]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative "../typescript_from_manifest_base_generator"
|
2
|
+
|
3
|
+
module Foobara
|
4
|
+
module RemoteGenerator
|
5
|
+
class Services
|
6
|
+
module Auth
|
7
|
+
class RequiresAuthCommandGenerator < TypescriptFromManifestBaseGenerator
|
8
|
+
def template_path
|
9
|
+
"Foobara/Auth/RequiresAuthCommand.ts.erb"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "../command_generator"
|
2
|
+
|
3
|
+
module Foobara
|
4
|
+
module RemoteGenerator
|
5
|
+
class Services
|
6
|
+
module Auth
|
7
|
+
class RequiresAuthGenerator < CommandGenerator
|
8
|
+
def base_class_path
|
9
|
+
"Foobara/Auth/RequiresAuthCommand"
|
10
|
+
end
|
11
|
+
|
12
|
+
def dependencies
|
13
|
+
super + [RequiresAuthCommandGenerator.new(relevant_manifest)]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -35,6 +35,14 @@ module Foobara
|
|
35
35
|
def command_errors_index_generator
|
36
36
|
Services::CommandErrorsIndexGenerator.new(command_manifest)
|
37
37
|
end
|
38
|
+
|
39
|
+
def base_class_path
|
40
|
+
"base/RemoteCommand"
|
41
|
+
end
|
42
|
+
|
43
|
+
def base_class_name
|
44
|
+
base_class_path.split("/").last
|
45
|
+
end
|
38
46
|
end
|
39
47
|
end
|
40
48
|
end
|
@@ -28,8 +28,23 @@ module Foobara
|
|
28
28
|
def manifest_to_generator_classes(manifest)
|
29
29
|
case manifest
|
30
30
|
when Manifest::Command
|
31
|
+
generator_classes = case manifest.full_command_name
|
32
|
+
when "Foobara::Auth::RefreshLogin"
|
33
|
+
Services::Auth::RefreshLoginGenerator
|
34
|
+
when "Foobara::Auth::Login"
|
35
|
+
Services::Auth::LoginGenerator
|
36
|
+
when "Foobara::Auth::Logout"
|
37
|
+
Services::Auth::LogoutGenerator
|
38
|
+
else
|
39
|
+
if manifest.requires_authentication?
|
40
|
+
Services::Auth::RequiresAuthGenerator
|
41
|
+
else
|
42
|
+
Services::CommandGenerator
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
31
46
|
[
|
32
|
-
|
47
|
+
*generator_classes,
|
33
48
|
Services::CommandInputsGenerator,
|
34
49
|
Services::CommandResultGenerator,
|
35
50
|
Services::CommandErrorsGenerator,
|
@@ -190,10 +205,15 @@ module Foobara
|
|
190
205
|
type_string = if type_declaration.is_a?(Manifest::Attributes)
|
191
206
|
ts_type = attributes_to_ts_type(type_declaration, association_depth:, dependency_group:)
|
192
207
|
|
208
|
+
is_empty = type_declaration.attribute_declarations.empty?
|
209
|
+
|
193
210
|
if name
|
194
|
-
|
211
|
+
# TODO: test this code path or delete it
|
212
|
+
# :nocov:
|
213
|
+
return is_empty ? "undefined" : "interface #{name} #{ts_type}"
|
214
|
+
# :nocov:
|
195
215
|
else
|
196
|
-
ts_type
|
216
|
+
is_empty ? "undefined" : ts_type
|
197
217
|
end
|
198
218
|
elsif type_declaration.is_a?(Manifest::Array)
|
199
219
|
# TODO: which association_depth do we pass here?
|
@@ -2,4 +2,6 @@
|
|
2
2
|
import <%= dependency_root.import_destructure %> from "<%= path_to_root %><%= dependency_root.import_path %>"
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
|
5
|
+
type Inputs = <%= foobara_type_to_ts_type(inputs_type, dependency_group:) %>
|
6
|
+
|
7
|
+
export default Inputs
|
data/templates/Command.ts.erb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
import
|
1
|
+
import <%= base_class_name %> from "<%= path_to_root %><%= base_class_path %>"
|
2
2
|
|
3
3
|
import Inputs from "./Inputs"
|
4
4
|
import Result from "./Result"
|
5
5
|
import { Error } from "./Errors"
|
6
6
|
|
7
|
-
export class <%= command_name %> extends
|
7
|
+
export class <%= command_name %> extends <%= base_class_name %><Inputs, Result, Error> {
|
8
8
|
static readonly organizationName = "<%= organization_name %>"
|
9
9
|
static readonly domainName = "<%= domain_name %>"
|
10
10
|
static readonly commandName = "<%= command_name %>"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import RemoteCommand from '../../base/RemoteCommand'
|
2
|
+
import { type FoobaraError } from '../../base/Error'
|
3
|
+
import { type Outcome } from '../../base/Outcome'
|
4
|
+
import { handleLogin } from './utils/accessTokens'
|
5
|
+
|
6
|
+
export default class LoginCommand<Inputs, Result, Error extends FoobaraError<any>>
|
7
|
+
extends RemoteCommand<Inputs, Result, Error> {
|
8
|
+
async _handleResponse (response: Response): Promise<Outcome<Result, Error>> {
|
9
|
+
if (response.ok) {
|
10
|
+
const accessToken: string | null = response.headers.get('X-Access-Token')
|
11
|
+
|
12
|
+
if (accessToken != null) {
|
13
|
+
handleLogin(this.urlBase, accessToken)
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
return await super._handleResponse(response)
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import RemoteCommand from '../../base/RemoteCommand'
|
2
|
+
import { type FoobaraError } from '../../base/Error'
|
3
|
+
import { type Outcome } from '../../base/Outcome'
|
4
|
+
import { handleLogout } from './utils/accessTokens'
|
5
|
+
|
6
|
+
export default class LogoutCommand<Inputs, Result, Error extends FoobaraError<any>>
|
7
|
+
extends RemoteCommand<Inputs, Result, Error> {
|
8
|
+
async run (): Promise<Outcome<Result, Error>> {
|
9
|
+
const outcome = await super.run()
|
10
|
+
|
11
|
+
if (outcome.isSuccess()) {
|
12
|
+
// Broadcast logout event to all tabs
|
13
|
+
handleLogout(this.urlBase)
|
14
|
+
}
|
15
|
+
|
16
|
+
return outcome
|
17
|
+
}
|
18
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import RemoteCommand from '../../base/RemoteCommand'
|
2
|
+
import { type Outcome } from '../../base/Outcome'
|
3
|
+
import { type FoobaraError } from '../../base/Error'
|
4
|
+
import { tokenForUrl } from './utils/accessTokens'
|
5
|
+
|
6
|
+
export default class RequiresAuthCommand<Inputs, Result, Error extends FoobaraError<any>>
|
7
|
+
extends RemoteCommand<Inputs, Result, Error> {
|
8
|
+
_buildRequestParams (): RequestInit {
|
9
|
+
const requestParams = super._buildRequestParams()
|
10
|
+
|
11
|
+
const bearerToken = tokenForUrl(this.urlBase)
|
12
|
+
|
13
|
+
if (bearerToken != null && requestParams.headers != null) {
|
14
|
+
requestParams.headers = { ...requestParams.headers, Authorization: `Bearer ${bearerToken}` }
|
15
|
+
}
|
16
|
+
|
17
|
+
return requestParams
|
18
|
+
}
|
19
|
+
|
20
|
+
async _handleResponse (response: Response): Promise<Outcome<Result, Error>> {
|
21
|
+
response = await this._handleUnauthenticated(response)
|
22
|
+
|
23
|
+
return await super._handleResponse(response)
|
24
|
+
}
|
25
|
+
|
26
|
+
async _handleUnauthenticated (response: Response): Promise<Response> {
|
27
|
+
if (response.status === 401) {
|
28
|
+
this.commandState = 'refreshing_authentication'
|
29
|
+
|
30
|
+
const { RefreshLogin } = await import('./RefreshLogin')
|
31
|
+
// See if we can authenticate using the refresh token
|
32
|
+
const refreshCommand = new RefreshLogin()
|
33
|
+
const outcome = await refreshCommand.run()
|
34
|
+
|
35
|
+
if (outcome.isSuccess()) {
|
36
|
+
this.commandState = 'executing'
|
37
|
+
response = await this._issueRequest()
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
return response
|
42
|
+
}
|
43
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
const accessTokens = new Map<string, string>()
|
2
|
+
|
3
|
+
const logout = (urlBase: string): void => { accessTokens.delete(urlBase) }
|
4
|
+
let handleLogout: (baseUrl: string) => void = logout
|
5
|
+
|
6
|
+
const tokenForUrl = (baseUrl: string): string | undefined => accessTokens.get(baseUrl)
|
7
|
+
const handleLogin: (baseUrl: string, accessToken: string) => void = (baseUrl, accessToken) => {
|
8
|
+
accessTokens.set(baseUrl, accessToken)
|
9
|
+
}
|
10
|
+
|
11
|
+
if (typeof BroadcastChannel !== 'undefined') {
|
12
|
+
const logoutChannel = new BroadcastChannel('foobara-auth-events')
|
13
|
+
|
14
|
+
logoutChannel.addEventListener('message', (event: MessageEvent<string>) => {
|
15
|
+
accessTokens.delete(event.data)
|
16
|
+
})
|
17
|
+
|
18
|
+
handleLogout = (baseUrl: string) => {
|
19
|
+
logout(baseUrl)
|
20
|
+
logoutChannel.postMessage(baseUrl)
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
export {
|
25
|
+
handleLogin,
|
26
|
+
handleLogout,
|
27
|
+
tokenForUrl
|
28
|
+
}
|
@@ -1,16 +1,11 @@
|
|
1
1
|
import { type Outcome, SuccessfulOutcome, ErrorOutcome } from './Outcome'
|
2
2
|
import { type FoobaraError } from './Error'
|
3
3
|
|
4
|
-
export type commandState = 'initialized' | 'executing' | 'refreshing_auth' | 'succeeded' | 'errored' | 'failed'
|
5
|
-
|
6
|
-
const accessTokens: Record<string, string> = {}
|
7
|
-
|
8
4
|
export default abstract class RemoteCommand<Inputs, Result, CommandError extends FoobaraError> {
|
9
5
|
static _urlBase: string | undefined
|
10
6
|
static commandName: string
|
11
7
|
static organizationName: string
|
12
8
|
static domainName: string
|
13
|
-
static authRequired: boolean = true // TODO: set this from generator
|
14
9
|
|
15
10
|
// TODO: make use of domain's config instead of process.env directly.
|
16
11
|
static get urlBase (): string {
|
@@ -39,11 +34,11 @@ export default abstract class RemoteCommand<Inputs, Result, CommandError extends
|
|
39
34
|
return (this.constructor as typeof RemoteCommand<Inputs, Result, CommandError>).domainName
|
40
35
|
}
|
41
36
|
|
42
|
-
inputs: Inputs
|
37
|
+
inputs: Inputs | undefined
|
43
38
|
outcome: null | Outcome<Result, CommandError>
|
44
|
-
commandState:
|
39
|
+
commandState: string
|
45
40
|
|
46
|
-
constructor (inputs: Inputs) {
|
41
|
+
constructor (inputs: Inputs | undefined = undefined) {
|
47
42
|
this.inputs = inputs
|
48
43
|
this.commandState = 'initialized'
|
49
44
|
this.outcome = null
|
@@ -81,57 +76,36 @@ export default abstract class RemoteCommand<Inputs, Result, CommandError extends
|
|
81
76
|
}
|
82
77
|
|
83
78
|
async run (): Promise<Outcome<Result, CommandError>> {
|
84
|
-
|
79
|
+
this.commandState = 'executing'
|
80
|
+
const response = await this._issueRequest()
|
85
81
|
|
86
|
-
|
82
|
+
this.outcome = await this._handleResponse(response)
|
83
|
+
|
84
|
+
return this.outcome
|
85
|
+
}
|
87
86
|
|
88
|
-
|
87
|
+
_buildUrl (): string {
|
88
|
+
return `${this.urlBase}/run/${this.commandPath}`
|
89
|
+
}
|
90
|
+
|
91
|
+
_buildRequestParams (): RequestInit {
|
92
|
+
return {
|
89
93
|
method: 'POST',
|
94
|
+
headers: { 'Content-Type': 'application/json' },
|
90
95
|
body: JSON.stringify(this.inputs),
|
91
96
|
credentials: 'include'
|
92
97
|
}
|
98
|
+
}
|
93
99
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
requestParams.headers.Authorization = `Bearer ${bearerToken}`
|
98
|
-
}
|
99
|
-
|
100
|
-
this.commandState = 'executing'
|
101
|
-
let response = await fetch(url, requestParams)
|
102
|
-
|
103
|
-
if ((this.constructor as typeof RemoteCommand<Inputs, Result, CommandError>).authRequired &&
|
104
|
-
response.status === 401) {
|
105
|
-
this.commandState = 'refreshing_auth'
|
106
|
-
|
107
|
-
// TODO: in generator make this conditional
|
108
|
-
const { RefreshLogin } = await import('../Foobara/Auth')
|
109
|
-
// See if we can authenticate using the refresh token
|
110
|
-
const refreshCommand = new RefreshLogin({})
|
111
|
-
const outcome = await refreshCommand.run()
|
112
|
-
|
113
|
-
if (outcome.isSuccess()) {
|
114
|
-
const bearerToken = accessTokens[this.urlBase]
|
115
|
-
|
116
|
-
if (bearerToken != null) {
|
117
|
-
requestParams.headers.Authorization = `Bearer ${bearerToken}`
|
118
|
-
}
|
119
|
-
|
120
|
-
this.commandState = 'executing'
|
121
|
-
response = await fetch(url, requestParams)
|
122
|
-
}
|
123
|
-
}
|
100
|
+
async _issueRequest (): Promise<Response> {
|
101
|
+
return await fetch(this._buildUrl(), this._buildRequestParams())
|
102
|
+
}
|
124
103
|
|
104
|
+
async _handleResponse (response: Response): Promise<Outcome<Result, CommandError>> {
|
125
105
|
const text = await response.text()
|
126
106
|
const body = JSON.parse(text)
|
127
107
|
|
128
108
|
if (response.ok) {
|
129
|
-
const accessToken: string | null = response.headers.get('X-Access-Token')
|
130
|
-
|
131
|
-
if (accessToken != null) {
|
132
|
-
accessTokens[this.urlBase] = accessToken
|
133
|
-
}
|
134
|
-
|
135
109
|
this.commandState = 'succeeded'
|
136
110
|
this.outcome = new SuccessfulOutcome<Result, CommandError>(body)
|
137
111
|
} else if (response.status === 422 || response.status === 401 || response.status === 403) {
|
metadata
CHANGED
@@ -1,28 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foobara-typescript-remote-command-generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miles Georgi
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-04-09 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
|
-
- !ruby/object:Gem::Dependency
|
13
|
-
name: foobara
|
14
|
-
requirement: !ruby/object:Gem::Requirement
|
15
|
-
requirements:
|
16
|
-
- - "~>"
|
17
|
-
- !ruby/object:Gem::Version
|
18
|
-
version: 0.0.88
|
19
|
-
type: :runtime
|
20
|
-
prerelease: false
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
-
requirements:
|
23
|
-
- - "~>"
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version: 0.0.88
|
26
12
|
- !ruby/object:Gem::Dependency
|
27
13
|
name: foobara-files-generator
|
28
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,6 +42,14 @@ files:
|
|
56
42
|
- src/remote_generator/services/aggregate_model_generator.rb
|
57
43
|
- src/remote_generator/services/atom_entity_generator.rb
|
58
44
|
- src/remote_generator/services/atom_model_generator.rb
|
45
|
+
- src/remote_generator/services/auth/access_tokens_generator.rb
|
46
|
+
- src/remote_generator/services/auth/login_command_generator.rb
|
47
|
+
- src/remote_generator/services/auth/login_generator.rb
|
48
|
+
- src/remote_generator/services/auth/logout_command_generator.rb
|
49
|
+
- src/remote_generator/services/auth/logout_generator.rb
|
50
|
+
- src/remote_generator/services/auth/refresh_login_generator.rb
|
51
|
+
- src/remote_generator/services/auth/requires_auth_command_generator.rb
|
52
|
+
- src/remote_generator/services/auth/requires_auth_generator.rb
|
59
53
|
- src/remote_generator/services/command_errors_generator.rb
|
60
54
|
- src/remote_generator/services/command_errors_index_generator.rb
|
61
55
|
- src/remote_generator/services/command_generator.rb
|
@@ -98,6 +92,10 @@ files:
|
|
98
92
|
- templates/Entity/Unloaded.ts.erb
|
99
93
|
- templates/EntityVariants.ts.erb
|
100
94
|
- templates/Error.ts.erb
|
95
|
+
- templates/Foobara/Auth/LoginCommand.ts.erb
|
96
|
+
- templates/Foobara/Auth/LogoutCommand.ts.erb
|
97
|
+
- templates/Foobara/Auth/RequiresAuthCommand.ts.erb
|
98
|
+
- templates/Foobara/Auth/utils/accessTokens.ts.erb
|
101
99
|
- templates/Model/Aggregate.ts.erb
|
102
100
|
- templates/Model/Atom.ts.erb
|
103
101
|
- templates/Model/Model.ts.erb
|
@@ -134,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
132
|
- !ruby/object:Gem::Version
|
135
133
|
version: '0'
|
136
134
|
requirements: []
|
137
|
-
rubygems_version: 3.6.
|
135
|
+
rubygems_version: 3.6.2
|
138
136
|
specification_version: 4
|
139
137
|
summary: Generates remote commands for Typescript from a foobara manifest
|
140
138
|
test_files: []
|