This commit is contained in:
rca 2024-07-17 09:19:40 +09:00
parent 5b948f105a
commit ef45ca2707
14 changed files with 98 additions and 8 deletions

27
lambda/AttributeUtils.js Normal file
View File

@ -0,0 +1,27 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class AttributeUtils {
constructor(handlerInput) {
this.handlerInput = handlerInput;
}
async saveAttributes() {
await this.handlerInput.attributesManager.savePersistentAttributes();
}
async setToken(token) {
return await this.handlerInput.attributesManager.getPersistentAttributes().then((attributes) => {
attributes.token = token;
return attributes;
}).then((attributes) => {
this.handlerInput.attributesManager.setPersistentAttributes(attributes);
}).finally(() => {
return this.saveAttributes();
});
}
async getToken() {
return await this.handlerInput.attributesManager.getPersistentAttributes().then((attributes) => {
return attributes.token;
});
}
}
exports.default = AttributeUtils;
//# sourceMappingURL=AttributeUtils.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"AttributeUtils.js","sourceRoot":"","sources":["../src/AttributeUtils.ts"],"names":[],"mappings":";;AAEA,MAAM,cAAc;IAGhB,YAAY,YAAgC;QACxC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,cAAc;QACvB,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,CAAC;IACzE,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC/B,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC3F,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;YACzB,OAAO,UAAU,CAAC;QACtB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACZ,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;YAC3F,OAAO,UAAU,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,kBAAe,cAAc,CAAC"}

View File

