@mathrunet/masamune 2.15.0 → 3.0.0

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/functions/consumable_verify_android.js +23 -7
  3. package/dist/functions/consumable_verify_android.js.map +1 -1
  4. package/dist/functions/consumable_verify_ios.js +23 -7
  5. package/dist/functions/consumable_verify_ios.js.map +1 -1
  6. package/dist/functions/delete_documents.js +6 -1
  7. package/dist/functions/delete_documents.js.map +1 -1
  8. package/dist/functions/nonconsumable_verify_android.js +22 -6
  9. package/dist/functions/nonconsumable_verify_android.js.map +1 -1
  10. package/dist/functions/nonconsumable_verify_ios.js +22 -6
  11. package/dist/functions/nonconsumable_verify_ios.js.map +1 -1
  12. package/dist/functions/purchase_webhook_android.js +143 -129
  13. package/dist/functions/purchase_webhook_android.js.map +1 -1
  14. package/dist/functions/purchase_webhook_ios.js +81 -67
  15. package/dist/functions/purchase_webhook_ios.js.map +1 -1
  16. package/dist/functions/scheduler.js +61 -48
  17. package/dist/functions/scheduler.js.map +1 -1
  18. package/dist/functions/send_notification.js +42 -16
  19. package/dist/functions/send_notification.js.map +1 -1
  20. package/dist/functions/stripe.js +935 -921
  21. package/dist/functions/stripe.js.map +1 -1
  22. package/dist/functions/stripe_webhook.js +371 -357
  23. package/dist/functions/stripe_webhook.js.map +1 -1
  24. package/dist/functions/stripe_webhook_connect.js +64 -51
  25. package/dist/functions/stripe_webhook_connect.js.map +1 -1
  26. package/dist/functions/stripe_webhook_secure.js +63 -50
  27. package/dist/functions/stripe_webhook_secure.js.map +1 -1
  28. package/dist/functions/subscription_verify_android.js +31 -15
  29. package/dist/functions/subscription_verify_android.js.map +1 -1
  30. package/dist/functions/subscription_verify_ios.js +31 -15
  31. package/dist/functions/subscription_verify_ios.js.map +1 -1
  32. package/dist/functions/test.js +8 -4
  33. package/dist/functions/test.js.map +1 -1
  34. package/dist/lib/functions/delete_documents.d.ts +2 -1
  35. package/dist/lib/functions/delete_documents.js +1 -3
  36. package/dist/lib/functions/delete_documents.js.map +1 -1
  37. package/dist/lib/functions/send_notification.d.ts +2 -1
  38. package/dist/lib/functions/send_notification.js +3 -3
  39. package/dist/lib/functions/send_notification.js.map +1 -1
  40. package/dist/lib/functions/update_subscription.d.ts +2 -1
  41. package/dist/lib/functions/update_subscription.js +1 -3
  42. package/dist/lib/functions/update_subscription.js.map +1 -1
  43. package/dist/lib/functions/update_unlock.d.ts +2 -1
  44. package/dist/lib/functions/update_unlock.js +1 -3
  45. package/dist/lib/functions/update_unlock.js.map +1 -1
  46. package/dist/lib/functions/update_wallet.d.ts +2 -1
  47. package/dist/lib/functions/update_wallet.js +1 -2
  48. package/dist/lib/functions/update_wallet.js.map +1 -1
  49. package/dist/lib/schedulers/copy_document.d.ts +3 -3
  50. package/dist/lib/schedulers/copy_document.js +3 -3
  51. package/dist/lib/schedulers/copy_document.js.map +1 -1
  52. package/dist/lib/schedulers/delete_documents.d.ts +3 -3
  53. package/dist/lib/schedulers/delete_documents.js +3 -2
  54. package/dist/lib/schedulers/delete_documents.js.map +1 -1
  55. package/dist/lib/schedulers/notification.d.ts +3 -3
  56. package/dist/lib/schedulers/notification.js +3 -2
  57. package/dist/lib/schedulers/notification.js.map +1 -1
  58. package/dist/lib/src/firebase_loader.d.ts +30 -0
  59. package/dist/lib/src/firebase_loader.js +77 -0
  60. package/dist/lib/src/firebase_loader.js.map +1 -0
  61. package/dist/lib/src/functions_base.d.ts +12 -0
  62. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # [3.0.0](https://github.com/mathrunet/node_masamune/compare/v2.15.0...v3.0.0) (2025-07-11)
