@mathrunet/masamune 0.4.4 → 0.5.2

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 (67) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/functions/android_auth_code.d.ts +1 -0
  3. package/dist/functions/android_auth_code.js +76 -0
  4. package/dist/functions/android_auth_code.js.map +1 -0
  5. package/dist/functions/android_token.d.ts +1 -0
  6. package/dist/functions/android_token.js +117 -0
  7. package/dist/functions/android_token.js.map +1 -0
  8. package/dist/functions/consumable_verify_android.d.ts +1 -0
  9. package/dist/functions/consumable_verify_android.js +132 -0
  10. package/dist/functions/consumable_verify_android.js.map +1 -0
  11. package/dist/functions/consumable_verify_ios.d.ts +1 -0
  12. package/dist/functions/consumable_verify_ios.js +92 -0
  13. package/dist/functions/consumable_verify_ios.js.map +1 -0
  14. package/dist/functions/gmail.js +8 -3
  15. package/dist/functions/gmail.js.map +1 -1
  16. package/dist/functions/nonconsumable_verify_android.d.ts +1 -0
  17. package/dist/functions/nonconsumable_verify_android.js +126 -0
  18. package/dist/functions/nonconsumable_verify_android.js.map +1 -0
  19. package/dist/functions/nonconsumable_verify_ios.d.ts +1 -0
  20. package/dist/functions/nonconsumable_verify_ios.js +86 -0
  21. package/dist/functions/nonconsumable_verify_ios.js.map +1 -0
  22. package/dist/functions/purchase_hook_android.d.ts +1 -0
  23. package/dist/functions/purchase_hook_android.js +237 -0
  24. package/dist/functions/purchase_hook_android.js.map +1 -0
  25. package/dist/functions/purchase_hook_ios.d.ts +1 -0
  26. package/dist/functions/purchase_hook_ios.js +135 -0
  27. package/dist/functions/purchase_hook_ios.js.map +1 -0
  28. package/dist/functions/send_grid.js +6 -1
  29. package/dist/functions/send_grid.js.map +1 -1
  30. package/dist/functions/stripe.js +46 -12
  31. package/dist/functions/stripe.js.map +1 -1
  32. package/dist/functions/stripe_hook_secure.js +5 -1
  33. package/dist/functions/stripe_hook_secure.js.map +1 -1
  34. package/dist/functions/subscription_verify_android.d.ts +1 -0
  35. package/dist/functions/subscription_verify_android.js +159 -0
  36. package/dist/functions/subscription_verify_android.js.map +1 -0
  37. package/dist/functions/subscription_verify_ios.d.ts +1 -0
  38. package/dist/functions/subscription_verify_ios.js +128 -0
  39. package/dist/functions/subscription_verify_ios.js.map +1 -0
  40. package/dist/functions.d.ts +62 -0
  41. package/dist/functions.js +62 -0
  42. package/dist/functions.js.map +1 -1
  43. package/dist/lib/gmail.d.ts +6 -1
  44. package/dist/lib/gmail.js +1 -1
  45. package/dist/lib/gmail.js.map +1 -1
  46. package/dist/lib/send_grid.d.ts +6 -1
  47. package/dist/lib/send_grid.js +1 -1
  48. package/dist/lib/send_grid.js.map +1 -1
  49. package/dist/lib/update_subscription.d.ts +83 -0
  50. package/dist/lib/update_subscription.js +142 -0
  51. package/dist/lib/update_subscription.js.map +1 -0
  52. package/dist/lib/update_unlock.d.ts +13 -0
  53. package/dist/lib/update_unlock.js +64 -0
  54. package/dist/lib/update_unlock.js.map +1 -0
  55. package/dist/lib/update_wallet.d.ts +19 -0
  56. package/dist/lib/update_wallet.js +70 -0
  57. package/dist/lib/update_wallet.js.map +1 -0
  58. package/dist/lib/utils.d.ts +10 -2
  59. package/dist/lib/utils.js +2 -2
  60. package/dist/lib/utils.js.map +1 -1
  61. package/dist/lib/verify_android.d.ts +56 -0
  62. package/dist/lib/verify_android.js +128 -0
  63. package/dist/lib/verify_android.js.map +1 -0
  64. package/dist/lib/verify_ios.d.ts +26 -0
  65. package/dist/lib/verify_ios.js +115 -0
  66. package/dist/lib/verify_ios.js.map +1 -0
  67. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const functions = __importStar(require("firebase-functions"));
