@mathrunet/masamune 3.1.1 → 3.2.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/.claude/settings.local.json +9 -0
- package/CHANGELOG.md +18 -0
- package/dist/functions/consumable_verify_ios.js +4 -2
- package/dist/functions/consumable_verify_ios.js.map +1 -1
- package/dist/functions/nonconsumable_verify_ios.js +4 -2
- package/dist/functions/nonconsumable_verify_ios.js.map +1 -1
- package/dist/functions/subscription_verify_ios.js +5 -3
- package/dist/functions/subscription_verify_ios.js.map +1 -1
- package/dist/lib/functions/verify_ios.d.ts +53 -6
- package/dist/lib/functions/verify_ios.js +113 -5
- package/dist/lib/functions/verify_ios.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## [3.2.1](https://github.com/mathrunet/node_masamune/compare/v3.2.0...v3.2.1) (2025-08-19)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### fix
|
|
5
|
+
|
|
6
|
+
* Fixed: Parameters were not passed. ([2e3a7ba](https://github.com/mathrunet/node_masamune/commit/2e3a7ba20e7808a29b6558501c913594da5f8d4e))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# [3.2.0](https://github.com/mathrunet/node_masamune/compare/v3.1.1...v3.2.0) (2025-08-19)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### feat
|
|
14
|
+
|
|
15
|
+
* Supports iOS StoreKit 2 validation. ([62450c5](https://github.com/mathrunet/node_masamune/commit/62450c566e33f97b0112bb55b1e3f34ea0d3a25e))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
1
19
|
## [3.1.1](https://github.com/mathrunet/node_masamune/compare/v3.1.0...v3.1.1) (2025-08-14)
|
|
2
20
|
|
|
3
21
|
|
|
@@ -84,12 +84,14 @@ module.exports = (regions, options, data) => {
|
|
|
84
84
|
enforceAppCheck: (_c = options.enforceAppCheck) !== null && _c !== void 0 ? _c : undefined,
|
|
85
85
|
consumeAppCheckToken: (_d = options.consumeAppCheckToken) !== null && _d !== void 0 ? _d : undefined,
|
|
86
86
|
}, (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
87
|
-
var _a, _b;
|
|
87
|
+
var _a, _b, _c;
|
|
88
88
|
try {
|
|
89
89
|
/* ==== IOS検証ここから ==== */
|
|
90
90
|
const res = yield verifier.verifyIOS({
|
|
91
91
|
receiptData: query.data.receiptData,
|
|
92
92
|
password: (_a = process.env.PURCHASE_IOS_SHAREDSECRET) !== null && _a !== void 0 ? _a : "",
|
|
93
|
+
transactionId: query.data.transactionId,
|
|
94
|
+
storeKitVersion: (_b = query.data.storeKitVersion) !== null && _b !== void 0 ? _b : 1,
|
|
93
95
|
});
|
|
94
96
|
const status = res["status"];
|
|
95
97
|
if (status !== 0) {
|
|
@@ -102,7 +104,7 @@ module.exports = (regions, options, data) => {
|
|
|
102
104
|
}
|
|
103
105
|
/* ==== Firestoreの更新ここから ==== */
|
|
104
106
|
let error = null;
|
|
105
|
-
const firestoreDatabaseIds = (
|
|
107
|
+
const firestoreDatabaseIds = (_c = options.firestoreDatabaseIds) !== null && _c !== void 0 ? _c : [""];
|
|
106
108
|
for (const databaseId of firestoreDatabaseIds) {
|
|
107
109
|
try {
|
|
108
110
|
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
@@ -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;AAE1D,gEAA6D;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;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;
|
|
1
|
+
{"version":3,"file":"consumable_verify_ios.js","sourceRoot":"","sources":["../../src/functions/consumable_verify_ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,12 +79,14 @@ module.exports = (regions, options, data) => {
|
|
|
79
79
|
enforceAppCheck: (_c = options.enforceAppCheck) !== null && _c !== void 0 ? _c : undefined,
|
|
80
80
|
consumeAppCheckToken: (_d = options.consumeAppCheckToken) !== null && _d !== void 0 ? _d : undefined,
|
|
81
81
|
}, (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
82
|
-
var _a, _b;
|
|
82
|
+
var _a, _b, _c;
|
|
83
83
|
try {
|
|
84
84
|
/* ==== IOS検証ここから ==== */
|
|
85
85
|
const res = yield verifier.verifyIOS({
|
|
86
86
|
receiptData: query.data.receiptData,
|
|
87
87
|
password: (_a = process.env.PURCHASE_IOS_SHAREDSECRET) !== null && _a !== void 0 ? _a : "",
|
|
88
|
+
transactionId: query.data.transactionId,
|
|
89
|
+
storeKitVersion: (_b = query.data.storeKitVersion) !== null && _b !== void 0 ? _b : 1,
|
|
88
90
|
});
|
|
89
91
|
const status = res["status"];
|
|
90
92
|
if (status !== 0) {
|
|
@@ -97,7 +99,7 @@ module.exports = (regions, options, data) => {
|
|
|
97
99
|
}
|
|
98
100
|
/* ==== Firestoreの更新ここから ==== */
|
|
99
101
|
let error = null;
|
|
100
|
-
const firestoreDatabaseIds = (
|
|
102
|
+
const firestoreDatabaseIds = (_c = options.firestoreDatabaseIds) !== null && _c !== void 0 ? _c : [""];
|
|
101
103
|
for (const databaseId of firestoreDatabaseIds) {
|
|
102
104
|
try {
|
|
103
105
|
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
@@ -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;AAE1D,gEAA6D;AAE7D;;;;;;;;;;;;;;;;;;;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;
|
|
1
|
+
{"version":3,"file":"nonconsumable_verify_ios.js","sourceRoot":"","sources":["../../src/functions/nonconsumable_verify_ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,7 +99,7 @@ module.exports = (regions, options, data) => {
|
|
|
99
99
|
enforceAppCheck: (_c = options.enforceAppCheck) !== null && _c !== void 0 ? _c : undefined,
|
|
100
100
|
consumeAppCheckToken: (_d = options.consumeAppCheckToken) !== null && _d !== void 0 ? _d : undefined,
|
|
101
101
|
}, (query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
102
|
-
var _a, _b, _c;
|
|
102
|
+
var _a, _b, _c, _d;
|
|
103
103
|
try {
|
|
104
104
|
/* ==== IOS検証ここから ==== */
|
|
105
105
|
if (!query.data.userId) {
|
|
@@ -108,6 +108,8 @@ module.exports = (regions, options, data) => {
|
|
|
108
108
|
const res = yield verifier.verifyIOS({
|
|
109
109
|
receiptData: query.data.receiptData,
|
|
110
110
|
password: (_a = process.env.PURCHASE_IOS_SHAREDSECRET) !== null && _a !== void 0 ? _a : "",
|
|
111
|
+
transactionId: query.data.transactionId,
|
|
112
|
+
storeKitVersion: (_b = query.data.storeKitVersion) !== null && _b !== void 0 ? _b : 1,
|
|
111
113
|
});
|
|
112
114
|
const status = res["status"];
|
|
113
115
|
if (status !== 0) {
|
|
@@ -128,12 +130,12 @@ module.exports = (regions, options, data) => {
|
|
|
128
130
|
/* ==== ここまでIOS検証 ==== */
|
|
129
131
|
/* ==== Firestoreの更新ここから ==== */
|
|
130
132
|
let error = null;
|
|
131
|
-
const firestoreDatabaseIds = (
|
|
133
|
+
const firestoreDatabaseIds = (_c = options.firestoreDatabaseIds) !== null && _c !== void 0 ? _c : [""];
|
|
132
134
|
for (const databaseId of firestoreDatabaseIds) {
|
|
133
135
|
try {
|
|
134
136
|
const firestoreInstance = (0, firebase_loader_1.firestoreLoader)(databaseId);
|
|
135
137
|
yield subscriber.updateSubscription({
|
|
136
|
-
targetCollectionPath: (
|
|
138
|
+
targetCollectionPath: (_d = query.data.path) !== null && _d !== void 0 ? _d : process.env.PURCHASE_SUBSCRIPTIONPATH,
|
|
137
139
|
targetDocumentId: info[info.length - 1]["original_transaction_id"],
|
|
138
140
|
data: info[info.length - 1],
|
|
139
141
|
additionalData: query.data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription_verify_ios.js","sourceRoot":"","sources":["../../src/functions/subscription_verify_ios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AACnD,sEAAwD;AACxD,iFAAmE;AAEnE,gEAA6D;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;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,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YAC/E,CAAC;YACD,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;
|
|
1
|
+
{"version":3,"file":"subscription_verify_ios.js","sourceRoot":"","sources":["../../src/functions/subscription_verify_ios.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,23 +4,70 @@
|
|
|
4
4
|
* IOSの受信確認を実行します。
|
|
5
5
|
*
|
|
6
6
|
* @param {String} receiptData
|
|
7
|
-
* Receipt data for purchases.
|
|
7
|
+
* Receipt data for purchases (for StoreKit1) or JWT token (for StoreKit2).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* 購入の際のレシートデータ(StoreKit1の場合)またはJWTトークン(StoreKit2の場合)。
|
|
10
10
|
*
|
|
11
11
|
* @param {String} password
|
|
12
|
-
* SharedSecret for AppStore, obtained from [Apps]->[App Info]->[Shared Secret for App] in the AppStore.
|
|
12
|
+
* SharedSecret for AppStore (for StoreKit1), obtained from [Apps]->[App Info]->[Shared Secret for App] in the AppStore.
|
|
13
|
+
* For StoreKit2, this can be an empty string.
|
|
13
14
|
*
|
|
14
|
-
* AppStoreのSharedSecret
|
|
15
|
+
* AppStoreのSharedSecret(StoreKit1の場合)。AppStoreの[アプリ]->[App情報]->[App用共有シークレット]から取得します。
|
|
16
|
+
* StoreKit2の場合は空文字列を渡すことができます。
|
|
17
|
+
*
|
|
18
|
+
* @param {Number} storeKitVersion
|
|
19
|
+
* StoreKit version (1 or 2). Defaults to 1.
|
|
20
|
+
*
|
|
21
|
+
* StoreKitのバージョン(1または2)。デフォルトは1。
|
|
22
|
+
*
|
|
23
|
+
* @param {String} transactionId
|
|
24
|
+
* Transaction ID (required for StoreKit2).
|
|
25
|
+
*
|
|
26
|
+
* トランザクションID(StoreKit2の場合は必須)。
|
|
15
27
|
*
|
|
16
28
|
* @return {Promise<{ [key: string]: any; }}
|
|
17
29
|
* Receipt information for the item.
|
|
18
30
|
*
|
|
19
31
|
* アイテムの受領情報。
|
|
20
32
|
*/
|
|
21
|
-
export declare function verifyIOS({ receiptData, password }: {
|
|
33
|
+
export declare function verifyIOS({ receiptData, password, storeKitVersion, transactionId }: {
|
|
22
34
|
receiptData: string;
|
|
23
|
-
password
|
|
35
|
+
password?: string | null | undefined;
|
|
36
|
+
storeKitVersion?: number;
|
|
37
|
+
transactionId?: string | null | undefined;
|
|
24
38
|
}): Promise<{
|
|
39
|
+
status: number;
|
|
40
|
+
environment: any;
|
|
41
|
+
receipt: {
|
|
42
|
+
bundle_id: any;
|
|
43
|
+
application_version: any;
|
|
44
|
+
in_app: {
|
|
45
|
+
quantity: any;
|
|
46
|
+
product_id: any;
|
|
47
|
+
transaction_id: any;
|
|
48
|
+
original_transaction_id: any;
|
|
49
|
+
purchase_date_ms: any;
|
|
50
|
+
original_purchase_date_ms: any;
|
|
51
|
+
expires_date_ms: any;
|
|
52
|
+
web_order_line_item_id: any;
|
|
53
|
+
is_trial_period: any;
|
|
54
|
+
is_in_intro_offer_period: any;
|
|
55
|
+
}[];
|
|
56
|
+
};
|
|
57
|
+
latest_receipt_info: {
|
|
58
|
+
quantity: any;
|
|
59
|
+
product_id: any;
|
|
60
|
+
transaction_id: any;
|
|
61
|
+
original_transaction_id: any;
|
|
62
|
+
purchase_date_ms: any;
|
|
63
|
+
original_purchase_date_ms: any;
|
|
64
|
+
expires_date_ms: any;
|
|
65
|
+
web_order_line_item_id: any;
|
|
66
|
+
is_trial_period: any;
|
|
67
|
+
is_in_intro_offer_period: any;
|
|
68
|
+
}[];
|
|
69
|
+
pending_renewal_info: never[];
|
|
70
|
+
decoded_payload: any;
|
|
71
|
+
} | {
|
|
25
72
|
[key: string]: any;
|
|
26
73
|
}>;
|
|
@@ -45,20 +45,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
exports.verifyIOS = verifyIOS;
|
|
46
46
|
const functions = __importStar(require("firebase-functions/v2"));
|
|
47
47
|
const api_1 = require("../api");
|
|
48
|
+
const jwt = __importStar(require("jsonwebtoken"));
|
|
48
49
|
/**
|
|
49
50
|
* Perform IOS receipt verification.
|
|
50
51
|
*
|
|
51
52
|
* IOSの受信確認を実行します。
|
|
52
53
|
*
|
|
53
54
|
* @param {String} receiptData
|
|
54
|
-
* Receipt data for purchases.
|
|
55
|
+
* Receipt data for purchases (for StoreKit1) or JWT token (for StoreKit2).
|
|
55
56
|
*
|
|
56
|
-
*
|
|
57
|
+
* 購入の際のレシートデータ(StoreKit1の場合)またはJWTトークン(StoreKit2の場合)。
|
|
57
58
|
*
|
|
58
59
|
* @param {String} password
|
|
59
|
-
* SharedSecret for AppStore, obtained from [Apps]->[App Info]->[Shared Secret for App] in the AppStore.
|
|
60
|
+
* SharedSecret for AppStore (for StoreKit1), obtained from [Apps]->[App Info]->[Shared Secret for App] in the AppStore.
|
|
61
|
+
* For StoreKit2, this can be an empty string.
|
|
60
62
|
*
|
|
61
|
-
* AppStoreのSharedSecret
|
|
63
|
+
* AppStoreのSharedSecret(StoreKit1の場合)。AppStoreの[アプリ]->[App情報]->[App用共有シークレット]から取得します。
|
|
64
|
+
* StoreKit2の場合は空文字列を渡すことができます。
|
|
65
|
+
*
|
|
66
|
+
* @param {Number} storeKitVersion
|
|
67
|
+
* StoreKit version (1 or 2). Defaults to 1.
|
|
68
|
+
*
|
|
69
|
+
* StoreKitのバージョン(1または2)。デフォルトは1。
|
|
70
|
+
*
|
|
71
|
+
* @param {String} transactionId
|
|
72
|
+
* Transaction ID (required for StoreKit2).
|
|
73
|
+
*
|
|
74
|
+
* トランザクションID(StoreKit2の場合は必須)。
|
|
62
75
|
*
|
|
63
76
|
* @return {Promise<{ [key: string]: any; }}
|
|
64
77
|
* Receipt information for the item.
|
|
@@ -66,7 +79,16 @@ const api_1 = require("../api");
|
|
|
66
79
|
* アイテムの受領情報。
|
|
67
80
|
*/
|
|
68
81
|
function verifyIOS(_a) {
|
|
69
|
-
return __awaiter(this, arguments, void 0, function* ({ receiptData, password }) {
|
|
82
|
+
return __awaiter(this, arguments, void 0, function* ({ receiptData, password, storeKitVersion = 1, transactionId }) {
|
|
83
|
+
if (storeKitVersion === 2) {
|
|
84
|
+
if (!transactionId) {
|
|
85
|
+
throw new functions.https.HttpsError("invalid-argument", "Transaction ID is required for StoreKit2 verification.");
|
|
86
|
+
}
|
|
87
|
+
return yield verifyIOSStoreKit2({ jwtToken: receiptData, transactionId });
|
|
88
|
+
}
|
|
89
|
+
if (!password) {
|
|
90
|
+
throw new functions.https.HttpsError("invalid-argument", "Password is required for StoreKit1 verification.");
|
|
91
|
+
}
|
|
70
92
|
let res = yield api_1.Api.post("https://buy.itunes.apple.com/verifyReceipt", {
|
|
71
93
|
timeout: 30 * 1000,
|
|
72
94
|
headers: {
|
|
@@ -116,4 +138,90 @@ function verifyIOS(_a) {
|
|
|
116
138
|
return json;
|
|
117
139
|
});
|
|
118
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Verify iOS StoreKit2 transaction.
|
|
143
|
+
*
|
|
144
|
+
* iOS StoreKit2のトランザクションを検証します。
|
|
145
|
+
*
|
|
146
|
+
* @param {String} jwtToken
|
|
147
|
+
* JWT token from StoreKit2.
|
|
148
|
+
*
|
|
149
|
+
* StoreKit2からのJWTトークン。
|
|
150
|
+
*
|
|
151
|
+
*
|
|
152
|
+
* @return {Promise<{ [key: string]: any; }}
|
|
153
|
+
* Transaction information.
|
|
154
|
+
*
|
|
155
|
+
* トランザクション情報。
|
|
156
|
+
*/
|
|
157
|
+
function verifyIOSStoreKit2(_a) {
|
|
158
|
+
return __awaiter(this, arguments, void 0, function* ({ jwtToken, transactionId }) {
|
|
159
|
+
var _b, _c, _d, _e, _f, _g;
|
|
160
|
+
if (!jwtToken) {
|
|
161
|
+
throw new functions.https.HttpsError("invalid-argument", "JWT token is required for StoreKit2 verification.");
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const decodedHeader = jwt.decode(jwtToken, { complete: true });
|
|
165
|
+
if (!decodedHeader) {
|
|
166
|
+
throw new functions.https.HttpsError("invalid-argument", "Invalid JWT token.");
|
|
167
|
+
}
|
|
168
|
+
const algorithm = decodedHeader.header.alg;
|
|
169
|
+
// const keyId = decodedHeader.header.kid; // May be used for future certificate validation
|
|
170
|
+
const x5c = decodedHeader.header.x5c;
|
|
171
|
+
if (!x5c || !Array.isArray(x5c) || x5c.length === 0) {
|
|
172
|
+
throw new functions.https.HttpsError("invalid-argument", "Missing x5c certificate chain in JWT header.");
|
|
173
|
+
}
|
|
174
|
+
const certificate = `-----BEGIN CERTIFICATE-----\n${x5c[0]}\n-----END CERTIFICATE-----`;
|
|
175
|
+
const verifiedPayload = jwt.verify(jwtToken, certificate, {
|
|
176
|
+
algorithms: [algorithm]
|
|
177
|
+
});
|
|
178
|
+
if (transactionId && verifiedPayload.transactionId !== transactionId) {
|
|
179
|
+
throw new functions.https.HttpsError("permission-denied", "Transaction ID mismatch.");
|
|
180
|
+
}
|
|
181
|
+
const result = {
|
|
182
|
+
status: 0,
|
|
183
|
+
environment: verifiedPayload.environment || "Production",
|
|
184
|
+
receipt: {
|
|
185
|
+
bundle_id: verifiedPayload.bundleId,
|
|
186
|
+
application_version: verifiedPayload.appVersion,
|
|
187
|
+
in_app: [{
|
|
188
|
+
quantity: verifiedPayload.quantity || "1",
|
|
189
|
+
product_id: verifiedPayload.productId,
|
|
190
|
+
transaction_id: verifiedPayload.transactionId,
|
|
191
|
+
original_transaction_id: verifiedPayload.originalTransactionId,
|
|
192
|
+
purchase_date_ms: (_b = verifiedPayload.purchaseDate) === null || _b === void 0 ? void 0 : _b.toString(),
|
|
193
|
+
original_purchase_date_ms: (_c = verifiedPayload.originalPurchaseDate) === null || _c === void 0 ? void 0 : _c.toString(),
|
|
194
|
+
expires_date_ms: (_d = verifiedPayload.expiresDate) === null || _d === void 0 ? void 0 : _d.toString(),
|
|
195
|
+
web_order_line_item_id: verifiedPayload.webOrderLineItemId,
|
|
196
|
+
is_trial_period: verifiedPayload.isTrialPeriod || "false",
|
|
197
|
+
is_in_intro_offer_period: verifiedPayload.isInIntroOfferPeriod || "false"
|
|
198
|
+
}]
|
|
199
|
+
},
|
|
200
|
+
latest_receipt_info: [{
|
|
201
|
+
quantity: verifiedPayload.quantity || "1",
|
|
202
|
+
product_id: verifiedPayload.productId,
|
|
203
|
+
transaction_id: verifiedPayload.transactionId,
|
|
204
|
+
original_transaction_id: verifiedPayload.originalTransactionId,
|
|
205
|
+
purchase_date_ms: (_e = verifiedPayload.purchaseDate) === null || _e === void 0 ? void 0 : _e.toString(),
|
|
206
|
+
original_purchase_date_ms: (_f = verifiedPayload.originalPurchaseDate) === null || _f === void 0 ? void 0 : _f.toString(),
|
|
207
|
+
expires_date_ms: (_g = verifiedPayload.expiresDate) === null || _g === void 0 ? void 0 : _g.toString(),
|
|
208
|
+
web_order_line_item_id: verifiedPayload.webOrderLineItemId,
|
|
209
|
+
is_trial_period: verifiedPayload.isTrialPeriod || "false",
|
|
210
|
+
is_in_intro_offer_period: verifiedPayload.isInIntroOfferPeriod || "false"
|
|
211
|
+
}],
|
|
212
|
+
pending_renewal_info: [],
|
|
213
|
+
decoded_payload: verifiedPayload
|
|
214
|
+
};
|
|
215
|
+
console.log("StoreKit2 verification successful:", result);
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
console.error("StoreKit2 verification error:", error);
|
|
220
|
+
if (error instanceof jwt.JsonWebTokenError) {
|
|
221
|
+
throw new functions.https.HttpsError("invalid-argument", "Invalid JWT token: " + error.message);
|
|
222
|
+
}
|
|
223
|
+
throw new functions.https.HttpsError("internal", "Failed to verify StoreKit2 transaction.");
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
119
227
|
//# sourceMappingURL=verify_ios.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify_ios.js","sourceRoot":"","sources":["../../../src/lib/functions/verify_ios.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"verify_ios.js","sourceRoot":"","sources":["../../../src/lib/functions/verify_ios.ts"],"names":[],"mappings":"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"}
|