2
+
3
+
4
+ ### feat
5
+
6
+ * Supports multiple databases. ([cff6b10](https://github.com/mathrunet/node_masamune/commit/cff6b10b4bce122252fd3936f1e11d0a23d50c9c))
7
+
8
+
9
+
1
10
  # [2.15.0](https://github.com/mathrunet/node_masamune/compare/v2.14.1...v2.15.0) (2025-07-05)
2
11
 
3
12
 
@@ -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
- yield updater.updateWallet({
142
- targetDocumentFieldPath: query.data.path,
143
- value: query.data.value,
144
- transactionId: query.data.purchaseToken,
145
- transactionData: res,
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;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,MAAM,OAAO,CAAC,YAAY,CAAC;gBACvB,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACxC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;gBACvB,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa;gBACvC,eAAe,EAAE,GAAG;aACvB,CAAC,CAAC;YACH,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"}
1
+ {"version":3,"file":"consumable_verify_android.js","sourceRoot":"","sources":["../../src/functions/consumable_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_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
- yield updater.updateWallet({
104
- targetDocumentFieldPath: query.data.path,
105
- value: query.data.value,
106
- transactionId: info[info.length - 1]["original_transaction_id"],
107
- transactionData: info[info.length - 1],
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;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;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,yBAAyB;YACzB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;gBACjC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;gBACnC,QAAQ,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,mCAAI,EAAE;aACxD,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;YAChF,CAAC;YACD,yBAAyB;YACzB,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACxC,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;YACN,CAAC;YACD,gCAAgC;YAChC,MAAM,OAAO,CAAC,YAAY,CAAC;gBACvB,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACxC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK;gBACvB,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC;gBAC/D,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACzC,CACA,CAAC;YACF,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"}
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({ collectionPath: collectionPath });
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;AAEtE;;;;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,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,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC;QAC/E,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"}
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
- yield updater.updateUnlock({
137
- targetDocumentFieldPath: query.data.path,
138
- transactionId: query.data.purchaseToken,
139
- transactionData: res,
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;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;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,EAAE,CAAC;gBACnB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAChC,kBAAkB,EAAE,8CAA8C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CACtF,CAAC;gBACF,OAAO,GAAG,CAAC;YACf,CAAC;YACD,gCAAgC;YAChC,MAAM,OAAO,CAAC,YAAY,CAAC;gBACvB,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACxC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa;gBACvC,eAAe,EAAE,GAAG;aACvB,CAAC,CAAC;YACH,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"}
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
- yield updater.updateUnlock({
99
- targetDocumentFieldPath: query.data.path,
100
- transactionId: info[info.length - 1]["original_transaction_id"],
101
- transactionData: info[info.length - 1],
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;AAG1D;;;;;;;;;;;;;;;;;;;GAmBG;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,yBAAyB;YACzB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;gBACjC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;gBACnC,QAAQ,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,mCAAI,EAAE;aACxD,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;YAChF,CAAC;YACD,yBAAyB;YACzB,MAAM,IAAI,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAChC,kBAAkB,EAAE,8CAA8C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CACtF,CAAC;YACN,CAAC;YACD,gCAAgC;YAChC,MAAM,OAAO,CAAC,YAAY,CAAC;gBACvB,uBAAuB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;gBACxC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,yBAAyB,CAAC;gBAC/D,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACzC,CAAC,CAAC;YACH,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"}
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
- const firestoreInstance = admin.firestore();
107
- const targetPath = process.env.PURCHASE_SUBSCRIPTIONPATH;
108
- const androidServiceAccountEmail = process.env.PURCHASE_ANDROID_SERVICEACCOUNT_EMAIL;
109
- const androidServiceAccountPrivateKey = process.env.PURCHASE_ANDROID_SERVICEACCOUNT_PRIVATE_KEY;
110
- if (!androidServiceAccountEmail || !androidServiceAccountPrivateKey || !targetPath) {
111
- throw new Error("The data is invalid.");
112
- }
113
- const { subscriptionNotification, packageName, } = messageBody;
114
- if (subscriptionNotification) {
115
- const { notificationType, purchaseToken, subscriptionId, } = subscriptionNotification;
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
- case SubscriptionNotificationTypes.SUBSCRIPTION_CANCELED: {
178
- for (const key in res) {
179
- if (!data[key]) {
180
- continue;
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 time = new Date().getTime();
185
- const expiryTimeMillis = data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
186
- data["orderId"] = res["orderId"];
187
- data["@time"] = new Date();
188
- if (expiryTimeMillis <= time) {
189
- data["expired"] = true;
190
- data["paused"] = false;
191
- yield firestoreInstance.doc(path).set(data);
192
- console.log(`Expired subscription: ${data["productId"]}:${user}`);
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
- else {
195
- data["expired"] = false;
196
- data["paused"] = false;
197
- yield firestoreInstance.doc(path).set(data);
198
- console.log(`Updated subscription: ${data["productId"]}:${user}`);
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
- break;
201
- }
202
- case SubscriptionNotificationTypes.SUBSCRIPTION_REVOKED:
203
- case SubscriptionNotificationTypes.SUBSCRIPTION_EXPIRED:
204
- case SubscriptionNotificationTypes.SUBSCRIPTION_PAUSED:
205
- case SubscriptionNotificationTypes.SUBSCRIPTION_ON_HOLD: {
206
- for (const key in res) {
207
- if (!data[key]) {
208
- continue;
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
- data[key] = utils.parse(res[key]);
211
- }
212
- data["expired"] = true;
213
- if (notificationType === SubscriptionNotificationTypes.SUBSCRIPTION_PAUSED || notificationType === SubscriptionNotificationTypes.SUBSCRIPTION_ON_HOLD) {
214
- data["paused"] = true;
215
- yield firestoreInstance.doc(path).set(data);
216
- console.log(`Paused subscription: ${data["productId"]}:${user}`);
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
- else {
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
- if (res["linkedPurchaseToken"]) {
229
- const linkedPurchaseToken = res["linkedPurchaseToken"];
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) {