36
+ const verifier = __importStar(require("../lib/verify_ios"));
37
+ const updater = __importStar(require("../lib/update_unlock"));
38
+ /**
39
+ * Performs non-consumable in-app purchases. Unlock by setting the value of the field in the document specified in [path] to `true`.
40
+ *
41
+ * 非消費型のアプリ内課金を行います。[path]に指定したドキュメント内のフィールドの値を`true`にすることでアンロックを行います。
42
+ *
43
+ * @param purchase.ios.shared_secret
44
+ * SharedSecret for AppStore, obtained from [Apps]->[App Info]->[Shared Secret for App] in the AppStore.
45
+ *
46
+ * AppStoreのSharedSecret。AppStoreの[アプリ]->[App情報]->[App用共有シークレット]から取得します。
47
+ *
48
+ * @param path
49
+ * The path, including the key, of the field in the document where the unlock information is to be stored.
50
+ *
51
+ * アンロック情報を保存するドキュメント内のフィールドのキーを含めたパス。
52
+ *
53
+ * @param receiptData
54
+ * Receipt data for purchases.
55
+ *
56
+ * 購入の際のレシートデータ。
57
+ */
58
+ module.exports = (regions) => functions.region(...regions).https.onCall((query) => __awaiter(void 0, void 0, void 0, function* () {
59
+ try {
60
+ const config = functions.config().purchase;
61
+ /* ==== IOS検証ここから ==== */
62
+ const res = yield verifier.verifyIOS({
63
+ receiptData: query.receiptData,
64
+ password: config.ios.shared_secret,
65
+ });
66
+ const status = res["status"];
67
+ if (status !== 0) {
68
+ throw new functions.https.HttpsError("unauthenticated", "Illegal receipt.");
69
+ }
70
+ /* ==== ここまでIOS検証 ==== */
71
+ if (!query.path) {
72
+ return res;
73
+ }
74
+ /* ==== Firestoreの更新ここから ==== */
75
+ yield updater.updateUnlock({
76
+ targetDocumentFieldPath: query.path,
77
+ });
78
+ /* ==== ここまでFirestoreの更新 ==== */
79
+ return res;
80
+ }
81
+ catch (err) {
82
+ console.error(err);
83
+ throw err;
84
+ }
85
+ }));
86
+ //# sourceMappingURL=nonconsumable_verify_ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonconsumable_verify_ios.js","sourceRoot":"","sources":["../../src/functions/nonconsumable_verify_ios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgD;AAChD,4DAA8C;AAC9C,8DAAgD;AAEhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,GAAG,CAAC,OAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAC7E,CAAO,KAAK,EAAE,EAAE;IACZ,IAAI;QACA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;QAC3C,yBAAyB;QACzB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC;YACjC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,CAAC,EAAE;YACd,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;SAC/E;QACD,yBAAyB;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACb,OAAO,GAAG,CAAC;SACd;QACD,gCAAgC;QAChC,MAAM,OAAO,CAAC,YAAY,CAAC;YACvB,uBAAuB,EAAE,KAAK,CAAC,IAAI;SACtC,CAAC,CAAC;QACH,gCAAgC;QAChC,OAAO,GAAG,CAAC;KACd;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,GAAG,CAAC;KACb;AACL,CAAC,CAAA,CACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const functions = __importStar(require("firebase-functions"));
36
+ const admin = __importStar(require("firebase-admin"));
37
+ const verifier = __importStar(require("../lib/verify_android"));
38
+ const utils = __importStar(require("../lib/utils"));
39
+ /**
40
+ * 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.
41
+ *
42
+ * Android用のWebhookのエンドポイントです。GCPのpub/subに`purchasing`のトピックを作成しプリンシパルに「google-play-developer-notifications@system.gserviceaccount.com」を設定することで通知を受け取ることができるようになります。
43
+ *
44
+ * @param purchase.android.refresh_token
45
+ * Describe the refresh token that can be obtained by accessing [android_auth_code].
46
+ *
47
+ * [android_auth_code]にアクセスすることで取得できるリフレッシュトークンを記述します。
48
+ *
49
+ * @param purchase.android.client_id
50
+ * Google's OAuth 2.0 client ID.
51
+ * Create an OAuth consent screen from the URL below.
52
+ * https://console.cloud.google.com/apis/credentials/consent
53
+ * Then create an OAuth 2.0 client ID from the credentials.
54
+ * https://console.cloud.google.com/apis/credentials
55
+ *
56
+ * GoogleのOAuth2.0のクライアントID。
57
+ * 下記のURLからOAuthの同意画面を作成します。
58
+ * https://console.cloud.google.com/apis/credentials/consent
59
+ * その後、認証情報からOAuth 2.0 クライアントIDを作成します。
60
+ * https://console.cloud.google.com/apis/credentials
61
+ *
62
+ * @param purchase.android.client_secret
63
+ * Google's OAuth 2.0 client secret.
64
+ * Create an OAuth consent screen from the URL below.
65
+ * https://console.cloud.google.com/apis/credentials/consent
66
+ * Then create an OAuth 2.0 client ID from the credentials.
67
+ * https://console.cloud.google.com/apis/credentials
68
+ *
69
+ * GoogleのOAuth2.0のクライアントシークレット。
70
+ * 下記のURLからOAuthの同意画面を作成します。
71
+ * https://console.cloud.google.com/apis/credentials/consent
72
+ * その後、認証情報からOAuth 2.0 クライアントIDを作成します。
73
+ * https://console.cloud.google.com/apis/credentials
74
+ *
75
+ * @param purchase.android.subscription_path
76
+ * Describes the path to the collection of subscriptions.
77
+ *
78
+ * サブスクリプションのコレクションのパスを記述します。
79
+ */
80
+ module.exports = functions.pubsub
81
+ .topic("purchasing")
82
+ .onPublish((message) => __awaiter(void 0, void 0, void 0, function* () {
83
+ try {
84
+ const messageBody = message.data ?
85
+ JSON.parse(Buffer.from(message.data, "base64").toString()) :
86
+ null;
87
+ if (messageBody) {
88
+ const firestoreInstance = admin.firestore();
89
+ const config = functions.config().purchase;
90
+ const targetPath = config.subscription_path;
91
+ if (!config.android.client_id || !config.android.client_secret || !config.android.refresh_token || !targetPath) {
92
+ throw new Error("The data is invalid.");
93
+ }
94
+ const { subscriptionNotification, packageName, } = messageBody;
95
+ if (subscriptionNotification) {
96
+ const { notificationType, purchaseToken, subscriptionId, } = subscriptionNotification;
97
+ if (!purchaseToken || !packageName || !subscriptionId) {
98
+ throw new Error("The data is invalid.");
99
+ }
100
+ const res = yield verifier.verifyAndroid({
101
+ type: "subscriptions",
102
+ clientId: config.android.client_id,
103
+ clientSecret: config.android.client_secret,
104
+ refreshToken: config.android.refresh_token,
105
+ packageName: packageName,
106
+ productId: subscriptionId,
107
+ purchaseToken: purchaseToken,
108
+ });
109
+ const search = yield firestoreInstance.collection(targetPath).where("token", "==", purchaseToken).get();
110
+ if (search.empty) {
111
+ throw new Error("The purchased data is not found.");
112
+ }
113
+ const doc = search.docs[0];
114
+ const data = doc === null || doc === void 0 ? void 0 : doc.data();
115
+ const path = doc === null || doc === void 0 ? void 0 : doc.ref.path;
116
+ if (!data) {
117
+ throw new Error("The purchased data is not found.");
118
+ }
119
+ const user = data["userId"];
120
+ console.log(`notificationType: ${notificationType}`);
121
+ switch (notificationType) {
122
+ case SubscriptionNotificationTypes.SUBSCRIPTION_RECOVERED:
123
+ case SubscriptionNotificationTypes.SUBSCRIPTION_RESTARTED:
124
+ case SubscriptionNotificationTypes.SUBSCRIPTION_RENEWED:
125
+ case SubscriptionNotificationTypes.SUBSCRIPTION_IN_GRACE_PERIOD: {
126
+ for (const key in res) {
127
+ if (!data[key]) {
128
+ continue;
129
+ }
130
+ data[key] = utils.parse(res[key]);
131
+ }
132
+ data["expired"] = false;
133
+ data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
134
+ data["orderId"] = res["orderId"];
135
+ data["@time"] = new Date();
136
+ yield firestoreInstance.doc(path).set(data);
137
+ console.log(`Updated subscription: ${data["productId"]}:${user}`);
138
+ break;
139
+ }
140
+ case SubscriptionNotificationTypes.SUBSCRIPTION_DEFERRED:
141
+ case SubscriptionNotificationTypes.SUBSCRIPTION_PRICE_CHANGE_CONFIRMED:
142
+ case SubscriptionNotificationTypes.SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED: {
143
+ for (const key in res) {
144
+ if (!data[key]) {
145
+ continue;
146
+ }
147
+ data[key] = utils.parse(res[key]);
148
+ }
149
+ data["expiredTime"] = parseInt(res["expiryTimeMillis"]);
150
+ data["orderId"] = res["orderId"];
151
+ data["@time"] = new Date();
152
+ yield firestoreInstance.doc(path).set(data);
153
+ console.log(`Updated subscription: ${data["productId"]}:${user}`);
154
+ break;
155
+ }
156
+ case SubscriptionNotificationTypes.SUBSCRIPTION_REVOKED:
157
+ case SubscriptionNotificationTypes.SUBSCRIPTION_EXPIRED:
158
+ case SubscriptionNotificationTypes.SUBSCRIPTION_CANCELED:
159
+ case SubscriptionNotificationTypes.SUBSCRIPTION_PAUSED:
160
+ case SubscriptionNotificationTypes.SUBSCRIPTION_ON_HOLD: {
161
+ for (const key in res) {
162
+ if (!data[key]) {
163
+ continue;
164
+ }
165
+ data[key] = utils.parse(res[key]);
166
+ }
167
+ data["expired"] = true;
168
+ yield firestoreInstance.doc(path).set(data);
169
+ console.log(`Expired subscription: ${data["productId"]}:${user}`);
170
+ break;
171
+ }
172
+ default:
173
+ break;
174
+ }
175
+ if (res["linkedPurchaseToken"]) {
176
+ const linkedPurchaseToken = res["linkedPurchaseToken"];
177
+ const search = yield firestoreInstance.collection(targetPath).where("token", "==", linkedPurchaseToken).get();
178
+ if (search.empty) {
179
+ return;
180
+ }
181
+ const doc = search.docs[0];
182
+ const data = doc === null || doc === void 0 ? void 0 : doc.data();
183
+ const path = doc === null || doc === void 0 ? void 0 : doc.ref.path;
184
+ if (!data) {
185
+ throw new Error("The purchased data is not found.");
186
+ }
187
+ const user = data["userId"];
188
+ data["expired"] = true;
189
+ data["@time"] = new Date();
190
+ yield firestoreInstance.doc(path).set(data);
191
+ console.log(`Expired subscription: ${data["productId"]}:${user}`);
192
+ }
193
+ }
194
+ }
195
+ }
196
+ catch (err) {
197
+ console.error(err);
198
+ throw new functions.https.HttpsError("unknown", "Unknown error.");
199
+ }
200
+ }));
201
+ /**
202
+ * Notification Type.
203
+ *
204
+ * 通知タイプ。
205
+ */
206
+ var SubscriptionNotificationTypes;
207
+ (function (SubscriptionNotificationTypes) {
208
+ // 定期購入がアカウントの一時停止から復帰した。
209
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_RECOVERED"] = 1] = "SUBSCRIPTION_RECOVERED";
210
+ // アクティブな定期購入が更新された。
211
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_RENEWED"] = 2] = "SUBSCRIPTION_RENEWED";
212
+ // 定期購入が自発的または非自発的にキャンセルされた。
213
+ // 自発的なキャンセルの場合、ユーザーがキャンセルしたときに送信されます。
214
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_CANCELED"] = 3] = "SUBSCRIPTION_CANCELED";
215
+ // 新しい定期購入が購入された。
216
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_PURCHASED"] = 4] = "SUBSCRIPTION_PURCHASED";
217
+ // 定期購入でアカウントが一時停止された(有効な場合)。
218
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_ON_HOLD"] = 5] = "SUBSCRIPTION_ON_HOLD";
219
+ // 定期購入が猶予期間に入った(有効な場合)。
220
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_IN_GRACE_PERIOD"] = 6] = "SUBSCRIPTION_IN_GRACE_PERIOD";
221
+ // ユーザーが [Play] > [アカウント] > [定期購入] から
222
+ // 定期購入を再有効化した(定期購入の再開にはオプトインが必要)。
223
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_RESTARTED"] = 7] = "SUBSCRIPTION_RESTARTED";
224
+ // 定期購入の料金変更がユーザーによって確認された。
225
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_PRICE_CHANGE_CONFIRMED"] = 8] = "SUBSCRIPTION_PRICE_CHANGE_CONFIRMED";
226
+ // 定期購入の契約期間が延長された。
227
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_DEFERRED"] = 9] = "SUBSCRIPTION_DEFERRED";
228
+ // 定期購入が一時停止された。
229
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_PAUSED"] = 10] = "SUBSCRIPTION_PAUSED";
230
+ // 定期購入の一時停止スケジュールが変更された。
231
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED"] = 11] = "SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED";
232
+ // 有効期限前にユーザーが定期購入を取り消した。
233
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_REVOKED"] = 12] = "SUBSCRIPTION_REVOKED";
234
+ // 定期購入が期限切れになった。
235
+ SubscriptionNotificationTypes[SubscriptionNotificationTypes["SUBSCRIPTION_EXPIRED"] = 13] = "SUBSCRIPTION_EXPIRED";
236
+ })(SubscriptionNotificationTypes || (SubscriptionNotificationTypes = {}));
237
+ //# sourceMappingURL=purchase_hook_android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchase_hook_android.js","sourceRoot":"","sources":["../../src/functions/purchase_hook_android.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const functions = __importStar(require("firebase-functions"));
36
+ const admin = __importStar(require("firebase-admin"));
37
+ const utils = __importStar(require("../lib/utils"));
38
+ /**
39
+ * Webhook endpoint for IOS, which allows you to receive notifications by setting the endpoint in AppStoreConnect's [App]->[App Information]->[App Store Server Notification].
40
+ *
41
+ * IOS用のWebhookのエンドポイントです。AppStoreConnectの[App]->[App情報]->[App Storeサーバ通知]にエンドポイントを設定することで通知を受け取ることができるようになります。
42
+ *
43
+ * @param purchase.android.subscription_path
44
+ * Describes the path to the collection of subscriptions.
45
+ *
46
+ * サブスクリプションのコレクションのパスを記述します。
47
+ */
48
+ module.exports = (regions) => functions.region(...regions).https.onRequest((req, res) => __awaiter(void 0, void 0, void 0, function* () {
49
+ try {
50
+ const message = req.body;
51
+ const signedPayload = message.signedPayload;
52
+ if (signedPayload) {
53
+ const signedPayloadBody = signedPayload.replace(/-/g, "+").replace(/_/g, "/").split(".")[1];
54
+ const messageBody = JSON.parse(Buffer.from(signedPayloadBody, "base64").toString());
55
+ if (messageBody) {
56
+ const { notificationType, data, } = messageBody;
57
+ const { signedTransactionInfo, } = data;
58
+ const signedTransactionInfoBody = signedTransactionInfo.replace(/-/g, "+").replace(/_/g, "/").split(".")[1];
59
+ const transactionInfo = JSON.parse(Buffer.from(signedTransactionInfoBody, "base64").toString());
60
+ const firestoreInstance = admin.firestore();
61
+ const config = functions.config().purchase;
62
+ const targetPath = config.subscription_path;
63
+ if (transactionInfo) {
64
+ const transactionId = transactionInfo.originalTransactionId;
65
+ const doc = yield firestoreInstance.doc(`${targetPath}/${transactionId}`).get();
66
+ const data = doc === null || doc === void 0 ? void 0 : doc.data();
67
+ const path = doc === null || doc === void 0 ? void 0 : doc.ref.path;
68
+ if (!data) {
69
+ throw new Error("The purchased data is not found.");
70
+ }
71
+ const user = data["userId"];
72
+ console.log(`notificationType: ${notificationType}`);
73
+ switch (notificationType) {
74
+ case "CONSUMPTION_REQUEST":
75
+ case "DID_CHANGE_RENEWAL_STATUS":
76
+ case "DID_FAIL_TO_RENEW":
77
+ case "PRICE_INCREASE":
78
+ case "REFUND_DECLINED": {
79
+ for (const key in transactionInfo) {
80
+ if (!data[key]) {
81
+ continue;
82
+ }
83
+ data[key] = utils.parse(transactionInfo[key]);
84
+ }
85
+ data["expiredTime"] = parseInt(transactionInfo["expiresDate"]);
86
+ data["orderId"] = transactionInfo["transactionId"];
87
+ yield firestoreInstance.doc(path).set(data);
88
+ console.log(`Updated subscription: ${data["productId"]}:${user}`);
89
+ break;
90
+ }
91
+ case "DID_CHANGE_RENEWAL_PREF":
92
+ case "DID_RENEW":
93
+ case "OFFER_REDEEMED":
94
+ case "RENEWAL_EXTENDED": {
95
+ for (const key in transactionInfo) {
96
+ if (!data[key]) {
97
+ continue;
98
+ }
99
+ data[key] = utils.parse(transactionInfo[key]);
100
+ }
101
+ data["expired"] = false;
102
+ data["expiredTime"] = parseInt(transactionInfo["expiresDate"]);
103
+ data["orderId"] = transactionInfo["transactionId"];
104
+ yield firestoreInstance.doc(path).set(data);
105
+ console.log(`Updated subscription: ${data["productId"]}:${user}`);
106
+ break;
107
+ }
108
+ case "EXPIRED":
109
+ case "REVOKE":
110
+ case "GRACE_PERIOD_EXPIRED":
111
+ case "REFUND": {
112
+ for (const key in transactionInfo) {
113
+ if (!data[key]) {
114
+ continue;
115
+ }
116
+ data[key] = utils.parse(transactionInfo[key]);
117
+ }
118
+ data["expired"] = true;
119
+ yield firestoreInstance.doc(path).set(data);
120
+ console.log(`Expired subscription: ${data["productId"]}:${user}`);
121
+ break;
122
+ }
123
+ default:
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ catch (err) {
131
+ console.error(err);
132
+ throw new functions.https.HttpsError("unknown", "Unknown error.");
133
+ }
134
+ }));
135
+ //# sourceMappingURL=purchase_hook_ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"purchase_hook_ios.js","sourceRoot":"","sources":["../../src/functions/purchase_hook_ios.ts"],"names":[],"mappings":"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"}
@@ -70,7 +70,12 @@ module.exports = (regions) => functions.region(...regions).https.onCall((query)
70
70
  if (!from || !to || !title || !content) {
71
71
  throw new functions.https.HttpsError("invalid-argument", "Query parameter is invalid.");
72
72
  }
73
- yield sendgrid.send(from, to, title, content);
73
+ yield sendgrid.send({
74
+ from: from,
75
+ to: to,
76
+ title: title,
77
+ content: content,
78
+ });
74
79
  return {
75
80
  success: true,
76
81
  };
@@ -1 +1 @@
1
- {"version":3,"file":"send_grid.js","sourceRoot":"","sources":["../../src/functions/send_grid.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgD;AAChD,2DAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,GAAG,CAAC,OAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAC7E,CAAO,KAAK,EAAE,EAAE;IACZ,IAAI;QACA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;YACpC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,6BAA6B,CAAC,CAAC;SAC3F;QACD,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO;YACH,OAAO,EAAE,IAAI;SAChB,CAAC;KACL;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,GAAG,CAAC;KACb;AACL,CAAC,CAAA,CACJ,CAAC"}
1
+ {"version":3,"file":"send_grid.js","sourceRoot":"","sources":["../../src/functions/send_grid.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgD;AAChD,2DAA6C;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,OAAO,GAAG,CAAC,OAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAC7E,CAAO,KAAK,EAAE,EAAE;IACZ,IAAI;QACA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;YACpC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,6BAA6B,CAAC,CAAC;SAC3F;QACD,MAAM,QAAQ,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,IAAI;YACV,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;QACH,OAAO;YACH,OAAO,EAAE,IAAI;SAChB,CAAC;KACL;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,GAAG,CAAC;KACb;AACL,CAAC,CAAA,CACJ,CAAC"}
@@ -561,11 +561,21 @@ module.exports = (regions) => functions.region(...regions).https.onCall((query)
561
561
  if (emailFrom && email && emailTitle && emailContent) {
562
562
  switch (stripeEmailProvider) {
563
563
  case "gmail": {
564
- yield gmail.send(emailFrom, email, emailTitle, emailContent.replace("{url}", nextActionUrl));
564
+ yield gmail.send({
565
+ from: emailFrom,
566
+ to: email,
567
+ title: emailTitle,
568
+ content: emailContent.replace("{url}", nextActionUrl),
569
+ });
565
570
  break;
566
571
  }
567
572
  case "sendgrid": {
568
- yield sendgrid.send(emailFrom, email, emailTitle, emailContent.replace("{url}", nextActionUrl));
573
+ yield sendgrid.send({
574
+ from: emailFrom,
575
+ to: email,
576
+ title: emailTitle,
577
+ content: emailContent.replace("{url}", nextActionUrl),
578
+ });
569
579
  break;
570
580
  }
571
581
  }
@@ -781,12 +791,16 @@ module.exports = (regions) => functions.region(...regions).https.onCall((query)
781
791
  throw new functions.https.HttpsError("invalid-argument", "The user id is empty.");
782
792
  }
783
793
  if (!online) {
784
- returnUrl = returnUrl + "?token=" + utils.encrypt(JSON.stringify({
785
- userId: userId,
786
- orderId: orderId,
787
- successUrl: successUrl,
788
- failureUrl: failureUrl,
789
- }), apiKey.slice(0, 32), apiKey.slice(-16));
794
+ returnUrl = returnUrl + "?token=" + utils.encrypt({
795
+ raw: JSON.stringify({
796
+ userId: userId,
797
+ orderId: orderId,
798
+ successUrl: successUrl,
799
+ failureUrl: failureUrl,
800
+ }),
801
+ key: apiKey.slice(0, 32),
802
+ ivKey: apiKey.slice(-16),
803
+ });
790
804
  }
791
805
  const doc = yield firestoreInstance.doc(`${stripeUserPath}/${userId}/${stripePurchasePath}/${orderId}`).get();
792
806
  const data = doc.data();
@@ -812,11 +826,21 @@ module.exports = (regions) => functions.region(...regions).https.onCall((query)
812
826
  if (data["emailFrom"] && data["emailTo"] && data["emailTitle"] && data["emailContent"]) {
813
827
  switch (stripeEmailProvider) {
814
828
  case "gmail": {
815
- yield gmail.send(data["emailFrom"], data["emailTo"], data["emailTitle"], data["emailContent"].replace("{url}", nextActionUrl));
829
+ yield gmail.send({
830
+ from: data["emailFrom"],
831
+ to: data["emailTo"],
832
+ title: data["emailTitle"],
833
+ content: data["emailContent"].replace("{url}", nextActionUrl),
834
+ });
816
835
  break;
817
836
  }
818
837
  case "sendgrid": {
819
- yield sendgrid.send(data["emailFrom"], data["emailTo"], data["emailTitle"], data["emailContent"].replace("{url}", nextActionUrl));
838
+ yield sendgrid.send({
839
+ from: data["emailFrom"],
840
+ to: data["emailTo"],
841
+ title: data["emailTitle"],
842
+ content: data["emailContent"].replace("{url}", nextActionUrl),
843
+ });
820
844
  break;
821
845
  }
822
846
  }
@@ -873,11 +897,21 @@ module.exports = (regions) => functions.region(...regions).https.onCall((query)
873
897
  if (data["emailFrom"] && data["emailTo"] && data["emailTitle"] && data["emailContent"]) {
874
898
  switch (stripeEmailProvider) {
875
899
  case "gmail": {
876
- yield gmail.send(data["emailFrom"], data["emailTo"], data["emailTitle"], data["emailContent"].replace("{url}", nextActionUrl));
900
+ yield gmail.send({
901
+ from: data["emailFrom"],
902
+ to: data["emailTo"],
903
+ title: data["emailTitle"],
904
+ content: data["emailContent"].replace("{url}", nextActionUrl),
905
+ });
877
906
  break;
878
907
  }
879
908
  case "sendgrid": {
880
- yield sendgrid.send(data["emailFrom"], data["emailTo"], data["emailTitle"], data["emailContent"].replace("{url}", nextActionUrl));
909
+ yield sendgrid.send({
910
+ from: data["emailFrom"],
911
+ to: data["emailTo"],
912
+ title: data["emailTitle"],
913
+ content: data["emailContent"].replace("{url}", nextActionUrl),
914
+ });
881
915
  break;
882
916
  }
883
917
  }