@salutejs/scenario
Advanced tools
Comparing version 0.2.0 to 0.3.0
@@ -9,3 +9,5 @@ export * from './lib/createSystemScenario'; | ||
export * from './lib/createIntents'; | ||
export { createInvoice, findInvoiceById, findInvoiceByServiceIdOrderId, completeInvoice, reverseInvoice, refundInvoice, } from './lib/smartpay'; | ||
export * from './lib/types'; | ||
export * from '@salutejs/types'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -13,2 +13,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.refundInvoice = exports.reverseInvoice = exports.completeInvoice = exports.findInvoiceByServiceIdOrderId = exports.findInvoiceById = exports.createInvoice = void 0; | ||
__exportStar(require("./lib/createSystemScenario"), exports); | ||
@@ -22,2 +23,10 @@ __exportStar(require("./lib/createUserScenario"), exports); | ||
__exportStar(require("./lib/createIntents"), exports); | ||
var smartpay_1 = require("./lib/smartpay"); | ||
Object.defineProperty(exports, "createInvoice", { enumerable: true, get: function () { return smartpay_1.createInvoice; } }); | ||
Object.defineProperty(exports, "findInvoiceById", { enumerable: true, get: function () { return smartpay_1.findInvoiceById; } }); | ||
Object.defineProperty(exports, "findInvoiceByServiceIdOrderId", { enumerable: true, get: function () { return smartpay_1.findInvoiceByServiceIdOrderId; } }); | ||
Object.defineProperty(exports, "completeInvoice", { enumerable: true, get: function () { return smartpay_1.completeInvoice; } }); | ||
Object.defineProperty(exports, "reverseInvoice", { enumerable: true, get: function () { return smartpay_1.reverseInvoice; } }); | ||
Object.defineProperty(exports, "refundInvoice", { enumerable: true, get: function () { return smartpay_1.refundInvoice; } }); | ||
__exportStar(require("./lib/types"), exports); | ||
__exportStar(require("@salutejs/types"), exports); |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createSaluteRequest = void 0; | ||
var i18n_1 = require("./i18n"); | ||
var createSaluteRequest = function (request) { | ||
@@ -8,2 +9,5 @@ var inference; | ||
return { | ||
get character() { | ||
return request.payload.character.id; | ||
}, | ||
get appInfo() { | ||
@@ -44,4 +48,7 @@ return request.payload.app_info; | ||
}, | ||
i18n: function (keyset) { | ||
return i18n_1.i18n(request.payload.character.id)(keyset); | ||
}, | ||
}; | ||
}; | ||
exports.createSaluteRequest = createSaluteRequest; |
{ | ||
"name": "@salutejs/scenario", | ||
"version": "0.2.0", | ||
"version": "0.3.0", | ||
"description": "Tiny helpers to make scenario for Salute family", | ||
@@ -27,11 +27,14 @@ "author": "SberDevices Frontend Team <sberdevices.frontend@gmail.com>", | ||
"build": "rm -rf dist && tsc", | ||
"lint": "eslint --ext .js,.ts ./src" | ||
"lint": "eslint --ext .js,.ts ./src", | ||
"test": "../../node_modules/.bin/jest --config ../../jest.config.ts" | ||
}, | ||
"devDependencies": { | ||
"@types/node-fetch": "2.5.10", | ||
"typescript": "4.1.3" | ||
}, | ||
"dependencies": { | ||
"@salutejs/types": "0.2.0" | ||
"@salutejs/types": "0.3.0", | ||
"node-fetch": "2.6.1" | ||
}, | ||
"gitHead": "457946fb2d87ac9d86f2597eb64f7f0229975dc3" | ||
"gitHead": "2553b4888e6c6c9aa67b74de7e2e6b6a6859c433" | ||
} |
155
README.md
@@ -103,2 +103,157 @@ # @salutejs/scenario | ||
## SmartPay | ||
Чтобы оплата работала, необходимо добавить переменную PAYMENT_TOKEN в environment. | ||
### Инициация диалога оплаты | ||
Для отображения диалога оплаты на экране смартаппа, необходимо: | ||
1. Создать счет (вызвать `createInvoice`). | ||
2. Отправить команду на открытие окна оплаты (вызвать хелпер `res.askPayment`). | ||
```ts | ||
import { createInvoice } from '@salutejs/payments'; | ||
import { SaluteHandler } from '@salutejs/types'; | ||
const handler: SaluteHandler = async ({ req, res }) => { | ||
const { delivery_info, order } = req.variables; | ||
const { invoice_id } = await createInvoice({ invoice: { delivery_info, order } }); | ||
res.askPayment(invoice_id); | ||
}; | ||
``` | ||
### Завершение оплаты | ||
Чтобы узнать о завершении диалога оплаты пользователем, | ||
необходимо подписаться на системный сценарий `PAY_DIALOG_FINISHED`. | ||
```ts | ||
import { createSystemScenario, findInvoice, PayDialogFinishedServerAction, PayDialogStatuses, PaymentInvoiceStatuses } from '@salutejs/scenario'; | ||
createSystemScenario({ | ||
PAY_DIALOG_FINISHED: async ({ req, res }) => { | ||
const { parameters } = req.serverAction as PayDialogFinishedServerAction; | ||
if (parameters.payment_response.response_code === PayDialogStatuses.success) { | ||
// диалог завершился успешно, необходимо проверить статус платежа | ||
const { invoice_status } = await findInvoice({ invoiceId: parameters.payment_response.invoice_id }); | ||
if (invoice_status === PaymentInvoiceStatuses.confirmed) { | ||
// оплачено и можно формировать заказ | ||
} | ||
} | ||
} | ||
}); | ||
``` | ||
## i18n | ||
Интерфейс для адаптации текста с динамическими параметрами и плюрализацией в рамках персонажей семейства виртуальных ассистентов Салют. | ||
### Создание словарей | ||
Файлы с адаптацией лежат рядом с кодом, к которому они логически относятся. | ||
``` | ||
src/handlers/mainPage | ||
├── mainPage.i18n | ||
│ ├── sber.ts — словарь для персонажа Сбер | ||
│ ├── joy.ts — словарь для персонажа Джой | ||
│ ├── athena.ts — словарь для персонажа Афина | ||
│ └── index.ts — карта персонажей | ||
``` | ||
Файл словаря — модуль, в котором лежит кейсет для одного языка с парами `{ ключ, перевод }`: | ||
``` ts | ||
// mainPage/mainPage.i18n/sber.ts | ||
export const sber = { | ||
Пока: 'Bye', | ||
Привет: 'Example', | ||
}; | ||
``` | ||
Все словари должны быть объявлены в карте персонажей. Картой оперирует модуль i18n. | ||
```ts | ||
// mainPage/mainPage.i18n/index.ts | ||
export * from './sber'; | ||
export * from './joy'; | ||
export * from './athena'; | ||
``` | ||
### Использование | ||
``` ts | ||
// mainPage/mainPage.ts | ||
import * as keyset from './mainPage.i18n'; | ||
// ... | ||
handle: ({ req, res }) => { | ||
const greeting = req.i18n(keyset); | ||
res.setPronounceText(greeting('Привет')); | ||
}, | ||
// ... | ||
``` | ||
### Параметризация | ||
Параметры объявляются в синтаксисе схожем с параметрами для [template strings](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/template_strings). | ||
``` ts | ||
// mainPage/mainPage.i18n/sber.ts | ||
export const sber = { | ||
'Добрый день, {name}!': 'Добрый день, {name}!', | ||
} | ||
``` | ||
``` ts | ||
// mainPage/mainPage.i18n/joy.ts | ||
export const joy = { | ||
'Добрый день, {name}!': 'Привет, {name}!', | ||
} | ||
``` | ||
``` ts | ||
// mainPage/mainPage.ts | ||
import * as keyset from './mainPage.i18n'; | ||
// ... | ||
handle: ({ req, res }) => { | ||
const greeting = req.i18n(keyset); | ||
res.setPronounceText(greeting('Добрый день, {name}!', { | ||
name: 'Костя', | ||
})); | ||
}, | ||
// ... | ||
``` | ||
### Плюрализация | ||
Для выражения плюрализация существует специальный параметр `count`. Который соотносится с вариантами написания ключа через вложенные параметры: `many`, `some`, `one`, `none`. | ||
``` ts | ||
// mainPage/mainPage.i18n/sber.ts | ||
export const sber = { | ||
'{count} операций': { | ||
many: '{count} операция', | ||
none: 'нет операций', | ||
one: '{count} операция', | ||
some: '{count} операции', | ||
} | ||
} | ||
``` | ||
```ts | ||
// mainPage/mainPage.ts | ||
import * as keyset from './mainPage.i18n'; | ||
// ... | ||
handle: ({ req, res }) => { | ||
const transactions = req.i18n(keyset); | ||
res.setPronounceText(transactions('{count} операций', { | ||
count: 2, | ||
})); | ||
}, | ||
// ... | ||
``` | ||
#### SberDevices with :heart: |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
156657
45
1443
259
0
2
2
1
+ Addednode-fetch@2.6.1
+ Added@salutejs/types@0.3.0(transitive)
+ Addednode-fetch@2.6.1(transitive)
- Removed@salutejs/types@0.2.0(transitive)
Updated@salutejs/types@0.3.0