@ -8,17 +8,21 @@ const BASE_URL = 'https://kidshift-beta.nem.one';
const TIMEOUT = 5000;
class ApiClient {
constructor() {
this.token = null;
this.client = axios_1.default.create({
baseURL: BASE_URL,
timeout: TIMEOUT,
});
}
setToken(token) {
this.token = token;
}
getHeaders(includeToken) {
const headers = {
'Content-Type': 'application/json',
};
if (includeToken) {
const token = 'placeholder_token';
const token = this.token;
headers['Authorization'] = `Bearer ${token}`;
}
return headers;

View File

@ -1 +1 @@
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;AAAA,kDAAiE;AAGjE,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AACjD,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,MAAM,SAAS;IAGX;QACI,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACvB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;IACP,CAAC;IAEO,UAAU,CAAC,YAAqB;QACpC,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;SACrC,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,mBAAmB,CAAC;YAClC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAAY,EAAE,YAAY,GAAG,IAAI;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAuB;YAC/B,OAAO;YACP,MAAM;SACT,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,GAAW,EAAE,IAAS,EAAE,YAAY,GAAG,IAAI;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;CACJ;AAED,kBAAe,IAAI,SAAS,EAAE,CAAC"}
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;AAAA,kDAAiE;AAGjE,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AACjD,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,MAAM,SAAS;IAIX;QAFQ,UAAK,GAAkB,IAAI,CAAC;QAGhC,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACvB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;IACP,CAAC;IAEM,QAAQ,CAAC,KAAa;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAEO,UAAU,CAAC,YAAqB;QACpC,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,kBAAkB;SACrC,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAAY,EAAE,YAAY,GAAG,IAAI;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAuB;YAC/B,OAAO;YACP,MAAM;SACT,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,GAAW,EAAE,IAAS,EAAE,YAAY,GAAG,IAAI;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;CACJ;AAED,kBAAe,IAAI,SAAS,EAAE,CAAC"}

View File

@ -31,6 +31,8 @@ const AWS = __importStar(require("aws-sdk"));
const DynamoDBPersistantAttributesAdapter = __importStar(require("ask-sdk-dynamodb-persistence-adapter"));
const MetaService_1 = __importDefault(require("./service/MetaService"));
const AuthService_1 = __importDefault(require("./service/AuthService"));
const TaskService_1 = __importDefault(require("./service/TaskService"));
const AttributeUtils_1 = __importDefault(require("./AttributeUtils"));
const LaunchRequestHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
@ -77,6 +79,31 @@ const KidShiftAuthIntentHandler = {
}
}
};
const KidShiftTaskListIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'KidShiftTaskListIntent';
},
async handle(handlerInput) {
const attributeUtils = new AttributeUtils_1.default(handlerInput);
TaskService_1.default.setToken(await attributeUtils.getToken());
const taskList = await TaskService_1.default.getTasks();
return handlerInput.responseBuilder
.speak(taskList.list.map((task) => task.name).join(', '))
.getResponse();
}
};
const KidShiftTaskCompleteIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'KidShiftTaskCompleteIntent';
},
async handle(handlerInput) {
return handlerInput.responseBuilder
.speak('WIP')
.getResponse();
}
};
const KidShiftMetaIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
@ -168,7 +195,7 @@ const ErrorHandler = {
}
};
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(LaunchRequestHandler, HelloWorldIntentHandler, KidShiftAuthIntentHandler, KidShiftMetaIntentHandler, HelpIntentHandler, CancelAndStopIntentHandler, FallbackIntentHandler, SessionEndedRequestHandler, IntentReflectorHandler)
.addRequestHandlers(LaunchRequestHandler, HelloWorldIntentHandler, KidShiftAuthIntentHandler, KidShiftTaskListIntentHandler, KidShiftTaskCompleteIntentHandler, KidShiftMetaIntentHandler, HelpIntentHandler, CancelAndStopIntentHandler, FallbackIntentHandler, SessionEndedRequestHandler, IntentReflectorHandler)
.addErrorHandlers(ErrorHandler)
.withPersistenceAdapter(new DynamoDBPersistantAttributesAdapter.DynamoDbPersistenceAdapter({
tableName: process.env.DYNAMODB_PERSISTENCE_TABLE_NAME || 'ask-sdk-table',

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
};
Object.defineProperty(exports, "__esModule", { value: true });
const api_1 = __importDefault(require("../api"));
class AuthService {
const _ServiceBase_1 = __importDefault(require("./_ServiceBase"));
class AuthService extends _ServiceBase_1.default {
async login(loginCode) {
return await api_1.default.post('/parent/auth/login', { code: loginCode });
}

View File

@ -1 +1 @@
{"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../src/service/AuthService.ts"],"names":[],"mappings":";;;;;AAAA,iDAAwB;AAGxB,MAAM,WAAW;IACb,KAAK,CAAC,KAAK,CAAC,SAAiB;QACzB,OAAO,MAAM,aAAG,CAAC,IAAI,CAAgB,oBAAoB,EAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACrF,CAAC;CACJ;AAED,kBAAe,IAAI,WAAW,EAAE,CAAC"}
{"version":3,"file":"AuthService.js","sourceRoot":"","sources":["../../src/service/AuthService.ts"],"names":[],"mappings":";;;;;AAAA,iDAAwB;AAExB,kEAA0C;AAE1C,MAAM,WAAY,SAAQ,sBAAY;IAClC,KAAK,CAAC,KAAK,CAAC,SAAiB;QACzB,OAAO,MAAM,aAAG,CAAC,IAAI,CAAgB,oBAAoB,EAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACrF,CAAC;CACJ;AAED,kBAAe,IAAI,WAAW,EAAE,CAAC"}

View File

@ -4,7 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
};
Object.defineProperty(exports, "__esModule", { value: true });
const api_1 = __importDefault(require("../api"));
class MetaService {
const _ServiceBase_1 = __importDefault(require("./_ServiceBase"));
class MetaService extends _ServiceBase_1.default {
async getMeta() {
return await api_1.default.get('/meta');
}

View File

@ -1 +1 @@
{"version":3,"file":"MetaService.js","sourceRoot":"","sources":["../../src/service/MetaService.ts"],"names":[],"mappings":";;;;;AAAA,iDAAwB;AAExB,MAAM,WAAW;IACb,KAAK,CAAC,OAAO;QACT,OAAO,MAAM,aAAG,CAAC,GAAG,CAAM,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACT,OAAO,MAAM,aAAG,CAAC,GAAG,CAAM,YAAY,CAAC,CAAC;IAC5C,CAAC;CACJ;AAED,kBAAe,IAAI,WAAW,EAAE,CAAC"}
{"version":3,"file":"MetaService.js","sourceRoot":"","sources":["../../src/service/MetaService.ts"],"names":[],"mappings":";;;;;AAAA,iDAAwB;AACxB,kEAA0C;AAE1C,MAAM,WAAY,SAAQ,sBAAY;IAClC,KAAK,CAAC,OAAO;QACT,OAAO,MAAM,aAAG,CAAC,GAAG,CAAM,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACT,OAAO,MAAM,aAAG,CAAC,GAAG,CAAM,YAAY,CAAC,CAAC;IAC5C,CAAC;CACJ;AAED,kBAAe,IAAI,WAAW,EAAE,CAAC"}

View File

@ -0,0 +1,14 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const api_1 = __importDefault(require("../api"));
const _ServiceBase_1 = __importDefault(require("./_ServiceBase"));
class TaskService extends _ServiceBase_1.default {
async getTasks() {
return await api_1.default.get('/task');
}
}
exports.default = new TaskService();
//# sourceMappingURL=TaskService.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../src/service/TaskService.ts"],"names":[],"mappings":";;;;;AAAA,iDAAyB;AAEzB,kEAA0C;AAE1C,MAAM,WAAY,SAAQ,sBAAY;IAClC,KAAK,CAAC,QAAQ;QACV,OAAO,MAAM,aAAG,CAAC,GAAG,CAAmB,OAAO,CAAC,CAAC;IACpD,CAAC;CACJ;AAED,kBAAe,IAAI,WAAW,EAAE,CAAC"}

View File

@ -0,0 +1,13 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const api_1 = __importDefault(require("../api"));
class _ServiceBase {
setToken(token) {
api_1.default.setToken(token);
}
}
exports.default = _ServiceBase;
//# sourceMappingURL=_ServiceBase.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"_ServiceBase.js","sourceRoot":"","sources":["../../src/service/_ServiceBase.ts"],"names":[],"mappings":";;;;;AAAA,iDAAyB;AAEzB,MAAM,YAAY;IACd,QAAQ,CAAC,KAAa;QAClB,aAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;CACJ;AAED,kBAAe,YAAY,CAAC"}