@mathrunet/masamune 2.15.0 → 3.0.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 +18 -0
- package/dist/functions/consumable_verify_android.js +23 -7
- package/dist/functions/consumable_verify_android.js.map +1 -1
- package/dist/functions/consumable_verify_ios.js +23 -7
- package/dist/functions/consumable_verify_ios.js.map +1 -1
- package/dist/functions/delete_documents.js +6 -1
- package/dist/functions/delete_documents.js.map +1 -1
- package/dist/functions/nonconsumable_verify_android.js +22 -6
- package/dist/functions/nonconsumable_verify_android.js.map +1 -1
- package/dist/functions/nonconsumable_verify_ios.js +22 -6
- package/dist/functions/nonconsumable_verify_ios.js.map +1 -1
- package/dist/functions/purchase_webhook_android.js +143 -129
- package/dist/functions/purchase_webhook_android.js.map +1 -1
- package/dist/functions/purchase_webhook_ios.js +81 -67
- package/dist/functions/purchase_webhook_ios.js.map +1 -1
- package/dist/functions/scheduler.js +61 -48
- package/dist/functions/scheduler.js.map +1 -1
- package/dist/functions/send_notification.js +42 -16
- package/dist/functions/send_notification.js.map +1 -1
- package/dist/functions/stripe.js +935 -921
- package/dist/functions/stripe.js.map +1 -1
- package/dist/functions/stripe_webhook.js +371 -357
- package/dist/functions/stripe_webhook.js.map +1 -1
- package/dist/functions/stripe_webhook_connect.js +64 -51
- package/dist/functions/stripe_webhook_connect.js.map +1 -1
- package/dist/functions/stripe_webhook_secure.js +63 -50
- package/dist/functions/stripe_webhook_secure.js.map +1 -1
- package/dist/functions/subscription_verify_android.js +31 -15
- package/dist/functions/subscription_verify_android.js.map +1 -1
- package/dist/functions/subscription_verify_ios.js +31 -15
- package/dist/functions/subscription_verify_ios.js.map +1 -1
- package/dist/functions/test.js +8 -4
- package/dist/functions/test.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/functions/delete_documents.d.ts +2 -1
- package/dist/lib/functions/delete_documents.js +1 -3
- package/dist/lib/functions/delete_documents.js.map +1 -1
- package/dist/lib/functions/send_notification.d.ts +2 -1
- package/dist/lib/functions/send_notification.js +3 -3
- package/dist/lib/functions/send_notification.js.map +1 -1
- package/dist/lib/functions/update_subscription.d.ts +2 -1
- package/dist/lib/functions/update_subscription.js +1 -3
- package/dist/lib/functions/update_subscription.js.map +1 -1
- package/dist/lib/functions/update_unlock.d.ts +2 -1
- package/dist/lib/functions/update_unlock.js +1 -3
- package/dist/lib/functions/update_unlock.js.map +1 -1
- package/dist/lib/functions/update_wallet.d.ts +2 -1
- package/dist/lib/functions/update_wallet.js +1 -2
- package/dist/lib/functions/update_wallet.js.map +1 -1
- package/dist/lib/schedulers/copy_document.d.ts +3 -3
- package/dist/lib/schedulers/copy_document.js +3 -3
- package/dist/lib/schedulers/copy_document.js.map +1 -1
- package/dist/lib/schedulers/delete_documents.d.ts +3 -3
- package/dist/lib/schedulers/delete_documents.js +3 -2
- package/dist/lib/schedulers/delete_documents.js.map +1 -1
- package/dist/lib/schedulers/notification.d.ts +3 -3
- package/dist/lib/schedulers/notification.js +3 -2
- package/dist/lib/schedulers/notification.js.map +1 -1
- package/dist/lib/src/firebase_loader.d.ts +30 -0
- package/dist/lib/src/firebase_loader.js +77 -0
- package/dist/lib/src/firebase_loader.js.map +1 -0
- package/dist/lib/src/functions_base.d.ts +12 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## [3.0.1](https://github.com/mathrunet/node_masamune/compare/v3.0.0...v3.0.1) (2025-07-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### fix
|
|
5
|
+
|
|
6
|
+
* Export the Loader. ([5050efe](https://github.com/mathrunet/node_masamune/commit/5050efe82895649103a68f8108e82173017c23c8))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# [3.0.0](https://github.com/mathrunet/node_masamune/compare/v2.15.0...v3.0.0) (2025-07-11)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### feat
|
|
14
|
+
|
|
15
|
+
* Supports multiple databases. ([cff6b10](https://github.com/mathrunet/node_masamune/commit/cff6b10b4bce122252fd3936f1e11d0a23d50c9c))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
1
19
|
# [2.15.0](https://github.com/mathrunet/node_masamune/compare/v2.14.1...v2.15.0) (2025-07-05)
|
|
2
20
|
|
|
3
21
|
|
|
@@ -45,6 +45,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
const functions = __importStar(require("firebase-functions/v2"));
|
|
46
46
|
const verifier = __importStar(require("../lib/functions/verify_android"));
|
|
47
47
|
const updater = __importStar(require("../lib/functions/update_wallet"));
|
|
48
|
+
const firebase_loader_1 = require("../lib/src/firebase_loader");
|
|
48
49
|
/**
|
|
49
50
|
* Performs a consumption-type in-app purchase. The value of the field in the document specified in [path] is added to [value].
|
|
50
51
|
*
|
|
@@ -118,7 +119,7 @@ module.exports = (regions, options, data) => {
|
|
|
118
119
|
enforceAppCheck: (_c = options.enforceAppCheck) !== null && _c !== void 0 ? _c : undefined,
|
|
119
120
|
consumeAppCheckToken: (_d = options.consumeAppCheckToken) !== null && _d !== void 0 ? _d : undefined,
|
|
120
121
|
}, (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
|
-
var _a, _b;
|
|
122
|
+
var _a, _b, _c;
|
|
122
123
|
try {
|
|
123
124
|
/* ==== Android検証ここから ==== */
|
|
124
125
|
const res = yield verifier.verifyAndroid({
|
|
@@ -138,12 +139,27 @@ module.exports = (regions, options, data) => {
|
|
|
138
139
|
return res;
|
|
139
140
|
}
|
|
140
141
|
/* ==== Firestoreの更新ここから ==== */
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
142
|
+
let error = null;
|
|
143
|
+
const firestoreDatabaseIds = (_c = options.firestoreDatabaseIds) !== null && _c !== void 0 ? _c : [""];
|
|
144
|
+
for (const databaseId of firestoreDatabaseIds) {
|
|
145
|
+
try {
|
|
146
|
+
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
147
|
+
yield updater.updateWallet({
|
|
148
|
+
targetDocumentFieldPath: query.data.path,
|
|
149
|
+
value: query.data.value,
|
|
150
|
+
transactionId: query.data.purchaseToken,
|
|
151
|
+
transactionData: res,
|
|
152
|
+
firestoreInstance: firestoreInstance,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
error = err;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (error) {
|
|
160
|
+
console.error(error);
|
|
161
|
+
throw new functions.https.HttpsError("unknown", "Unknown error.");
|
|
162
|
+
}
|
|
147
163
|
/* ==== ここまでFirestoreの更新 ==== */
|
|
148
164
|
return res;
|
|
149
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumable_verify_android.js","sourceRoot":"","sources":["../../src/functions/consumable_verify_android.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,0EAA4D;AAC5D,wEAA0D;
|
|
1
|
+
{"version":3,"file":"consumable_verify_android.js","sourceRoot":"","sources":["../../src/functions/consumable_verify_android.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,0EAA4D;AAC5D,wEAA0D;AAE1D,gEAA6D;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,MAAM,CAAC,OAAO,GAAG,CACb,OAAiB,EACjB,OAA6B,EAC7B,IAA4B,EAC9B,EAAE;;IAAC,OAAA,SAAS,CAAC,KAAK,CAAC,MAAM,CACvB;QACI,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,OAAO;QACjC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,mCAAI,SAAS;QACpD,eAAe,EAAE,MAAA,OAAO,CAAC,eAAe,mCAAI,SAAS;QACrD,oBAAoB,EAAE,MAAA,OAAO,CAAC,oBAAoB,mCAAI,SAAS;KAClE,EACD,CAAO,KAAK,EAAE,EAAE;;QACZ,IAAI,CAAC;YACD,6BAA6B;YAC7B,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC;gBACrC,IAAI,EAAE,UAAU;gBAChB,mBAAmB,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,mCAAI,EAAE;gBAC5E,wBAAwB,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,2CAA2C,mCAAI,EAAE;gBACvF,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;gBACnC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;gBAC/B,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa;aAC1C,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;YAChF,CAAC;YACD,6BAA6B;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAChC,kBAAkB,EAAE,8CAA8C,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CACjH,CAAC;gBACF,OAAO,GAAG,CAAC;YACf,CAAC;YACD,gCAAgC;YAChC,IAAI,KAAK,GAAe,IAAI,CAAC;YAC7B,MAAM,oBAAoB,GAAG,MAAA,OAAO,CAAC,oBAAoB,mCAAI,CAAC,EAAE,CAAC,CAAC;YAClE,KAAK,MAAM,UAAU,IAAI,oBAAoB,EAAE,CAAC;gBAC5C,IAAI,CAAC;oBACD,MAAM,iBAAiB,GAAG,IAAA,iCAAe,EAAC,UAAU,CAAC,CAAC;oBACtD,MAAM,OAAO,CAAC,YAAY,CAAC;wBACvB,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;wBACxC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;wBACvB,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa;wBACvC,eAAe,EAAE,GAAG;wBACpB,iBAAiB,EAAE,iBAAiB;qBACvC,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,KAAK,GAAG,GAAG,CAAC;gBAChB,CAAC;YACL,CAAC;YACD,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YACtE,CAAC;YACD,gCAAgC;YAChC,OAAO,GAAG,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAA,CACJ,CAAA;CAAA,CAAC"}
|
|
@@ -45,6 +45,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
const functions = __importStar(require("firebase-functions/v2"));
|
|
46
46
|
const verifier = __importStar(require("../lib/functions/verify_ios"));
|
|
47
47
|
const updater = __importStar(require("../lib/functions/update_wallet"));
|
|
48
|
+
const firebase_loader_1 = require("../lib/src/firebase_loader");
|
|
48
49
|
/**
|
|
49
50
|
* Performs a consumption-type in-app purchase. The value of the field in the document specified in [path] is added to [value].
|
|
50
51
|
*
|
|
@@ -83,7 +84,7 @@ module.exports = (regions, options, data) => {
|
|
|
83
84
|
enforceAppCheck: (_c = options.enforceAppCheck) !== null && _c !== void 0 ? _c : undefined,
|
|
84
85
|
consumeAppCheckToken: (_d = options.consumeAppCheckToken) !== null && _d !== void 0 ? _d : undefined,
|
|
85
86
|
}, (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
86
|
-
var _a;
|
|
87
|
+
var _a, _b;
|
|
87
88
|
try {
|
|
88
89
|
/* ==== IOS検証ここから ==== */
|
|
89
90
|
const res = yield verifier.verifyIOS({
|
|
@@ -100,12 +101,27 @@ module.exports = (regions, options, data) => {
|
|
|
100
101
|
throw new functions.https.HttpsError("invalid-argument", `The required parameters are not set. path: ${query.data.path} value: ${query.data.value}`);
|
|
101
102
|
}
|
|
102
103
|
/* ==== Firestoreの更新ここから ==== */
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
104
|
+
let error = null;
|
|
105
|
+
const firestoreDatabaseIds = (_b = options.firestoreDatabaseIds) !== null && _b !== void 0 ? _b : [""];
|
|
106
|
+
for (const databaseId of firestoreDatabaseIds) {
|
|
107
|
+
try {
|
|
108
|
+
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
109
|
+
yield updater.updateWallet({
|
|
110
|
+
targetDocumentFieldPath: query.data.path,
|
|
111
|
+
value: query.data.value,
|
|
112
|
+
transactionId: info[info.length - 1]["original_transaction_id"],
|
|
113
|
+
transactionData: info[info.length - 1],
|
|
114
|
+
firestoreInstance: firestoreInstance,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
error = err;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (error) {
|
|
122
|
+
console.error(error);
|
|
123
|
+
throw new functions.https.HttpsError("unknown", "Unknown error.");
|
|
124
|
+
}
|
|
109
125
|
/* ==== ここまでFirestoreの更新 ==== */
|
|
110
126
|
return res;
|
|
111
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumable_verify_ios.js","sourceRoot":"","sources":["../../src/functions/consumable_verify_ios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,sEAAwD;AACxD,wEAA0D;
|
|
1
|
+
{"version":3,"file":"consumable_verify_ios.js","sourceRoot":"","sources":["../../src/functions/consumable_verify_ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
const functions = __importStar(require("firebase-functions/v2"));
|
|
46
46
|
const delete_documents = __importStar(require("../lib/functions/delete_documents"));
|
|
47
|
+
const firebase_loader_1 = require("../lib/src/firebase_loader");
|
|
47
48
|
/**
|
|
48
49
|
* When a document is deleted, the related collections should be deleted together.
|
|
49
50
|
*
|
|
@@ -63,6 +64,7 @@ module.exports = (regions, options, data) => {
|
|
|
63
64
|
}, (event) => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
65
|
var _a;
|
|
65
66
|
try {
|
|
67
|
+
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(event.database);
|
|
66
68
|
const docPath = (_a = event.data) === null || _a === void 0 ? void 0 : _a.ref.path;
|
|
67
69
|
if (!docPath) {
|
|
68
70
|
return;
|
|
@@ -75,7 +77,10 @@ module.exports = (regions, options, data) => {
|
|
|
75
77
|
if (!collectionPath) {
|
|
76
78
|
return;
|
|
77
79
|
}
|
|
78
|
-
yield delete_documents.deleteDocuments({
|
|
80
|
+
yield delete_documents.deleteDocuments({
|
|
81
|
+
collectionPath: collectionPath,
|
|
82
|
+
firestoreInstance: firestoreInstance,
|
|
83
|
+
});
|
|
79
84
|
}
|
|
80
85
|
catch (err) {
|
|
81
86
|
console.log(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete_documents.js","sourceRoot":"","sources":["../../src/functions/delete_documents.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAEnD,oFAAsE;
|
|
1
|
+
{"version":3,"file":"delete_documents.js","sourceRoot":"","sources":["../../src/functions/delete_documents.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAEnD,oFAAsE;AACtE,gEAA6D;AAE7D;;;;GAIG;AACH,MAAM,CAAC,OAAO,GAAG,CACb,OAAiB,EACjB,OAAqC,EACrC,IAA4B,EAC9B,EAAE;;IAAC,OAAA,SAAS,CAAC,SAAS,CAAC,iBAAiB,CACtC;QACI,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,UAAU;QACnC,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,OAAO,CAAC,CAAC,CAAC;QACpC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,MAAA,OAAO,CAAC,cAAc,mCAAI,SAAS;KACtD,EACD,CAAO,KAAK,EAAE,EAAE;;QACZ,IAAI,CAAC;YACD,MAAM,iBAAiB,GAAG,IAAA,iCAAe,EAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,MAAA,KAAK,CAAC,IAAI,0CAAE,GAAG,CAAC,IAAI,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,OAAO;YACX,CAAC;YACD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClB,OAAO;YACX,CAAC;YACD,MAAM,gBAAgB,CAAC,eAAe,CAAC;gBACnC,cAAc,EAAE,cAAc;gBAC9B,iBAAiB,EAAE,iBAAiB;aACvC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAA,CACJ,CAAA;CAAA,CAAC"}
|
|
@@ -45,6 +45,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
const functions = __importStar(require("firebase-functions/v2"));
|
|
46
46
|
const verifier = __importStar(require("../lib/functions/verify_android"));
|
|
47
47
|
const updater = __importStar(require("../lib/functions/update_unlock"));
|
|
48
|
+
const firebase_loader_1 = require("../lib/src/firebase_loader");
|
|
48
49
|
/**
|
|
49
50
|
* Performs non-consumable in-app purchases. Unlock by setting the value of the field in the document specified in [path] to `true`.
|
|
50
51
|
*
|
|
@@ -113,7 +114,7 @@ module.exports = (regions, options, data) => {
|
|
|
113
114
|
enforceAppCheck: (_c = options.enforceAppCheck) !== null && _c !== void 0 ? _c : undefined,
|
|
114
115
|
consumeAppCheckToken: (_d = options.consumeAppCheckToken) !== null && _d !== void 0 ? _d : undefined,
|
|
115
116
|
}, (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
116
|
-
var _a, _b;
|
|
117
|
+
var _a, _b, _c;
|
|
117
118
|
try {
|
|
118
119
|
/* ==== Android検証ここから ==== */
|
|
119
120
|
const res = yield verifier.verifyAndroid({
|
|
@@ -133,11 +134,26 @@ module.exports = (regions, options, data) => {
|
|
|
133
134
|
return res;
|
|
134
135
|
}
|
|
135
136
|
/* ==== Firestoreの更新ここから ==== */
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
let error = null;
|
|
138
|
+
const firestoreDatabaseIds = (_c = options.firestoreDatabaseIds) !== null && _c !== void 0 ? _c : [""];
|
|
139
|
+
for (const databaseId of firestoreDatabaseIds) {
|
|
140
|
+
try {
|
|
141
|
+
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
142
|
+
yield updater.updateUnlock({
|
|
143
|
+
targetDocumentFieldPath: query.data.path,
|
|
144
|
+
transactionId: query.data.purchaseToken,
|
|
145
|
+
transactionData: res,
|
|
146
|
+
firestoreInstance: firestoreInstance,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
error = err;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (error) {
|
|
154
|
+
console.error(error);
|
|
155
|
+
throw new functions.https.HttpsError("unknown", "Unknown error.");
|
|
156
|
+
}
|
|
141
157
|
/* ==== ここまでFirestoreの更新 ==== */
|
|
142
158
|
return res;
|
|
143
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nonconsumable_verify_android.js","sourceRoot":"","sources":["../../src/functions/nonconsumable_verify_android.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,0EAA4D;AAC5D,wEAA0D;
|
|
1
|
+
{"version":3,"file":"nonconsumable_verify_android.js","sourceRoot":"","sources":["../../src/functions/nonconsumable_verify_android.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
const functions = __importStar(require("firebase-functions/v2"));
|
|
46
46
|
const verifier = __importStar(require("../lib/functions/verify_ios"));
|
|
47
47
|
const updater = __importStar(require("../lib/functions/update_unlock"));
|
|
48
|
+
const firebase_loader_1 = require("../lib/src/firebase_loader");
|
|
48
49
|
/**
|
|
49
50
|
* Performs non-consumable in-app purchases. Unlock by setting the value of the field in the document specified in [path] to `true`.
|
|
50
51
|
*
|
|
@@ -78,7 +79,7 @@ module.exports = (regions, options, data) => {
|
|
|
78
79
|
enforceAppCheck: (_c = options.enforceAppCheck) !== null && _c !== void 0 ? _c : undefined,
|
|
79
80
|
consumeAppCheckToken: (_d = options.consumeAppCheckToken) !== null && _d !== void 0 ? _d : undefined,
|
|
80
81
|
}, (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
81
|
-
var _a;
|
|
82
|
+
var _a, _b;
|
|
82
83
|
try {
|
|
83
84
|
/* ==== IOS検証ここから ==== */
|
|
84
85
|
const res = yield verifier.verifyIOS({
|
|
@@ -95,11 +96,26 @@ module.exports = (regions, options, data) => {
|
|
|
95
96
|
throw new functions.https.HttpsError("invalid-argument", `The required parameters are not set. path: ${query.data.path}`);
|
|
96
97
|
}
|
|
97
98
|
/* ==== Firestoreの更新ここから ==== */
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
let error = null;
|
|
100
|
+
const firestoreDatabaseIds = (_b = options.firestoreDatabaseIds) !== null && _b !== void 0 ? _b : [""];
|
|
101
|
+
for (const databaseId of firestoreDatabaseIds) {
|
|
102
|
+
try {
|
|
103
|
+
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
104
|
+
yield updater.updateUnlock({
|
|
105
|
+
targetDocumentFieldPath: query.data.path,
|
|
106
|
+
transactionId: info[info.length - 1]["original_transaction_id"],
|
|
107
|
+
transactionData: info[info.length - 1],
|
|
108
|
+
firestoreInstance: firestoreInstance,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
error = err;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (error) {
|
|
116
|
+
console.error(error);
|
|
117
|
+
throw new functions.https.HttpsError("unknown", "Unknown error.");
|
|
118
|
+
}
|
|
103
119
|
/* ==== ここまでFirestoreの更新 ==== */
|
|
104
120
|
return res;
|
|
105
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nonconsumable_verify_ios.js","sourceRoot":"","sources":["../../src/functions/nonconsumable_verify_ios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,sEAAwD;AACxD,wEAA0D;
|
|
1
|
+
{"version":3,"file":"nonconsumable_verify_ios.js","sourceRoot":"","sources":["../../src/functions/nonconsumable_verify_ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,9 +43,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
const functions = __importStar(require("firebase-functions/v2"));
|
|
46
|
-
const admin = __importStar(require("firebase-admin"));
|
|
47
46
|
const verifier = __importStar(require("../lib/functions/verify_android"));
|
|
48
47
|
const utils = __importStar(require("../lib/utils"));
|
|
48
|
+
const firebase_loader_1 = require("../lib/src/firebase_loader");
|
|
49
49
|
/**
|
|
50
50
|
* This is a webhook endpoint for Android. you can create a `purchasing` topic in GCP's pub/sub and set the principal to "google-play-developer-notifications@system.gserviceaccount.com" to receive notifications.
|
|
51
51
|
*
|
|
@@ -98,153 +98,167 @@ module.exports = (regions, options, data) => {
|
|
|
98
98
|
maxInstances: options.maxInstances,
|
|
99
99
|
serviceAccount: (_c = options.serviceAccount) !== null && _c !== void 0 ? _c : undefined,
|
|
100
100
|
}, (message) => __awaiter(void 0, void 0, void 0, function* () {
|
|
101
|
+
var _a;
|
|
101
102
|
try {
|
|
102
103
|
const messageBody = message.data.message.data ?
|
|
103
104
|
JSON.parse(Buffer.from(message.data.message.data, "base64").toString()) :
|
|
104
105
|
null;
|
|
105
106
|
if (messageBody) {
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (!purchaseToken || !packageName || !subscriptionId) {
|
|
117
|
-
throw new Error("The data is invalid.");
|
|
118
|
-
}
|
|
119
|
-
const res = yield verifier.verifyAndroid({
|
|
120
|
-
type: "subscriptions",
|
|
121
|
-
serviceAccountEmail: androidServiceAccountEmail,
|
|
122
|
-
serviceAccountPrivateKey: androidServiceAccountPrivateKey,
|
|
123
|
-
packageName: packageName,
|
|
124
|
-
productId: subscriptionId,
|
|
125
|
-
purchaseToken: purchaseToken,
|
|
126
|
-
});
|
|
127
|
-
const search = yield firestoreInstance.collection(targetPath).where("token", "==", purchaseToken).get();
|
|
128
|
-
if (search.empty) {
|
|
129
|
-
console.error("The purchased data is not found.");
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
const doc = search.docs[0];
|
|
133
|
-
const data = doc === null || doc === void 0 ? void 0 : doc.data();
|
|
134
|
-
const path = doc === null || doc === void 0 ? void 0 : doc.ref.path;
|
|
135
|
-
if (!data) {
|
|
136
|
-
console.error("The purchased data is not found.");
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
const user = data["userId"];
|
|
140
|
-
console.log(`notificationType: ${notificationType}`);
|
|
141
|
-
switch (notificationType) {
|
|
142
|
-
case SubscriptionNotificationTypes.SUBSCRIPTION_RECOVERED:
|
|
143
|
-
case SubscriptionNotificationTypes.SUBSCRIPTION_RESTARTED:
|
|
144
|
-
case SubscriptionNotificationTypes.SUBSCRIPTION_RENEWED:
|
|
145
|
-
case SubscriptionNotificationTypes.SUBSCRIPTION_IN_GRACE_PERIOD: {
|
|
146
|
-
for (const key in res) {
|
|
147
|
-
if (!data[key]) {
|
|
148
|
-
continue;
|
|
149
|
-
}
|
|
150
|
-
data[key] = utils.parse(res[key]);
|
|
151
|
-
}
|
|
152
|
-
data["expired"] = false;
|
|
153
|
-
data["paused"] = false;
|
|
154
|
-
data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
|
|
155
|
-
data["orderId"] = res["orderId"];
|
|
156
|
-
data["@time"] = new Date();
|
|
157
|
-
yield firestoreInstance.doc(path).set(data);
|
|
158
|
-
console.log(`Updated subscription: ${data["productId"]}:${user}`);
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
case SubscriptionNotificationTypes.SUBSCRIPTION_DEFERRED:
|
|
162
|
-
case SubscriptionNotificationTypes.SUBSCRIPTION_PRICE_CHANGE_CONFIRMED:
|
|
163
|
-
case SubscriptionNotificationTypes.SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED: {
|
|
164
|
-
for (const key in res) {
|
|
165
|
-
if (!data[key]) {
|
|
166
|
-
continue;
|
|
167
|
-
}
|
|
168
|
-
data[key] = utils.parse(res[key]);
|
|
169
|
-
}
|
|
170
|
-
data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
|
|
171
|
-
data["orderId"] = res["orderId"];
|
|
172
|
-
data["@time"] = new Date();
|
|
173
|
-
yield firestoreInstance.doc(path).set(data);
|
|
174
|
-
console.log(`Updated subscription: ${data["productId"]}:${user}`);
|
|
175
|
-
break;
|
|
107
|
+
let error = null;
|
|
108
|
+
const firestoreDatabaseIds = (_a = options.firestoreDatabaseIds) !== null && _a !== void 0 ? _a : [""];
|
|
109
|
+
for (const databaseId of firestoreDatabaseIds) {
|
|
110
|
+
try {
|
|
111
|
+
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
112
|
+
const targetPath = process.env.PURCHASE_SUBSCRIPTIONPATH;
|
|
113
|
+
const androidServiceAccountEmail = process.env.PURCHASE_ANDROID_SERVICEACCOUNT_EMAIL;
|
|
114
|
+
const androidServiceAccountPrivateKey = process.env.PURCHASE_ANDROID_SERVICEACCOUNT_PRIVATE_KEY;
|
|
115
|
+
if (!androidServiceAccountEmail || !androidServiceAccountPrivateKey || !targetPath) {
|
|
116
|
+
throw new Error("The data is invalid.");
|
|
176
117
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
data[key] = utils.parse(res[key]);
|
|
118
|
+
const { subscriptionNotification, packageName, } = messageBody;
|
|
119
|
+
if (subscriptionNotification) {
|
|
120
|
+
const { notificationType, purchaseToken, subscriptionId, } = subscriptionNotification;
|
|
121
|
+
if (!purchaseToken || !packageName || !subscriptionId) {
|
|
122
|
+
throw new Error("The data is invalid.");
|
|
183
123
|
}
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
124
|
+
const res = yield verifier.verifyAndroid({
|
|
125
|
+
type: "subscriptions",
|
|
126
|
+
serviceAccountEmail: androidServiceAccountEmail,
|
|
127
|
+
serviceAccountPrivateKey: androidServiceAccountPrivateKey,
|
|
128
|
+
packageName: packageName,
|
|
129
|
+
productId: subscriptionId,
|
|
130
|
+
purchaseToken: purchaseToken,
|
|
131
|
+
});
|
|
132
|
+
const search = yield firestoreInstance.collection(targetPath).where("token", "==", purchaseToken).get();
|
|
133
|
+
if (search.empty) {
|
|
134
|
+
console.error("The purchased data is not found.");
|
|
135
|
+
return;
|
|
193
136
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
console.
|
|
137
|
+
const doc = search.docs[0];
|
|
138
|
+
const data = doc === null || doc === void 0 ? void 0 : doc.data();
|
|
139
|
+
const path = doc === null || doc === void 0 ? void 0 : doc.ref.path;
|
|
140
|
+
if (!data) {
|
|
141
|
+
console.error("The purchased data is not found.");
|
|
142
|
+
return;
|
|
199
143
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
144
|
+
const user = data["userId"];
|
|
145
|
+
console.log(`notificationType: ${notificationType}`);
|
|
146
|
+
switch (notificationType) {
|
|
147
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_RECOVERED:
|
|
148
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_RESTARTED:
|
|
149
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_RENEWED:
|
|
150
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_IN_GRACE_PERIOD: {
|
|
151
|
+
for (const key in res) {
|
|
152
|
+
if (!data[key]) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
data[key] = utils.parse(res[key]);
|
|
156
|
+
}
|
|
157
|
+
data["expired"] = false;
|
|
158
|
+
data["paused"] = false;
|
|
159
|
+
data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
|
|
160
|
+
data["orderId"] = res["orderId"];
|
|
161
|
+
data["@time"] = new Date();
|
|
162
|
+
yield firestoreInstance.doc(path).set(data);
|
|
163
|
+
console.log(`Updated subscription: ${data["productId"]}:${user}`);
|
|
164
|
+
break;
|
|
209
165
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
166
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_DEFERRED:
|
|
167
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_PRICE_CHANGE_CONFIRMED:
|
|
168
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED: {
|
|
169
|
+
for (const key in res) {
|
|
170
|
+
if (!data[key]) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
data[key] = utils.parse(res[key]);
|
|
174
|
+
}
|
|
175
|
+
data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
|
|
176
|
+
data["orderId"] = res["orderId"];
|
|
177
|
+
data["@time"] = new Date();
|
|
178
|
+
yield firestoreInstance.doc(path).set(data);
|
|
179
|
+
console.log(`Updated subscription: ${data["productId"]}:${user}`);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_CANCELED: {
|
|
183
|
+
for (const key in res) {
|
|
184
|
+
if (!data[key]) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
data[key] = utils.parse(res[key]);
|
|
188
|
+
}
|
|
189
|
+
const time = new Date().getTime();
|
|
190
|
+
const expiryTimeMillis = data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
|
|
191
|
+
data["orderId"] = res["orderId"];
|
|
192
|
+
data["@time"] = new Date();
|
|
193
|
+
if (expiryTimeMillis <= time) {
|
|
194
|
+
data["expired"] = true;
|
|
195
|
+
data["paused"] = false;
|
|
196
|
+
yield firestoreInstance.doc(path).set(data);
|
|
197
|
+
console.log(`Expired subscription: ${data["productId"]}:${user}`);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
data["expired"] = false;
|
|
201
|
+
data["paused"] = false;
|
|
202
|
+
yield firestoreInstance.doc(path).set(data);
|
|
203
|
+
console.log(`Updated subscription: ${data["productId"]}:${user}`);
|
|
204
|
+
}
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_REVOKED:
|
|
208
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_EXPIRED:
|
|
209
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_PAUSED:
|
|
210
|
+
case SubscriptionNotificationTypes.SUBSCRIPTION_ON_HOLD: {
|
|
211
|
+
for (const key in res) {
|
|
212
|
+
if (!data[key]) {
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
data[key] = utils.parse(res[key]);
|
|
216
|
+
}
|
|
217
|
+
data["expired"] = true;
|
|
218
|
+
if (notificationType === SubscriptionNotificationTypes.SUBSCRIPTION_PAUSED || notificationType === SubscriptionNotificationTypes.SUBSCRIPTION_ON_HOLD) {
|
|
219
|
+
data["paused"] = true;
|
|
220
|
+
yield firestoreInstance.doc(path).set(data);
|
|
221
|
+
console.log(`Paused subscription: ${data["productId"]}:${user}`);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
data["paused"] = false;
|
|
225
|
+
yield firestoreInstance.doc(path).set(data);
|
|
226
|
+
console.log(`Expired subscription: ${data["productId"]}:${user}`);
|
|
227
|
+
}
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
default:
|
|
231
|
+
break;
|
|
217
232
|
}
|
|
218
|
-
|
|
233
|
+
if (res["linkedPurchaseToken"]) {
|
|
234
|
+
const linkedPurchaseToken = res["linkedPurchaseToken"];
|
|
235
|
+
const search = yield firestoreInstance.collection(targetPath).where("token", "==", linkedPurchaseToken).get();
|
|
236
|
+
if (search.empty) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const doc = search.docs[0];
|
|
240
|
+
const data = doc === null || doc === void 0 ? void 0 : doc.data();
|
|
241
|
+
const path = doc === null || doc === void 0 ? void 0 : doc.ref.path;
|
|
242
|
+
if (!data) {
|
|
243
|
+
throw new Error("The purchased data is not found.");
|
|
244
|
+
}
|
|
245
|
+
const user = data["userId"];
|
|
246
|
+
data["expired"] = true;
|
|
219
247
|
data["paused"] = false;
|
|
248
|
+
data["@time"] = new Date();
|
|
220
249
|
yield firestoreInstance.doc(path).set(data);
|
|
221
250
|
console.log(`Expired subscription: ${data["productId"]}:${user}`);
|
|
222
251
|
}
|
|
223
|
-
break;
|
|
224
252
|
}
|
|
225
|
-
default:
|
|
226
|
-
break;
|
|
227
253
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
const search = yield firestoreInstance.collection(targetPath).where("token", "==", linkedPurchaseToken).get();
|
|
231
|
-
if (search.empty) {
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
const doc = search.docs[0];
|
|
235
|
-
const data = doc === null || doc === void 0 ? void 0 : doc.data();
|
|
236
|
-
const path = doc === null || doc === void 0 ? void 0 : doc.ref.path;
|
|
237
|
-
if (!data) {
|
|
238
|
-
throw new Error("The purchased data is not found.");
|
|
239
|
-
}
|
|
240
|
-
const user = data["userId"];
|
|
241
|
-
data["expired"] = true;
|
|
242
|
-
data["paused"] = false;
|
|
243
|
-
data["@time"] = new Date();
|
|
244
|
-
yield firestoreInstance.doc(path).set(data);
|
|
245
|
-
console.log(`Expired subscription: ${data["productId"]}:${user}`);
|
|
254
|
+
catch (err) {
|
|
255
|
+
error = err;
|
|
246
256
|
}
|
|
247
257
|
}
|
|
258
|
+
if (error) {
|
|
259
|
+
console.error(error);
|
|
260
|
+
throw new functions.https.HttpsError("unknown", "Unknown error.");
|
|
261
|
+
}
|
|
248
262
|
}
|
|
249
263
|
}
|
|
250
264
|
catch (err) {
|