Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/dialog/test/commands/dialog/merge.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ describe('dialog:merge', async () => {
process.chdir(srcDir)
})

it('app.schema', async () => {
xit('app.schema', async () => {
console.log('Start app.schema')
let [merged, lines] = await merge(['schemas/*.schema'])
assert(merged, 'Could not merge schemas')
Expand Down
115 changes: 115 additions & 0 deletions packages/luis/src/api/application.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import http from './http-request'
import EndpointParameters from './parameters'

const urlPath = '/luis/authoring/v3.0-preview/apps'

export default {
async assignAzureAccount(
param: EndpointParameters,
armToken: string,
azureSubscriptionId: string,
resourceGroup: string,
accountName: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/azureaccounts`

const appJSON = {
azureSubscriptionId,
resourceGroup,
accountName,
}

return http.post(url, param.subscriptionKey, appJSON, {Authorization: 'Bearer ' + armToken})
},

async create(
param: EndpointParameters,
applicationCreateObject: any) {
let url = buildUrl(param.endpoint)

return http.post(url, param.subscriptionKey, applicationCreateObject)
},

async delete(
param: EndpointParameters) {
let url = buildUrl(param.endpoint) + `/${param.appId}`

return http.delete(url, param.subscriptionKey)
},

async getEndpoints(
param: EndpointParameters) {
let url = buildUrl(param.endpoint) + `/${param.appId}/endpoints`
return http.get(url, param.subscriptionKey)
},

async import(
param: EndpointParameters,
appJSON: any,
name = '') {
name = name ? `?appName=${name}` : ''
let url = buildUrl(param.endpoint) + `/import${name}`
return http.post(url, param.subscriptionKey, appJSON)
},

async list(
param: EndpointParameters,
skip = '0',
take = '100') {
let url = buildUrl(param.endpoint) + `/?skip=${skip}&take=${take}`

return http.get(url, param.subscriptionKey)
},

async publish(
param: EndpointParameters,
applicationPublishObject: any) {
let url = buildUrl(param.endpoint) + `/${ param.appId}/publish`

return http.post(url, param.subscriptionKey, applicationPublishObject)
},

async query(
param: EndpointParameters,
slotName = 'production',
query: string,
log: true,
show_all = false,
timezone = '') {
let url = param.endpoint +
`/luis/prediction/v3.0/apps/${param.appId}/slots/${slotName}/predict?verbose=false&log=${log}&show-all-intents=${show_all}`

let body: any = {query}

if (timezone) {
body.options = {
datetimeReference: timezone,
}
}

return http.post(url, param.subscriptionKey, body)
},

async rename(
param: EndpointParameters,
name: string,
description: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}`

const body = {
name,
description
}

return http.put(url, param.subscriptionKey, body)
},

async show(
param: EndpointParameters) {
let url = buildUrl(param.endpoint) + `/${param.appId}`
return http.get(url, param.subscriptionKey)
}
}

const buildUrl = function (url: string) {
return url + urlPath
}
59 changes: 59 additions & 0 deletions packages/luis/src/api/http-request.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import fetch from 'node-fetch'

let headers = {
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': ''
}

export default {
async get(
url: string,
subscriptionKey: string) {
setSubscriptionKey(subscriptionKey)
const response = await fetch(url, {method: 'GET', headers})
return response.json()
},

async post(
url: string,
subscriptionKey: string,
body: any,
extraHeaders = {}) {
setSubscriptionKey(subscriptionKey)
headers = {...headers, ...extraHeaders}
const response = await fetch(url, {method: 'POST', headers, body: JSON.stringify(body)})
return response.json()
},

async put(
url: string,
subscriptionKey: string,
body: any) {
setSubscriptionKey(subscriptionKey)
const response = await fetch(url, {method: 'PUT', headers, body: JSON.stringify(body)})

return isJSON(response) ? response.json() : {code: 'Success'}
},

async delete(
url: string,
subscriptionKey: string) {
setSubscriptionKey(subscriptionKey)
const response = await fetch(url, {method: 'DELETE', headers})
return isJSON(response) ? response.json() : {code: 'Success'}
}
}

const setSubscriptionKey = function (subscriptionKey: string) {
headers['Ocp-Apim-Subscription-Key'] = subscriptionKey
}

/* tslint:disable:no-unused */
const isJSON = function (jsonObject: any) {
try {
JSON.parse(jsonObject + '')
} catch (error) {
return false
}
return true
}
7 changes: 7 additions & 0 deletions packages/luis/src/api/parameters.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default interface EndpointParameters {
appId?: string,

endpoint: string,

subscriptionKey: string,
}
26 changes: 26 additions & 0 deletions packages/luis/src/api/train.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import http from './http-request'
import EndpointParameters from './parameters'

const urlPath = '/luis/authoring/v3.0-preview/apps'

export default {
async train(
param: EndpointParameters,
versionId: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/${versionId}/train`

return http.post(url, param.subscriptionKey, {})
},

async getStatus(
param: EndpointParameters,
versionId: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/${versionId}/train`

return http.get(url, param.subscriptionKey)
}
}

const buildUrl = function (url: string) {
return url + urlPath
}
61 changes: 61 additions & 0 deletions packages/luis/src/api/version.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import http from './http-request'
import EndpointParameters from './parameters'

const urlPath = '/luis/authoring/v3.0-preview/apps'

export default {
async clone(
param: EndpointParameters,
oldVersionId: string,
version: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/${oldVersionId}/clone`

return http.post(url, param.subscriptionKey, {version})
},

async delete(
param: EndpointParameters,
versionId: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/${versionId}/`

return http.delete(url, param.subscriptionKey)
},

async export(
param: EndpointParameters,
versionId: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/${versionId}/export?format=json"`
return http.get(url, param.subscriptionKey)
},

async import(
param: EndpointParameters,
appJSON: any,
versionId: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/import?versionId=${versionId}`

return http.post(url, param.subscriptionKey, appJSON)
},

async list(
param: EndpointParameters,
skip = '0',
take = '100') {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/?skip=${skip}&take=${take}]`

return http.get(url, param.subscriptionKey)
},

async rename(
param: EndpointParameters,
versionId: string,
newVersion: string) {
let url = buildUrl(param.endpoint) + `/${param.appId}/versions/${versionId}/`

return http.put(url, param.subscriptionKey, {version: newVersion})
}
}

const buildUrl = function (url: string) {
return url + urlPath
}
23 changes: 9 additions & 14 deletions packages/luis/src/commands/luis/application/assignazureaccount.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import {CLIError, Command, flags} from '@microsoft/bf-cli-command'

import Application from './../../../api/application'

const utils = require('../../../utils/index')

export default class LuisApplicationAssignazureaccount extends Command {
Expand Down Expand Up @@ -36,21 +38,14 @@ export default class LuisApplicationAssignazureaccount extends Command {
const requiredProps = {appId, endpoint, subscriptionKey}
utils.validateRequiredProps(requiredProps)

const appJSON = {
azureSubscriptionId: flags.azureSubscriptionId,
resourceGroup: flags.resourceGroup,
accountName: flags.accountName,
}

try {
let url = endpoint + '/luis/authoring/v3.0-preview/apps/' + appId + '/azureaccounts'
const headers = {
Authorization: 'Bearer ' + flags.armToken,
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': subscriptionKey
}
const response = await fetch(url, {method: 'POST', headers, body: JSON.stringify(appJSON)})
const messageData = await response.json()
const messageData = await Application.assignAzureAccount(
{appId, endpoint, subscriptionKey},
flags.armToken,
flags.azureSubscriptionId,
flags.resourceGroup,
flags.accountName
)

if (messageData.error) {
throw new CLIError(messageData.error.message)
Expand Down
9 changes: 4 additions & 5 deletions packages/luis/src/commands/luis/application/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import {CLIError, Command, flags} from '@microsoft/bf-cli-command'

import Application from './../../../api/application'

const utils = require('../../../utils/index')

export default class LuisApplicationCreate extends Command {
Expand Down Expand Up @@ -51,15 +53,12 @@ export default class LuisApplicationCreate extends Command {
const requiredProps = {endpoint, subscriptionKey, name}
utils.validateRequiredProps(requiredProps)

const client = utils.getLUISClient(subscriptionKey, endpoint)
const options = {}

const applicationCreateObject = {name, culture, description, versionId, usageScenario, tokenizerVersion}

try {
const response = await client.apps.add(applicationCreateObject, options)
const response = await Application.create({subscriptionKey, endpoint}, applicationCreateObject)

const output: string = flags.json ? JSON.stringify({Status: 'App successfully created', id: response.body}, null, 2) : `App successfully created with id ${response.body}.`
const output: string = flags.json ? JSON.stringify({Status: 'App successfully created', id: response}, null, 2) : `App successfully created with id ${response}.`
this.log(output)

if (save) {
Expand Down
6 changes: 3 additions & 3 deletions packages/luis/src/commands/luis/application/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import {CLIError, Command, flags} from '@microsoft/bf-cli-command'

import Application from './../../../api/application'

const {cli} = require('cli-ux')
const utils = require('../../../utils/index')

Expand Down Expand Up @@ -38,8 +40,6 @@ export default class LuisApplicationDelete extends Command {
const requiredProps = {appId, endpoint, subscriptionKey}
utils.validateRequiredProps(requiredProps)

const client = utils.getLUISClient(subscriptionKey, endpoint)

if (flags.appId && !flags.force) {
const deleteAppConfirmation = await cli.confirm(`Are you sure you would like to delete app with id: ${appId}? (Y/N)`)
if (!deleteAppConfirmation) {
Expand All @@ -48,7 +48,7 @@ export default class LuisApplicationDelete extends Command {
}

try {
const result = await client.apps.deleteMethod(appId)
const result = await Application.delete({subscriptionKey, endpoint, appId})
if (result.code === 'Success') {
const output = flags.json ? JSON.stringify({Status: 'Success', id: flags.appId}, null, 2) : 'App successfully deleted.'
this.log(output)
Expand Down
Loading